Scikit Learn - Metody wspomagające
W tym rozdziale poznamy metody boostingu w Sklearn, które umożliwiają zbudowanie modelu zespolonego.
Metody wspomagające budują model zespołowy w sposób przyrostowy. Główną zasadą jest przyrostowe budowanie modelu poprzez sekwencyjne szkolenie każdego podstawowego estymatora modelu. Aby zbudować potężny zespół, metody te w zasadzie łączą kilku tygodniowych uczniów, którzy są sekwencyjnie szkoleni na podstawie wielu iteracji danych szkoleniowych. Moduł sklearn.ensemble ma następujące dwie metody zwiększania.
AdaBoost
Jest to jedna z najbardziej skutecznych metod wzmacniających, której głównym kluczem jest sposób nadawania wag instancjom w zbiorze danych. Dlatego algorytm musi zwracać mniejszą uwagę na instancje podczas konstruowania kolejnych modeli.
Klasyfikacja z AdaBoost
Do tworzenia klasyfikatora AdaBoost służy moduł Scikit-learn sklearn.ensemble.AdaBoostClassifier. Podczas budowania tego klasyfikatora głównym parametrem używanym przez ten moduł jestbase_estimator. Tutaj base_estimator jest wartościąbase estimatorz którego zbudowany jest wzmocniony zespół. Jeśli wybierzemy wartość tego parametru na none, estymator bazowy będzieDecisionTreeClassifier(max_depth=1).
Przykład realizacji
W poniższym przykładzie tworzymy klasyfikator AdaBoost przy użyciu sklearn.ensemble.AdaBoostClassifier a także przewidywanie i sprawdzanie wyniku.
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)
Wynik
AdaBoostClassifier(algorithm = 'SAMME.R', base_estimator = None,
learning_rate = 1.0, n_estimators = 100, random_state = 0)
Przykład
Po dopasowaniu możemy przewidzieć nowe wartości w następujący sposób -
print(ADBclf.predict([[0, 2, 3, 0, 1, 1, 1, 1, 2, 2]]))
Wynik
[1]
Przykład
Teraz możemy sprawdzić wynik w następujący sposób -
ADBclf.score(X, y)
Wynik
0.995
Przykład
Możemy również użyć zestawu danych sklearn do zbudowania klasyfikatora przy użyciu metody Extra-Tree. Na przykład w przykładzie podanym poniżej używamy zbioru danych 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())
Wynik
0.7851435406698566
Regresja z AdaBoost
Do tworzenia regresora metodą Ada Boost służy biblioteka Scikit-learn sklearn.ensemble.AdaBoostRegressor. Podczas budowania regresora użyje tych samych parametrów, które są używane przezsklearn.ensemble.AdaBoostClassifier.
Przykład realizacji
W poniższym przykładzie tworzymy regresor AdaBoost przy użyciu sklearn.ensemble.AdaBoostregressor a także przewidywanie nowych wartości za pomocą metody predykcji ().
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)
Wynik
AdaBoostRegressor(base_estimator = None, learning_rate = 1.0, loss = 'linear',
n_estimators = 100, random_state = 0)
Przykład
Po dopasowaniu możemy przewidzieć na podstawie modelu regresji w następujący sposób -
print(ADBregr.predict([[0, 2, 3, 0, 1, 1, 1, 1, 2, 2]]))
Wynik
[85.50955817]
Wzmocnienie drzewa gradientowego
Nazywa się to również Gradient Boosted Regression Trees(GRBT). Jest to w zasadzie uogólnienie wzmacniania do dowolnych różniczkowalnych funkcji straty. Tworzy model predykcyjny w postaci zestawu modeli prognozowania tygodniowego. Może być używany do problemów regresji i klasyfikacji. Ich główna zaleta polega na tym, że w naturalny sposób obsługują dane typu mieszanego.
Klasyfikacja z Gradient Tree Boost
Do tworzenia klasyfikatora Gradient Tree Boost służy moduł Scikit-learning sklearn.ensemble.GradientBoostingClassifier. Podczas budowania tego klasyfikatora głównym parametrem używanym przez ten moduł jest „strata”. Tutaj „strata” jest wartością funkcji straty, która ma być zoptymalizowana. Jeśli wybierzemy strata = odchylenie, odnosi się to do odchylenia do klasyfikacji z wynikami probabilistycznymi.
Z drugiej strony, jeśli ustawimy wartość tego parametru na wykładniczą, wówczas odzyskuje on algorytm AdaBoost. Parametrn_estimatorsbędzie kontrolować liczbę uczniów w tygodniu. Hyper-parametr o nazwielearning_rate (w zakresie (0,0, 1,0]) będzie kontrolować nadmierne dopasowanie poprzez skurcz.
Przykład realizacji
W poniższym przykładzie tworzymy klasyfikator Gradient Boosting przy użyciu sklearn.ensemble.GradientBoostingClassifier. Dopasowujemy ten klasyfikator do 50-tygodniowych uczniów.
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)
Wynik
0.8724285714285714
Przykład
Możemy również użyć zestawu danych sklearn do zbudowania klasyfikatora przy użyciu klasyfikatora zwiększającego gradient. Jak w poniższym przykładzie używamy zestawu danych 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())
Wynik
0.7946582356674234
Regresja z Gradient Tree Boost
Do tworzenia regresora metodą Gradient Tree Boost służy biblioteka Scikit-Learn sklearn.ensemble.GradientBoostingRegressor. Może określić funkcję utraty dla regresji poprzez nazwę parametru utraty. Domyślna wartość straty to „ls”.
Przykład realizacji
W poniższym przykładzie tworzymy regresor zwiększania gradientu przy użyciu sklearn.ensemble.GradientBoostingregressor a także znalezienie błędu średniokwadratowego za pomocą metody 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)
Po dopasowaniu możemy znaleźć średni kwadratowy błąd w następujący sposób -
mean_squared_error(y_test, GDBreg.predict(X_test))
Wynik
5.391246106657164