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 또한 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)
산출
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. 이 분류기를 구축하는 동안이 모듈이 사용하는 주요 매개 변수는 '손실'입니다. 여기서 '손실'은 최적화 할 손실 함수의 값입니다. loss = deviance를 선택하면 확률 적 출력으로 분류하기위한 이탈도를 나타냅니다.
반면에이 매개 변수의 값을 지수로 선택하면 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. 매개 변수 이름 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