앙상블 방법: 그래디언트 부스팅

3299 단어

앙상블



Webster에 따르면 앙상블이라는 단어는 "단일 효과를 생성하는 그룹"을 의미하며 머신 러닝에 사용되는 앙상블 방법에서 정확히 볼 수 있는 것입니다. 이러한 방법을 통해 우리는 단일 학습 알고리즘만으로 할 수 있는 것보다 더 나은 성능을 얻기 위해 여러 학습 알고리즘의 사용을 결합하고 있습니다. 약한 학습자를 결합하는 세 가지 주요 "메타 알고리즘"은 Bagging, Boosting 및 Stacking입니다. Random Forest에 대한 이전 블로그를 읽었다면 Bagging 방법 중 하나에 이미 익숙할 것입니다. 하지만 오늘은 아마도 Boosting 알고리즘이라고 추측할 수 있는 Gradient Boosting에 초점을 맞출 것입니다.

약한 학습자



부스팅은 약한 학습자를 결합하는 방법이므로 그것이 무엇인지 살펴봐야 할 것입니다. 약한 학습자는 예측이 임의 확률보다 약간 더 나은 간단한 모델입니다. 일반적인 약한 학습자는 작은 결정 트리 또는 결정 스텀프(단일 수준 결정 트리)가 될 것입니다. 앞서 말했듯이 예측률이 50%를 약간 넘는 모든 모델이 포함될 것입니다.

부스팅



부스팅 알고리즘은 단일 약한 학습기로 시작하여 다음을 수행합니다.

1) 약한 학습자를 훈련
2) 약한 학습자가 무엇을 잘못했는지 확인
3) 첫 번째 학습자가 잘못한 영역을 개선하기 위해 또 다른 약한 학습자를 구축합니다.
4) 모델이 미리 결정된 중지 지점에 도달하거나 모델 성능이 안정될 때까지 2단계와 3단계를 계속합니다.

그라디언트 부스팅



이제 부스팅 작동 방식에 대한 레이아웃이 있으므로 그라디언트 데센트를 추가하여 그래디언트 부스팅 작동 방식을 이해하는 것은 간단합니다. 모델이 약한 학습자가 어떤 예측을 잘못했는지 확인하는 2단계에서 그래디언트 부스팅 모델은 예측이 얼마나 멀리 떨어져 있는지 확인하기 위해 각 데이터 포인트에 대한 잔차를 계산합니다. 그런 다음 모델은 이러한 잔차를 손실 함수와 결합하여 손실의 기울기를 계산할 수 있습니다. 여기에서 모델은 3단계로 이동하고 이러한 그래디언트 및 손실 메트릭을 사용하여 다음 모델을 개선할 수 있습니다.

예시



이 예에서는 쉽게 액세스할 수 있도록 Sklearn을 통해 와인 데이터 세트를 사용할 것이므로 가져오기를 시작하겠습니다.

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_wine
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import GradientBoostingClassifier

그런 다음 데이터를 로드합니다.

wine = load_wine()
data = pd.DataFrame(data= np.c_[wine['data'], wine['target']],
                     columns= wine['feature_names'] + ['target'])
data.describe()

여기에서 모든 열의 크기가 동일하다는 것을 알 수 있습니다. 와인에 대해 알고 있는 경우 각 열의 특성을 설명하는 모든 종류의 메트릭이 있음을 알 수 있습니다.


여기서 우리는 분할을 시작하고 그래디언트 부스팅 모델이 결정 스텀프 모델에 대해 어떻게 작동하는지 확인할 준비를 할 것입니다.

X=data.drop('target',axis=1)
y=data['target']
Xtrain, Xtest, ytrain, ytest = train_test_split(X,y)

따라서 먼저 우리의 예측에 대한 근거를 얻기 위해 그루터기를 시험해 봅시다.

DT = DecisionTreeClassifier(max_depth=1,criterion='gini')

DT.fit(Xtrain,ytrain)
DT.predict(Xtest)
print("Mean Accuracy:",DT.score(Xtest,ytest))

내 커널에서 평균 정확도 점수는 .71로 깊이가 1인 의사 결정 트리에서는 나쁘지 않습니다. 이제 그래디언트 부스팅 모델입니다.

GB = GradientBoostingClassifier(n_estimators=100,max_depth=1,criterion='friedman_mse')

GB.fit(Xtrain,ytrain)
GB.predict(Xtest)
print("Mean Accuracy:",GB.score(Xtest,ytest))

여기에서 최대 깊이가 1로 설정되었는지 확인하고 모델을 유사하게 유지했으며 커널을 몇 번 다시 시작한 후 .97에서 1 사이의 정확도 점수를 얻었습니다.

결론



위의 예에서 볼 수 있듯이 이러한 모든 약한 모델이 함께 작동하는 기능은 매우 인상적입니다. Gradient Boosting은 여러분의 기계 학습 프로젝트에서 시도해 볼 것을 권장하고 개인적으로 큰 성공을 거둔 멋진 고급 부스팅 알고리즘입니다. 위대한 월터 페이튼의 "우리는 혼자일 때보다 함께할 때 더 강하다"는 말을 기억하십시오.

좋은 웹페이지 즐겨찾기