Scikit Learn - Metode Peningkatan

Dalam bab ini, kita akan belajar tentang metode peningkatan di Sklearn, yang memungkinkan pembuatan model ansambel.

Metode peningkatan membangun model ansambel dengan cara bertahap. Prinsip utamanya adalah membangun model secara bertahap dengan melatih setiap penduga model dasar secara berurutan. Untuk membangun ansambel yang kuat, metode ini pada dasarnya menggabungkan beberapa minggu pelajar yang dilatih secara berurutan melalui beberapa iterasi data pelatihan. Modul sklearn.ensemble mengikuti dua metode peningkatan berikut.

AdaBoost

Ini adalah salah satu metode ensembel penguat yang paling sukses yang kunci utamanya adalah cara mereka memberikan bobot pada instance dalam kumpulan data. Itulah mengapa algoritme perlu kurang memperhatikan instance saat membuat model selanjutnya.

Klasifikasi dengan AdaBoost

Untuk membuat pengklasifikasi AdaBoost, modul Scikit-learn menyediakan sklearn.ensemble.AdaBoostClassifier. Saat membuat pengklasifikasi ini, parameter utama yang digunakan modul ini adalahbase_estimator. Di sini, base_estimator adalah nilai daribase estimatordari mana ansambel yang ditingkatkan dibuat. Jika kita memilih nilai parameter ini menjadi none, maka penduga dasarnya adalahDecisionTreeClassifier(max_depth=1).

Contoh implementasi

Dalam contoh berikut, kami membuat pengklasifikasi AdaBoost dengan menggunakan sklearn.ensemble.AdaBoostClassifier dan juga memprediksi dan memeriksa skornya.

from sklearn.ensemble import AdaBoostClassifier
from sklearn.datasets import make_classification
X, y = make_classification(n_samples = 1000, n_features = 10,n_informative = 2, n_redundant = 0,random_state = 0, shuffle = False)
ADBclf = AdaBoostClassifier(n_estimators = 100, random_state = 0)
ADBclf.fit(X, y)

Keluaran

AdaBoostClassifier(algorithm = 'SAMME.R', base_estimator = None,
learning_rate = 1.0, n_estimators = 100, random_state = 0)

Contoh

Setelah dipasang, kita dapat memprediksi nilai baru sebagai berikut -

print(ADBclf.predict([[0, 2, 3, 0, 1, 1, 1, 1, 2, 2]]))

Keluaran

[1]

Contoh

Sekarang kita dapat memeriksa skornya sebagai berikut -

ADBclf.score(X, y)

Keluaran

0.995

Contoh

Kita juga bisa menggunakan dataset sklearn untuk membangun pengklasifikasi menggunakan metode Extra-Tree. Misalnya, dalam contoh yang diberikan di bawah ini, kami menggunakan dataset Pima-Indian.

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import AdaBoostClassifier
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]
seed = 5
kfold = KFold(n_splits = 10, random_state = seed)
num_trees = 100
max_features = 5
ADBclf = AdaBoostClassifier(n_estimators = num_trees, max_features = max_features)
results = cross_val_score(ADBclf, X, Y, cv = kfold)
print(results.mean())

Keluaran

0.7851435406698566

Regresi dengan AdaBoost

Untuk membuat regressor dengan metode Ada Boost, perpustakaan Scikit-learn menyediakan sklearn.ensemble.AdaBoostRegressor. Saat membangun regressor, ia akan menggunakan parameter yang sama seperti yang digunakan olehsklearn.ensemble.AdaBoostClassifier.

Contoh implementasi

Dalam contoh berikut, kami sedang membangun regressor AdaBoost dengan menggunakan sklearn.ensemble.AdaBoostregressor dan juga memprediksi nilai baru dengan menggunakan metode predict ().

from sklearn.ensemble import AdaBoostRegressor
from sklearn.datasets import make_regression
X, y = make_regression(n_features = 10, n_informative = 2,random_state = 0, shuffle = False)
ADBregr = RandomForestRegressor(random_state = 0,n_estimators = 100)
ADBregr.fit(X, y)

Keluaran

AdaBoostRegressor(base_estimator = None, learning_rate = 1.0, loss = 'linear',
n_estimators = 100, random_state = 0)

Contoh

Setelah dipasang kita dapat memprediksi dari model regresi sebagai berikut -

