Belajar Machine Learning Dengan Python (Bagian 2)
Belajar Machine Learning Dengan Python (Bagian 2)
Pada artikel Belajar Machine Learning Dengan Python (Bagian 1) , kita telah membahas mengenai langkah 1 sampai 3. Artikel ini adalah lanjutan langkah untuk memulai proyek Machine Learning.
- Visualisasi Data
Dalam melakukan visualisasi data, ada dua jenis plot:
- Plot Univariate
Kita mulai dengan beberapa plot univariat, yaitu plot dari masing-masing variabel individu. Mengingat bahwa variabel inputnya numerik, kita bisa membuat jenis plot box.
# box and whisker plots dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False) plt.show()
Selanjutnya juga bisa membuat histogram masing-masing variabel input untuk mendapatkan ide tentang distribusi.
# histograms dataset.hist() plt.show()
2. Plot Multivariate
Selanjutnya kita bisa melihat interaksi antar variabel. Pertama, kita lihat scatterplots dari semua pasang atribut. Hal ini dapat membantu melihat hubungan terstruktur antara variabel input
# scatter plot matrix scatter_matrix(dataset) plt.show()
Dari hasil output dapat dilihat pengelompokan diagonal beberapa pasang atribut. Hal ini menunjukkan korelasi yang tinggi dan hubungan yang dapat diprediksi.
- Evaluasi Beberapa Algoritma
Langkah berikutnya adalah membuat beberapa model data dan memperkirakan akurasi mereka pada data yang tidak terlihat.
Beberapa hal yang dapat dilakukan di langkah ini adalah:
- Pisahkan dataset validasi
- Set up test harness untuk menggunakan validasi silang 10 kali lipat
- Bangun 5 model yang berbeda untuk memprediksi spesies dari pengukuran bunga
- Pilih model yang terbaik
- Membuat validasi dataset
Validasi ini dilakukan untuk mengetahui bahwa model yang dibuat itu bagus. Kita akan menggunakan metode statistik untuk memperkirakan keakuratan model yang dibuat pada data yang tidak terlihat. Juga diinginkan perkiraan yang lebih konkret mengenai keakuratan model teraik pada data yang tidak terlihat dengan mengevaluasi data aktual yang tidak terlihat.
Artinya, kita akan menahan beberapa data yang tidak dapat dilihat oleh algoritma dan akan menggunakan data ini untuk mendapatkan informasi tentang seberapa akurat model terbaik sebenarnya.
Kita akan membagi datateset yang telah dimuat menjadi dua, 80% diantaranya akan digunakan untuk melatih model dan 20% digunakan untuk data validasi.
# Split-out validation dataset array = dataset.values X = array[:,0:4] Y = array[:,4] validation_size = 0.20 seed = 7 X_train, X_validation, Y_train, Y_validation = model_selection.train_test_split(X, Y, test_size=validation_size, random_state=seed)
Setelah perintah di atas dieksekusi, kita sudah memiliki dua data yaitu X_train dan Y_train untuk mempersiapkan model dan rangkaian X_validation dan Y_validation yang dapat digunakan selanjutnya.
- Test Harness
Kita akan menggunakan validasi silang 10 kali lipat untuk memperkirakan akurasi. Untuk itu dataset dibagi menjadi 10 bagian, 9 untuk latihan dan 1 untuk pengujian dan ulangi untuk semua kombinasi.
# Test options and evaluation metric seed = 7 scoring = 'accuracy'
Perintah di atas menggunakan metrik “accuracy” untuk mengevaluasi model. Ini adalah rasio dari jumlah kejadia yang diprediksi dengan benar dibagi dengan jumlah total kasus dalam dataset dikalikan dengan 100 untuk memberikan persentase (misalnya 95% akurat). Kita akan menggunakan variabel penilaian saat menjalankan build dan mengevaluasi setiap model di langkah selanjutnya
- Membangun Model
Kita tidak tahu algoritma mana yang bagus dalam masalah ini atau konfigurasi apa yang akan digunakan. Untuk itu kita evaluasi 6 algoritma yang berbeda:
- Logistic Regression (LR)
- Linear Discriminant Analysis (LDA)
- K-Nearest Neighbors (KNN).
- Classification and Regression Trees (CART).
- Gaussian Naive Bayes (NB).
- Support Vector Machines (SVM).
# Spot Check Algorithms models = [] models.append(('LR', LogisticRegression())) models.append(('LDA', LinearDiscriminantAnalysis())) models.append(('KNN', KNeighborsClassifier())) models.append(('CART', DecisionTreeClassifier())) models.append(('NB', GaussianNB())) models.append(('SVM', SVC())) # evaluate each model in turn results = [] names = [] for name, model in models: kfold = model_selection.KFold(n_splits=10, random_state=seed) cv_results = model_selection.cross_val_score(model, X_train, Y_train, cv=kfold, scoring=scoring) results.append(cv_results) names.append(name) msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std()) print(msg)
- Memilih Model Terbaik
Kita sudah memiliki 6 model dan estimasi akurasi untuk masing-masing. Selanjutnya perlu membandingkan model satu dengan lainnya dan pilih yang paling akurat.
Dari eksekusi script di atas, kita mendapatkan hasil mentah sebagai berikut:
LR: 0.966667 (0.040825)
LDA: 0.975000 (0.038188)
KNN: 0.983333 (0.033333)
CART: 0.975000 (0.038188)
NB: 0.975000 (0.053359)
SVM: 0.991667 (0.025000)
Dari hasil output di atas, kita dapat melihat bahwa SVM memiliki nilai akurasi perkiraan terbesar.
Kita juga dapat membuat plot hasil evaluasi model dan membandingkan penyebaran dan akurasi rata-rata masing-masing model.
# Compare Algorithms fig = plt.figure() fig.suptitle('Algorithm Comparison') ax = fig.add_subplot(111) plt.boxplot(results) ax.set_xticklabels(names) plt.show()
- Membuat Prediksi
Setelah mengetahui model yang paling akurat yaitu SVM, selanjutnya kita dapat mencoba melakukan pengujian tentang keakuratan model SVM terhadap data yang ada.
# Make predictions on validation dataset svm = SVC() svm.fit(X_train, Y_train) predictions = svm.predict(X_validation) print(accuracy_score(Y_validation, predictions)) print(confusion_matrix(Y_validation, predictions)) print(classification_report(Y_validation, predictions))
Menghasilkan output :
Confusion matrix memberikan indikasi dari tiga kesalahan yang dibuat.
Akhirnya, laporan klasifikasi (classification report) memberikan rincian setiap kelas (class-species) dengan precision, recall, f1-score dan support yang menunjukkan hasil yang sangat baik.
***
Jika Anda ingin mempelajari machine learning lebih dalam lagi, Anda bisa mengikuti kelas pelatihan machine learning di Inixindo Jogja
Sumber: Article “Your First Machine Learning Project in Python Step-By-Step”, http://machinelearningmastery.com
Mustofa
Manager Edukasi Inixindo Jogja