April 26, 2024
Random Foreset Data Kapal Titanic_4

Belajar Data Science – Random Forest Untuk Modeling Data Kapal Titanic (Bagian 4)

Artikel ini akan membahas mengenai proses modeling untuk data kapal Titanic menggunakan metode Random Forrest. Proses yang akan dilakukan adalah melatih model Machine Learning dan membandingkan hasilnya. Perhatikan bahwa karena kumpulan data tidak menyediakan label untuk kumpulan pengujiannya, maka perlu menggunakan prediksi pada kumpulan pelatihan untuk membandingkan algoritma satu sama lain. Selanjutnya, akan menggunakan cross validation untuk mendapatkan hasil pembelajaran yang lebih akurat.

Artikel ini merupakan kelanjutan dari Belajar Data Science – Preprocessing Data Kapal Titanic (Bagian 3). Silahkan baca artikelnya sebelumnya melanjutkan. Data kapal Titanic dapat di akses melalui situs Kaggle.

Import Pustaka

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import cross_val_predict
from sklearn.metrics import confusion_matrix,precision_score
from sklearn.metrics import recall_score,f1_score, roc_auc_score

Modeling

X_train = train_df.drop('Survived', axis=1)
Y_train = train_df['Survived']
X_test = test_df.drop('PassengerId', axis=1)

Random forest

Random Forest adalah supervised learning algorithm. Random Forest membangun beberapa pohon keputusan dan menggabungkannya untuk mendapatkan prediksi yang lebih akurat dan stabil. Satu keuntungan besar dari Random Forest adalah dapat digunakan untuk masalah klasifikasi dan regresi, yang membentuk sebagian besar sistem pembelajaran mesin saat ini. Dengan beberapa pengecualian, pengklasifikasi Random Forest memiliki semua hyperparameter dari pengklasifikasi pohon keputusan dan juga semua hyperparameter dari pengklasifikasi bagging, untuk mengontrol ansambel itu sendiri.

random_forest = RandomForestClassifier(n_estimators=100)
random_forest.fit(X_train, Y_train)

Y_prediction = random_forest.predict(X_test)

random_forest.score(X_train, Y_train)
acc_random_forest = round(random_forest.score(X_train, Y_train)* 100, 2)

results = pd.DataFrame({
    'Model' : ['Random Forest'],
    'Score' : [acc_random_forest]
})
results

hasil dari kode diatas adalah

Random Forest	90.68

K-Fold Cross Validation

Bagaimana kinerja Random Forest saat digunakan validasi silang. K-Fold Cross Validation secara acak membagi data pelatihan menjadi subset K yang disebut folds. Bayangkan data akan dibagi menjadi 10 folds (K = 10). Model Random Forest yang akan dilatih dan dievaluasi 10 kali, menggunakan folds yang berbeda untuk evaluasi setiap saat, sementara itu akan dilatih pada 9 folds lainnya. Oleh karena itu output array dengan 10 skor yang berbeda.

random_forest = RandomForestClassifier(n_estimators=100)
scores = cross_val_score(random_forest, X_train, Y_train, cv=10, scoring = "accuracy")
print("Scores:", scores)
print("Mean:", scores.mean())
print("Standard Deviation:", scores.std())

hasil dari kode program tersebut adalah

Scores: [0.74444444 0.80898876 0.73033708 0.84269663 0.88764045 0.85393258
 0.83146067 0.78651685 0.85393258 0.79775281]
Mean: 0.8137702871410737
Standard Deviation: 0.04756243170100532

Ini terlihat jauh lebih realistis dari sebelumnya. Model memiliki akurasi rata-rata 81% dengan standar deviasi 4,7%. Deviasi standar menunjukkan seberapa tepat estimasi tersebut. Ini berarti hasil pembelajaran keakuratan model dapat berbeda + — 4,7%. Karena akurasinya cukup bagus dan Random Forest adalah model yang mudah digunakan. Untuk meningkatkan kinerjanya lebih jauh lagi sebagai berikut

Hyperparameter Tuning

