반응형
앙상블 스태킹(Stacking)
스태킹은 데이터셋이 아니라, 여러 학습기에서 예측한 예측값(Predict value)으로 다시 학습 데이터를 만들어 일반화(generalization)된 최종 모델을 구성하는 방법이다. 예측값들로 예측을 하는 아이디어이다.
scikit-learn
스태킹 방법은 사이킷런의 ensemble 안에 있다.
분류는 StackingClassifier,
회귀는 StackingRegressor이다.
주요 하이퍼파라미터는 estimators > 알고리즘을 쌓는 역할을 한다.
Part1. 분류(Calssification)
#Part1. 분류(Classification)
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import StackingClassifier
estimators = [('rf', RandomForestClassifier(n_estimators=10,random_state=42)),('svr',SVC(random_state=42))]
model=StackingClassifier(estimators=estimators,final_estimator=LogisticRegression())
model.fit(X_scaled_train, y_train)
pred_train = model.predict(X_scaled_train)
model.score(X_scaled_train, y_train)
분류에선 랜덤포레스트, 서포트벡터머신 2가지를 개별 모델로 설정하고 이를 StackingClassifier의 estimators로 설정했다.
마지막 최종 모델로 로지스틱회귀모델을 설정했다.
그 결과 98.6%의 정확도를 얻을 수 있었다.
혼동행렬과 분류예측 데이터
from sklearn.metrics import confusion_matrix
confusion_train = confusion_matrix(y_train, pred_train)
print("훈련데이터 오차행렬:\n", confusion_train)
from sklearn.metrics import classification_report
cfreport_train = classification_report(y_train, pred_train)
print("분류예측 레포트:\n", cfreport_train)
pred_test = model.predict(X_scaled_test)
model.score(X_scaled_test, y_test)
훈련데이터와 테스트데이터의 혼동행렬, 분류예측 데이터를 확인해보았다.
교재에 별 다른 내용은 없었음.. 그냥 정확도 확인했음..
Part2. 회귀(Regression)
#Part2. 회귀(Regression)
from sklearn.linear_model import LinearRegression
from sklearn.neighbors import KNeighborsRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import StackingRegressor
estimators=[('lr',LinearRegression()),('knn',KNeighborsRegressor())]
model=StackingRegressor(estimators=estimators, final_estimator=RandomForestRegressor(n_estimators=10,random_state=42))
model.fit(X_scaled_train, y_train)
pred_train=model.predict(X_scaled_train)
model.score(X_scaled_train,y_train)
스태킹의 회귀에서는 선형회귀분석(LinearRegression), KNN(KNeighborsRegressor) 2개를 개별 모델로 설정,
마지막 최종 모델로 랜덤포레스트로 학습했다.
그 결과 54.3% 정확도를 얻었다.
RMSE 오차
#RMSE(Root Mean Squared Error)
import numpy as np
from sklearn.metrics import mean_squared_error
MSE_train = mean_squared_error(y_train, pred_train)
MSE_test = mean_squared_error(y_test, pred_test)
print(np.sqrt(MSE_train))
print(np.sqrt(MSE_test))
RMSE로 오차 확인해본것도 별 다른 인사이트는 없었다.
스태킹은 일반적으로 좋은 앙상블 모델이다. 다만 이를 구성하는 개별 알고리즘 최적화 및 모델 순서는 스태킹 앙상블에서 중요한 영향을 미친다.
반응형
'자기계발 > Python' 카테고리의 다른 글
[빅데이터분석기사] 25 릿지회귀모델 (0) | 2022.06.24 |
---|---|
[빅데이터분석기사] 24 선형회귀모델 (0) | 2022.06.24 |
[빅데이터분석기사] 22 앙상블 부스팅 (0) | 2022.06.23 |
[빅데이터분석기사] 21 앙상블 배깅 (0) | 2022.06.23 |
[빅데이터분석기사] 20 투표기반 앙상블 (0) | 2022.06.23 |