7-5. 부스팅(Boosting) - 그레이디언트 부스팅(Gradient Boosting)
2021. 5. 12. 17:35ㆍMachine Learning
출처 : docs.paperspace.com/machine-learning/wiki/gradient-boosting
그레이디언트 부스팅(Gradient Boosting)이란 이전 예측기가 만든 잔여 오차(Residual Error)에
새로운 예측기를 학습시키는 기법이다.
X = 2*np.random.randn(100,1)
y = 2 * X ** 2 + X * 4 + 10 + np.random.randn(100, 1)
노이즈가 섞인 2차 다항식을 결정 트리로 추정하는 모델에 그레이디언트 부스팅을 적용해보겠다.
tree_reg1 = DecisionTreeRegressor(max_depth=2)
tree_reg1.fit(X,y)
가장 먼저 기초적인 결정 트리를 훈련시켰다.
y2 = y - tree_reg1.predict(X)[:, None] #2차원 열벡터화 (결정트리는 1차원 행벡터를 반환)
tree_reg2 = DecisionTreeRegressor(max_depth=2)
tree_reg2.fit(X,y2)
첫 번째 결정트리에서 예측한 값과 타깃값(y)의 차이(잔여 오차)를 데이터셋의 타깃값으로 지정하고,
두 번째 결정트리를 훈련시켰다.
y3 = y2 - tree_reg2.predict(X)[:, None]
tree_reg3 = DecisionTreeRegressor(max_depth=2)
tree_reg3.fit(X,y3)
두 번째 결정트리에서 나온 잔여 오차를 타깃값으로 지정해 세 번째 결정트리를 훈련시켰다.
X_new = np.linspace(-8, 8, 1000).reshape(-1, 1)
y_final = tree_reg1.predict(X_new) + tree_reg2.predict(X_new) + tree_reg3.predict(X_new)
테스트셋을 설정하고, 각 결정트리의 예측값을 모두 합한 값이 그레이디언트 부스팅의 최종 예측값이다.
plt.scatter(X,y)
plt.scatter(X_new, y_final, c='purple', s=3)
plt.scatter(X_new, tree_reg1.predict(X_new), c='red', s=1)
plt.scatter(X_new, tree_reg2.predict(X_new), c='orange', s=1)
plt.scatter(X_new, tree_reg3.predict(X_new), c='green', s=1)
plt.xlabel("X")
plt.ylabel("y")
plt.grid(linestyle = "dotted")
plt.legend(['tree_gradient_boost','tree_reg1','tree_reg2', 'tree_reg2'])
plt.show()
그레이디언트 부스트된 결정 트리가 가장 정답에 근사한 그래프를 보이고 있다.
'Machine Learning' 카테고리의 다른 글
8-2. PCA(Principal Component Analysis) (1) | 2021.05.12 |
---|---|
8-1. 차원 축소(Dimensionality Reduction) (0) | 2021.05.12 |
7-4. 부스팅(Boosting) - 에이다부스트(Adaboost) (0) | 2021.05.12 |
7-3. 랜덤 포레스트(Random Forest) (0) | 2021.05.12 |
7-2. oob 평가 / 랜덤 패치, 랜덤 서브스페이스 (0) | 2021.05.12 |