Meningkatkan Performa Model ML

Peningkatan Kinerja dengan Ensemble

Ensemble dapat meningkatkan hasil machine learning dengan menggabungkan beberapa model. Pada dasarnya, model ensemble terdiri dari beberapa model pembelajaran terawasi yang dilatih secara individual dan hasilnya digabungkan dalam berbagai cara untuk mencapai performa prediksi yang lebih baik dibandingkan dengan model tunggal. Metode ensemble dapat dibagi menjadi dua kelompok berikut -

Metode ensembel berurutan

Sesuai dengan namanya, dalam metode ensemble semacam ini, pembelajar dasar dihasilkan secara berurutan. Motivasi dari metode tersebut adalah untuk memanfaatkan ketergantungan di antara pelajar dasar.

Metode ansambel paralel

Sesuai dengan namanya, dalam metode ensemble semacam ini, pembelajar dasar dihasilkan secara paralel. Motivasi dari metode tersebut adalah untuk memanfaatkan kemandirian di antara para pembelajar dasar.

Metode Pembelajaran Ensemble

Berikut ini adalah metode pembelajaran ensemble paling populer yaitu metode untuk menggabungkan prediksi dari berbagai model -

Mengantongi

Istilah mengantongi juga dikenal sebagai agregasi bootstrap. Dalam metode bagging, model ensemble mencoba untuk meningkatkan akurasi prediksi dan mengurangi varians model dengan menggabungkan prediksi model individual yang dilatihkan melalui sampel pelatihan yang dibuat secara acak. Prediksi akhir dari model ensemble akan diberikan dengan menghitung rata-rata semua prediksi dari masing-masing estimator. Salah satu contoh terbaik metode bagging adalah hutan acak.

Meningkatkan

Dalam metode boosting, prinsip utama membangun model ensemble adalah membangunnya secara bertahap dengan melatih setiap penduga model dasar secara berurutan. Seperti namanya, ini pada dasarnya menggabungkan beberapa pelajar dasar minggu, dilatih secara berurutan melalui beberapa iterasi data pelatihan, untuk membangun ansambel yang kuat. Selama pelatihan pelajar dasar minggu, bobot yang lebih tinggi diberikan kepada pelajar yang kesalahan klasifikasi sebelumnya. Contoh metode boosting adalah AdaBoost.

Pemungutan suara

Dalam model pembelajaran ansambel ini, beberapa model dari jenis yang berbeda dibangun dan beberapa statistik sederhana, seperti menghitung mean atau median, dll., Digunakan untuk menggabungkan prediksi. Prediksi ini akan menjadi masukan tambahan untuk pelatihan membuat prediksi akhir.

Algoritma Ensemble Bagging

Berikut ini adalah tiga algoritma ansambel mengantongi -

Pohon Keputusan yang Dikantongi

Seperti yang kita ketahui bahwa metode ansambel bagging bekerja dengan baik dengan algoritma yang memiliki varians tinggi dan, dalam hal ini, yang terbaik adalah algoritma pohon keputusan. Dalam resep Python berikut, kita akan membangun model ansambel pohon keputusan dengan menggunakan fungsi BaggingClassifier dari sklearn dengan DecisionTreeClasifier (algoritma klasifikasi & pohon regresi) pada dataset diabetes Pima Indians.

Pertama, impor paket yang diperlukan sebagai berikut -

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier

Sekarang, kita perlu memuat dataset diabetes Pima seperti yang kita lakukan pada contoh sebelumnya -

path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]

Selanjutnya, berikan input untuk validasi silang 10 kali lipat sebagai berikut -

seed = 7
kfold = KFold(n_splits=10, random_state=seed)
cart = DecisionTreeClassifier()

Kami perlu menyediakan jumlah pohon yang akan kami bangun. Di sini kami membangun 150 pohon -

num_trees = 150

Selanjutnya, buat model dengan bantuan skrip berikut -

model = BaggingClassifier(base_estimator=cart, n_estimators=num_trees, random_state=seed)

