반응형
파이썬 머신러닝 가이드 책을 참고하였습니다.
(1) 스태킹
개별적인 여러 알고리즘을 서로 결합해 예측 결과를 도출한다는 점에서 배깅 및 부스팅과 공통점을 가지고 있다.
하지만, 스태킹은 개별 알고리즘으로 예측한 데이터를 기반으로 다시 예측을 수행한다는 점에서 차이가 있다.
즉, 개별 알고리즘의 예측 결과 데이터 세트를 최종적인 메타 데이터 세트로 만들어, 별도의 ML 알고리즘으로 최종(마지막) 학습을 수행하고 테스트 데이터를 기반으로 다시 최종 예측을 수행하는 방식입니다.
위 그림과 같이 개별 모델별로 도출된 예측 레이블 값을 다시 합해서 새로운 데이터 세트를 만들고 이렇게 합쳐진 (스태킹)된 데이터 세트에 대해 최종 모델을 적용해 최종 예측을 하는 것입니다.
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 개별 ML 모델을 위한 Classifier 생성.
knn_clf = KNeighborsClassifier(n_neighbors=4)
rf_clf = RandomForestClassifier(n_estimators=100, random_state=0)
dt_clf = DecisionTreeClassifier()
# 최종 Stacking 모델을 위한 Classifier생성.
lr_final = LogisticRegression(C=10)
# 개별 모델들을 학습.
knn_clf.fit(X_train, y_train)
rf_clf.fit(X_train , y_train)
dt_clf.fit(X_train , y_train)
# 학습된 개별 모델들이 각자 반환하는 예측 데이터 셋을 생성.
knn_pred = knn_clf.predict(X_test)
rf_pred = rf_clf.predict(X_test)
dt_pred = dt_clf.predict(X_test)
# 개별 모델의 정확도 측정.
print('KNN 정확도: {0:.4f}'.format(accuracy_score(y_test, knn_pred)))
print('랜덤 포레스트 정확도: {0:.4f}'.format(accuracy_score(y_test, rf_pred)))
print('결정 트리 정확도: {0:.4f}'.format(accuracy_score(y_test, dt_pred)))
○ 개별 모델에서 생성된 예측값 데이터 합쳐서, 최종 메타 모델의 학습 데이터 만들기
pred = np.array([knn_pred, rf_pred, dt_pred])
# transpose를 이용해 행과 열의 위치 교환. 컬럼 레벨로 각 알고리즘의 예측 결과를 피처로 만듦.
pred = np.transpose(pred)
lr_final.fit(pred, y_test)
final = lr_final.predict(pred)
print('최종 메타 모델의 예측 정확도: {0:.4f}'.format(accuracy_score(y_test , final)))
개별 알고리즘으로부터 예측된 예측값을 칼럼 레벨로 옆으로 붙여서 피처 값을 만들어준다.
반환된 예측 데이터 세트는 1차원 형태의 ndarray이므로 먼저 반환된 예측 결과를 행 형태로 붙인 뒤, 넘파이의 transpose()를 이용해 행과 열 위치를 바꾼 ndarray로 변환시킨다.
반응형
'AI > Machine Learning' 카테고리의 다른 글
[Numpy] - expand_dims 차원 추가하기 (0) | 2022.06.16 |
---|---|
[ML] 머신러닝 - 회귀, 다항회귀, MSE, RMSE (0) | 2022.04.16 |
불균형 데이터 처리를 위한 언더 샘플링과 오버 샘플링 (0) | 2022.04.09 |
[ML] 머신러닝 - 부스팅 GBM, XGBoost, LightGBM (0) | 2022.04.09 |
[ML] 머신러닝 - 앙상블 ( 보팅, 배깅 ) (0) | 2022.04.06 |