Scikit Learn - методы повышения
В этой главе мы узнаем о методах повышения в Sklearn, которые позволяют построить ансамблевую модель.
Методы повышения строят ансамблевую модель поэтапно. Основной принцип состоит в том, чтобы строить модель постепенно, последовательно обучая каждый оценщик базовой модели. Чтобы создать мощный ансамбль, эти методы в основном объединяют нескольких недельных учеников, которые последовательно обучаются на нескольких итерациях обучающих данных. В модуле sklearn.ensemble есть два метода повышения.
AdaBoost
Это один из наиболее успешных методов ансамбля повышения, главный ключ которого заключается в том, как они присваивают веса экземплярам в наборе данных. Вот почему алгоритм должен уделять меньше внимания экземплярам при построении последующих моделей.
Классификация с AdaBoost
Для создания классификатора AdaBoost модуль Scikit-learn предоставляет sklearn.ensemble.AdaBoostClassifier. При построении этого классификатора основным параметром, используемым этим модулем, являетсяbase_estimator. Здесь base_estimator - это значениеbase estimatorиз которых строится усиленный ансамбль. Если мы выберем для этого параметра значение «Нет», то базовая оценка будетDecisionTreeClassifier(max_depth=1).
Пример реализации
В следующем примере мы создаем классификатор AdaBoost, используя sklearn.ensemble.AdaBoostClassifier а также прогнозирование и проверка результатов.
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)
Вывод
AdaBoostClassifier(algorithm = 'SAMME.R', base_estimator = None,
learning_rate = 1.0, n_estimators = 100, random_state = 0)
пример
После установки мы можем предсказать новые значения следующим образом:
print(ADBclf.predict([[0, 2, 3, 0, 1, 1, 1, 1, 2, 2]]))
Вывод
[1]
пример
Теперь мы можем проверить счет следующим образом -
ADBclf.score(X, y)
Вывод
0.995
пример
Мы также можем использовать набор данных sklearn для создания классификатора с использованием метода Extra-Tree. Например, в примере, приведенном ниже, мы используем набор данных 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())
Вывод
0.7851435406698566
Регресс с AdaBoost
Для создания регрессора с помощью метода Ada Boost библиотека Scikit-learn предоставляет sklearn.ensemble.AdaBoostRegressor. При построении регрессора он будет использовать те же параметры, что иsklearn.ensemble.AdaBoostClassifier.
Пример реализации
В следующем примере мы создаем регрессор AdaBoost, используя sklearn.ensemble.AdaBoostregressor а также прогнозирование новых значений с помощью метода predic ().
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)
Вывод
AdaBoostRegressor(base_estimator = None, learning_rate = 1.0, loss = 'linear',
n_estimators = 100, random_state = 0)
пример
После установки мы можем предсказать из регрессионной модели следующим образом:
print(ADBregr.predict([[0, 2, 3, 0, 1, 1, 1, 1, 2, 2]]))
Вывод
[85.50955817]
Повышение градиента дерева
Его еще называют Gradient Boosted Regression Trees(GRBT). По сути, это обобщение повышения до произвольных дифференцируемых функций потерь. Он создает модель прогнозирования в виде ансамбля моделей прогнозирования на неделю. Его можно использовать для задач регрессии и классификации. Их главное преимущество заключается в том, что они естественным образом обрабатывают данные смешанного типа.
Классификация с Gradient Tree Boost
Для создания классификатора Gradient Tree Boost модуль Scikit-learn предоставляет sklearn.ensemble.GradientBoostingClassifier. При построении этого классификатора основным параметром, используемым этим модулем, является «убыток». Здесь «потеря» - это значение функции потерь, которое необходимо оптимизировать. Если мы выбираем потерю = отклонение, это относится к отклонению для классификации с вероятностными выходами.
С другой стороны, если мы выберем экспоненциальное значение этого параметра, тогда он восстановит алгоритм AdaBoost. Параметрn_estimatorsбудет контролировать количество обучающихся в неделю. Гиперпараметр с именемlearning_rate (в диапазоне (0,0, 1,0]) будет контролировать переоснащение посредством усадки.
Пример реализации
В следующем примере мы создаем классификатор Gradient Boosting, используя sklearn.ensemble.GradientBoostingClassifier. Мы настраиваем этот классификатор на 50-недельных учеников.
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)
Вывод
0.8724285714285714
пример
Мы также можем использовать набор данных sklearn для создания классификатора с помощью Gradient Boosting Classifier. Как и в следующем примере, мы используем набор данных 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())
Вывод
0.7946582356674234
Регрессия с помощью Gradient Tree Boost
Для создания регрессора с помощью метода Gradient Tree Boost библиотека Scikit-learn предоставляет sklearn.ensemble.GradientBoostingRegressor. Он может указать функцию потерь для регрессии через параметр name loss. Значение по умолчанию для потерь - "ls".
Пример реализации
В следующем примере мы создаем регрессор Gradient Boosting, используя sklearn.ensemble.GradientBoostingregressor а также нахождение среднеквадратичной ошибки с помощью метода 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)
После подбора мы можем найти среднеквадратичную ошибку следующим образом:
mean_squared_error(y_test, GDBreg.predict(X_test))
Вывод
5.391246106657164