Hitung dan cetak hasilnya sebagai berikut -

results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

Keluaran

0.7733766233766234

Keluaran di atas menunjukkan bahwa kami mendapatkan sekitar 77% akurasi model pengklasifikasi pohon keputusan yang dikantongi kami.

Random Forest

Ini adalah perpanjangan dari pohon keputusan yang dikantongi. Untuk pengklasifikasi individu, sampel set data pelatihan diambil dengan penggantian, tetapi pohon dibuat sedemikian rupa sehingga mengurangi korelasi di antara mereka. Selain itu, subset fitur acak dianggap memilih setiap titik pisah daripada memilih dengan rakus titik pisah terbaik dalam konstruksi setiap pohon.

Dalam resep Python berikut, kita akan membuat model ansambel hutan acak yang dikantongi dengan menggunakan class RandomForestClassifier dari sklearn pada dataset diabetes Pima Indians.

Pertama, impor paket yang diperlukan sebagai berikut -

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier

Sekarang, kita perlu memuat dataset diabetes Pima seperti yang dilakukan pada contoh sebelumnya -

path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]

Selanjutnya, berikan input untuk validasi silang 10 kali lipat sebagai berikut -

seed = 7
kfold = KFold(n_splits=10, random_state=seed)

Kami perlu menyediakan jumlah pohon yang akan kami bangun. Di sini kami membangun 150 pohon dengan titik-titik terpisah yang dipilih dari 5 fitur -

num_trees = 150
max_features = 5

Selanjutnya, buat model dengan bantuan skrip berikut -

model = RandomForestClassifier(n_estimators=num_trees, max_features=max_features)

Hitung dan cetak hasilnya sebagai berikut -

results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

Keluaran

0.7629357484620642

Output di atas menunjukkan bahwa kami mendapatkan akurasi sekitar 76% dari model pengklasifikasi hutan acak yang dikantongi.

Pohon Ekstra

Ini adalah perpanjangan lain dari metode ansambel pohon keputusan yang dikantongi. Dalam metode ini, pohon acak dibangun dari sampel set data pelatihan.

Dalam resep Python berikut, kita akan membuat model ansambel pohon ekstra dengan menggunakan kelas sklearn ExtraTreesClassifier pada dataset diabetes Pima Indians.

Pertama, impor paket yang diperlukan sebagai berikut -

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import ExtraTreesClassifier

Sekarang, kita perlu memuat dataset diabetes Pima seperti yang dilakukan pada contoh sebelumnya -

path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]

Selanjutnya, berikan input untuk validasi silang 10 kali lipat sebagai berikut -

seed = 7
kfold = KFold(n_splits=10, random_state=seed)

Kami perlu menyediakan jumlah pohon yang akan kami bangun. Di sini kami membangun 150 pohon dengan titik-titik terpisah yang dipilih dari 5 fitur -

num_trees = 150
max_features = 5

Selanjutnya, buat model dengan bantuan skrip berikut -

model = ExtraTreesClassifier(n_estimators=num_trees, max_features=max_features)

Hitung dan cetak hasilnya sebagai berikut -

results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

Keluaran

0.7551435406698566

Output di atas menunjukkan bahwa kami mendapatkan sekitar 75,5% akurasi model pengklasifikasi pohon ekstra yang dikantongi kami.

Meningkatkan Algoritma Ensemble

Berikut ini adalah dua algoritma ensemble penguat yang paling umum -

AdaBoost

Ini adalah salah satu algoritma ensemble penguat yang paling sukses. Kunci utama dari algoritme ini adalah caranya memberikan bobot pada instance dalam kumpulan data. Karena itu, algoritme perlu kurang memperhatikan instance saat membangun model selanjutnya.

Dalam resep Python berikut, kita akan membangun model ensemble Ada Boost untuk klasifikasi dengan menggunakan class AdaBoostClassifier dari sklearn pada dataset diabetes Pima Indians.

Pertama, impor paket yang diperlukan sebagai berikut -

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import AdaBoostClassifier