Untuk meningkatkan kinerjanya dapat dilakukan hyperparameter tunning. Sekarang telah dimiliki model yang tepat, proses mengevaluasi kinerjanya dapat mulai dengan cara yang lebih akurat. Sebelumnya hanyadiggunakan akurasi dan skor oob, yang merupakan bentuk lain dari akurasi.

random_forest = RandomForestClassifier(criterion='gini',
                                       min_samples_leaf=1,
                                       min_samples_split=10,
                                       n_estimators=100,
                                       max_features='auto',
                                       oob_score=True, 
                                       random_state = 1,
                                       n_jobs=-1)

random_forest.fit(X_train, Y_train)
Y_prediction = random_forest.predict(X_test)

random_forest.score(X_train, Y_train)

print("obb score:", round(random_forest.oob_score_,4)*100, "%")

keluaran dari kode program diatas adalah

obb score: 83.73 %

Confusion Matrix

Baris pertama adalah tentang prediksi tidak selamat: 487 penumpang diklasifikasikan dengan benar sebagai tidak selamat (disebut true negatives) dan 62 salah diklasifikasikan sebagai tidak selamat (false positives). Baris kedua adalah tentang prediksi selamat: 98 penumpang salah diklasifikasikan selamat (false negatives) dan 2446 benar diklasifikasikan sebagai selamat (true positives).Confusion matrix memberi banyak informasi tentang seberapa baik model yang dihasilkan, tetapi ada cara untuk mendapatkan lebih banyak lagi, seperti menghitung ketepatan pengklasifikasi.

predictions = cross_val_predict(random_forest, X_train, Y_train, cv=3)
confusion_matrix(Y_train, predictions)

keluaran kode program diatas

array([[487,  62],
       [ 98, 244]])

Precision and Recall

Model telah memprediksi 79% kelangsungan hidup penumpang dengan benar (presisi). Penarikan itu memberi tahu bahwa imeramalkan kelangsungan hidup 71% orang yang benar-benar selamat.

print("Precision:", precision_score(Y_train, predictions))
print("Recall:", recall_score(Y_train, predictions))

keluaran dari kode program diatas

Precision: 0.7973856209150327
Recall: 0.7134502923976608

F-Score

Precision and Recall dapat digabungkan menjadi satu nilai, yang disebut F-Score. F-Score dihitung dengan rata-rata harmonik Precision and Recall. Perhatikan bahwa ini memberikan lebih banyak bobot pada nilai rendah. Akibatnya, pengklasifikasi hanya akan mendapatkan F-Score tinggi, jika Precision and Recall tinggi.

f1_score(Y_train, predictions)

keluaran dari kode program diatas adalah

0.7530864197530864

F-score menunjukkan angka 75%. Skornya tidak terlalu tinggi, karena kami memiliki recall sebesar 71%. Sayangnya, F-score tidak sempurna, karena mendukung pengklasifikasi yang memiliki precision and recall yang serupa. Ini adalah masalah, karena terkadang diinginkan precision dan recall yang tinggi. Masalahnya adalah precision yang meningkat, terkadang menghasilkan perolehan yang menurun pada recall dan sebaliknya (depending on the threshold). Ini disebut tradeoff precision/penarikan.

Kesimpulan

Data kapal Titanic telah dilatih menggunakan model random forest, mengambil dan menerapkan cross validation pada model tersebut. Kemudian dibahas cara kerja random forest dan menyesuaikan kinerjanya dengan mengoptimalkan nilai hyperparameternya. Terakhir, ditunjukkan confusion matrix dan menghitung precision, recall and f-score.

Rajo Intan

Blogger, pemiliki Onestring Lab, menulis artikel terkait teknologi informasi dan pendidikan. Web Developer, berpengalaman lebih dari 20 tahun mengembangkan berbagai aplikasi dan sistem informasi. Kerjasama kontak di onestringlab@gmail.com atau https://forms.gle/xAGKkpi6B3BzJyzk7

View all posts by Rajo Intan →

Leave a Reply

Your email address will not be published. Required fields are marked *

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

Powered By
100% Free SEO Tools - Tool Kits PRO