빅데이터 서비스 교육/머신러닝

앙상블 모델

Manly 2022. 7. 5. 09:13
반응형

앙상블 모델

                앙상블 모델은 여러 모델을 연결하여 쓴다

 

앙상블 - 보팅(Voting)

 

하드보팅

 

 

소프트 보팅

 

배깅(Baggin)

 

결정트리는

하나의 나무

 

랜덤포레스트모델은

각각 다른 나무들

각 트리는 학습 데이터를 다르게 해서 트리들이 서로 다르게 만든다.

특성을 랜던하게 학습해서 트리들이

서로 다르게 만든다.

 

 

보팅과 랜덤포레스트의 다른점 : 랜덤포레스트는 서로다른 결정트리들을 모델로 사용 

                                                   보팅은 여러 모델을 사용

 

 

랜덤으로 뽑은 데이터가 여러개의 모델에 들어가고난 결과를 과반수로 채택한다

 

보팅, 배깅은 병렬 구조로 각 모델이 옆모델의 결과에 영향을 끼치지 않는다.

 

부스팅(Boosting)

하나의 샘플 데이터만 사용

각 모델에서 오차가 나오면 그 기억을 다음 모델에 보내 오차를 점점 줄여간다 -> 성능이 높다

 

 

                                        예측속도 -> predict()  / 학습속도 -> fit()

 

 

 

ex06_타이타닉 생존자 예제를 앙상블 사용해서

ex10_타이타닉 생존자분석 앙상블 사용

앙상블

from sklearn.ensemble import VotingClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier

knn = KNeighborsClassifier()
tree = DecisionTreeClassifier()
forest = RandomForestClassifier()

 

voting_model = VotingClassifier(
    estimators= [
        ('knn1',knn),
        ('tree1',tree),
        ('forest1',forest)
    ],
    voting = 'soft' #default값은 hard
)

 

voting_model.fit(X_train,y_train)

VotingClassifier(estimators=[('knn1', KNeighborsClassifier()),
                             ('tree1', DecisionTreeClassifier()),
                             ('forest1', RandomForestClassifier())],
                 voting='soft')

voting_model.predict(X_test)

array([0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1,
       0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0,
       1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0,
       1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
..............................................................................
       0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0,
       0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1],
      dtype=int64)
forest_model = RandomForestClassifier(n_estimators=1000, #만들 모델의 개수
                                   #데이터를 다르게해서 서로 다른트리로 만든다
                                     max_depth= 5,
                                     min_samples_split=15,
                                     max_features=0.7 #특성을 다르게해서 서로 다른 트리를 만든다.
                                     )

from sklearn.model_selection import GridSearchCV

grid = {
    'n_estimators':[1000,1500,2000,2500],
    'max_depth': [5,10,15],
    'min_samples_split':[15,30],
    'max_features':[0.5,0.7]
}

grid_s = GridSearchCV(forest_model,grid,cv=3) #cv : 교차 검증에서 몇개로 분할되는지 지정한다.

grid_s.fit(X_train,y_train)

 

print('best score : ',grid_s.best_score_)
print('best parmas : ',grid_s.best_params_)

best score :  0.8395061728395062
best parmas :  {'max_depth': 10, 'max_features': 0.7, 'min_samples_split': 15, 'n_estimators': 1000}

final_forest = RandomForestClassifier(n_estimators=1000, #만들 모델의 개수
                                     max_depth= 10,
                                     min_samples_split=15,
                                     max_features=0.7
                                     )

final_forest.fit(X_train,y_train)

RandomForestClassifier(max_depth=10, max_features=0.7, min_samples_split=15,
                       n_estimators=1000)

final_forest.predict(X_test)

array([0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1,
       1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1,
       1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1,
..........................................................................
       1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1,
       0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0],
      dtype=int64)

boosting package 설치

#!pip install lightgbm     학습시간이 XGBoost보다 짧다, 성능은 큰 차이를 보이지않음
#!pip install XGBoost      
#이 두개가 boosting 모델에서 자주 쓰는것들

from lightgbm import LGBMClassifier

 

# 단점 : 일반적으로 10000건 이하의 데이터 세트를 다루는 경우 과적합 문제 발생이 쉽다
from lightgbm import LGBMClassifier

 

lgbm = LGBMClassifier(n_estimators = 400)    #boosting_type: str='gbdt' : 경사하강법

 

lgbm.fit(X_train,y_train)

 

lgbm.predict(X_test)

array([0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0,
       1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1,
      ...................................................................
       1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1,
       0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1],
      dtype=int64)

 

반응형

'빅데이터 서비스 교육 > 머신러닝' 카테고리의 다른 글

네이버 영화 리뷰데이터(konlpy활용) 실습  (0) 2022.07.07
텍스트 마이닝  (0) 2022.07.06
Linear Model 실습  (0) 2022.07.01
Linear Model  (0) 2022.06.29
예제 타이타닉 생존자 예측분석  (0) 2022.06.24