Sekarang, kita perlu memuat dataset diabetes Pima seperti yang dilakukan pada contoh sebelumnya -

path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]

Selanjutnya, berikan input untuk validasi silang 10 kali lipat sebagai berikut -

seed = 5
kfold = KFold(n_splits=10, random_state=seed)

Kami perlu menyediakan jumlah pohon yang akan kami bangun. Di sini kami membangun 150 pohon dengan titik-titik terpisah yang dipilih dari 5 fitur -

num_trees = 50

Selanjutnya, buat model dengan bantuan skrip berikut -

model = AdaBoostClassifier(n_estimators=num_trees, random_state=seed)

Hitung dan cetak hasilnya sebagai berikut -

results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

Keluaran

0.7539473684210527

Output di atas menunjukkan bahwa kita mendapatkan sekitar 75% akurasi model ensemble pengklasifikasi AdaBoost kita.

Peningkatan Gradien Stochastic

Ini juga disebut Mesin Penguat Gradien. Dalam resep Python berikut ini, kita akan membuat model pemasangan Stochastic Gradient Boostingensemble untuk klasifikasi dengan menggunakan class GradientBoostingClassifier dari sklearn pada dataset diabetes Pima Indians.

Pertama, impor paket yang diperlukan sebagai berikut -

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import GradientBoostingClassifier

Sekarang, kita perlu memuat dataset diabetes Pima seperti yang dilakukan pada contoh sebelumnya -

path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]

Selanjutnya, berikan input untuk validasi silang 10 kali lipat sebagai berikut -

seed = 5
kfold = KFold(n_splits=10, random_state=seed)

Kami perlu menyediakan jumlah pohon yang akan kami bangun. Di sini kami membangun 150 pohon dengan titik-titik terpisah yang dipilih dari 5 fitur -

num_trees = 50

Selanjutnya, buat model dengan bantuan skrip berikut -

model = GradientBoostingClassifier(n_estimators=num_trees, random_state=seed)

Hitung dan cetak hasilnya sebagai berikut -

results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

Keluaran

0.7746582365003418

Output di atas menunjukkan bahwa kami mendapatkan sekitar 77,5% akurasi model ensemble pengklasifikasi Gradient Boosting kami.

Voting Ensemble Algorithms

Seperti yang telah dibahas, pemungutan suara terlebih dahulu membuat dua atau lebih model mandiri dari set data pelatihan, kemudian pengklasifikasi pemungutan suara akan menggabungkan model tersebut bersama dengan mengambil rata-rata prediksi sub-model setiap kali data baru dibutuhkan.

Dalam resep Python berikut, kita akan membuat model ansambel Voting untuk klasifikasi dengan menggunakan class VotingClassifier dari sklearn pada dataset diabetes Pima Indians. Kami menggabungkan prediksi regresi logistik, pengklasifikasi Pohon Keputusan, dan SVM bersama-sama untuk masalah klasifikasi sebagai berikut -

Pertama, impor paket yang diperlukan sebagai berikut -

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.ensemble import VotingClassifier

Sekarang, kita perlu memuat dataset diabetes Pima seperti yang dilakukan pada contoh sebelumnya -

path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]

Selanjutnya, berikan input untuk validasi silang 10 kali lipat sebagai berikut -

kfold = KFold(n_splits=10, random_state=7)

Selanjutnya, kita perlu membuat sub-model sebagai berikut -

estimators = []
model1 = LogisticRegression()
estimators.append(('logistic', model1))
model2 = DecisionTreeClassifier()
estimators.append(('cart', model2))
model3 = SVC()
estimators.append(('svm', model3))

Sekarang, buat model ansambel pemungutan suara dengan menggabungkan prediksi dari sub model yang dibuat di atas.

ensemble = VotingClassifier(estimators)
results = cross_val_score(ensemble, X, Y, cv=kfold)
print(results.mean())

Keluaran

0.7382262474367738

Output di atas menunjukkan bahwa kami mendapatkan sekitar 74% akurasi model ansambel pengklasifikasi pemungutan suara kami.