자기계발/Python

[빅데이터분석기사] 23 앙상블 스태킹

호등 2022. 6. 24. 09:10
반응형

앙상블 스태킹(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로 오차 확인해본것도 별 다른 인사이트는 없었다.

 

스태킹은 일반적으로 좋은 앙상블 모델이다. 다만 이를 구성하는 개별 알고리즘 최적화 및 모델 순서는 스태킹 앙상블에서 중요한 영향을 미친다.

반응형