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:

  1. 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()

Belajar Machine Learning Dengan Python (Bagian 2) 2

Selanjutnya juga bisa membuat histogram masing-masing variabel input untuk mendapatkan ide tentang distribusi.

# histograms

dataset.hist()

plt.show()

Belajar Machine Learning Dengan Python (Bagian 2) 3

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.

Belajar Machine Learning Dengan Python (Bagian 2) 4

  1. 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:

  1. Pisahkan dataset validasi
  2. Set up test harness untuk menggunakan validasi silang 10 kali lipat
  3. Bangun 5 model yang berbeda untuk memprediksi spesies dari pengukuran bunga
  4. 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()


Belajar Machine Learning Dengan Python (Bagian 2) 5

  • 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 :

Belajar Machine Learning Dengan Python (Bagian 2) 6

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