print(ADBregr.predict([[0, 2, 3, 0, 1, 1, 1, 1, 2, 2]]))

Keluaran

[85.50955817]

Peningkatan Gradien Tree

Itu juga disebut Gradient Boosted Regression Trees(GRBT). Ini pada dasarnya adalah generalisasi untuk meningkatkan fungsi kerugian yang dapat dibedakan secara arbitrer. Ini menghasilkan model prediksi berupa ansambel model prediksi mingguan. Ini dapat digunakan untuk masalah regresi dan klasifikasi. Keuntungan utama mereka terletak pada kenyataan bahwa mereka secara alami menangani tipe data campuran.

Klasifikasi dengan Gradient Tree Boost

Untuk membuat pengklasifikasi Gradient Tree Boost, modul Scikit-learn menyediakan sklearn.ensemble.GradientBoostingClassifier. Saat membuat pengklasifikasi ini, parameter utama yang digunakan modul ini adalah 'loss'. Di sini, 'kerugian' adalah nilai fungsi kerugian yang akan dioptimalkan. Jika kita memilih kerugian = penyimpangan, ini mengacu pada penyimpangan untuk klasifikasi dengan keluaran probabilistik.

Sebaliknya, jika kita memilih nilai parameter ini menjadi eksponensial maka algoritma AdaBoost akan pulih. Parameternyan_estimatorsakan mengontrol jumlah pelajar dalam seminggu. Sebuah hyper-parameter bernamalearning_rate (dalam kisaran (0,0, 1,0]) akan mengontrol overfitting melalui penyusutan.

Contoh implementasi

Dalam contoh berikut, kami sedang membangun pengklasifikasi Gradient Boosting dengan menggunakan sklearn.ensemble.GradientBoostingClassifier. Kami menyesuaikan pengklasifikasi ini dengan pelajar 50 minggu.

from sklearn.datasets import make_hastie_10_2
from sklearn.ensemble import GradientBoostingClassifier
X, y = make_hastie_10_2(random_state = 0)
X_train, X_test = X[:5000], X[5000:]
y_train, y_test = y[:5000], y[5000:]

GDBclf = GradientBoostingClassifier(n_estimators = 50, learning_rate = 1.0,max_depth = 1, random_state = 0).fit(X_train, y_train)
GDBclf.score(X_test, y_test)

Keluaran

0.8724285714285714

Contoh

Kita juga bisa menggunakan dataset sklearn untuk membangun pengklasifikasi menggunakan Gradient Boosting Classifier. Seperti pada contoh berikut kami menggunakan dataset Pima-Indian.

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import GradientBoostingClassifier
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]
seed = 5
kfold = KFold(n_splits = 10, random_state = seed)
num_trees = 100
max_features = 5
ADBclf = GradientBoostingClassifier(n_estimators = num_trees, max_features = max_features)
results = cross_val_score(ADBclf, X, Y, cv = kfold)
print(results.mean())

Keluaran

0.7946582356674234

Regresi dengan Gradient Tree Boost

Untuk membuat regressor dengan metode Gradient Tree Boost, perpustakaan Scikit-learn menyediakannya sklearn.ensemble.GradientBoostingRegressor. Itu dapat menentukan fungsi kerugian untuk regresi melalui kehilangan nama parameter. Nilai default untuk kerugian adalah 'ls'.

Contoh implementasi

Dalam contoh berikut, kami sedang membangun regressor Penguat Gradien dengan menggunakan sklearn.ensemble.GradientBoostingregressor dan juga menemukan kesalahan kuadrat rata-rata dengan menggunakan metode mean_squared_error ().

import numpy as np
from sklearn.metrics import mean_squared_error
from sklearn.datasets import make_friedman1
from sklearn.ensemble import GradientBoostingRegressor
X, y = make_friedman1(n_samples = 2000, random_state = 0, noise = 1.0)
X_train, X_test = X[:1000], X[1000:]
y_train, y_test = y[:1000], y[1000:]
GDBreg = GradientBoostingRegressor(n_estimators = 80, learning_rate=0.1,
max_depth = 1, random_state = 0, loss = 'ls').fit(X_train, y_train)

Setelah dipasang, kita dapat menemukan kesalahan kuadrat rata-rata sebagai berikut -

mean_squared_error(y_test, GDBreg.predict(X_test))

Keluaran

5.391246106657164