머신러닝 & AI 첫걸음 시작하기_4 주차

앙상블(Ensenble)

앙상블 알고리즘은 다양함을 컨셉으로 한다.
  • 여러개의 머신러닝 모델을 이용해 최적의 답을 찾아내는 기법
  • 여러 모델을 이용하여 데이터를 학습, 모든 모델의 예측 결과를 평균하여 예측함
  • 여러개의 기본모델(예측모형)을 생성, 각 모델의 예측 결과를 종합하여 하나의 최종 예측 결과를 도출
  • 최종적으로 예측 값들을 모은 후  회귀 목적으로 연속형 변수면 평균, 분류 문제면 다수결로 결과를 도출
 

부트스트랩(BootStrap)

모집단에서 독립적인 데이터 셋을 반복하여 얻지 않고, 원래 데이터 셋에서 관측치를 반복적으로 추출(반복 복원 추출)하여 데이터 셋을 얻는 방법. 이를 통해 데이터의 양을 임의적으로 늘이고, 데이터 셋의 분포가 고르지 않을 때 고르게 만드는 효과를 얻는다
 

배깅(Bagging) → Bootstrap aggregationg(복원추출을 사용한 표본 추출방법을 통합)

원본 데이터에서 중복을 허용하여 무작위로 N개의 데이터를 추출 (샘플을 여러번 뽑음)
부트스트랩을 여러번 한 후, 여러 훈련세트를 생성하고 각각의 훈련세트에 모델을 적용해 그 결과 값의 평균을 도출해 분산을 줄이는 기법 (각 훈련세트는 독립적)
  • 장점 의사 결정나무의 단점인 높은 분산이 줄어 들게 되어 성능이 향상
  • 단점 트리간의 공분산이 발생하여 모델 전체에 공산이 커질 수 있음 (랜덤포레스트의 탄생배경)
from sklearn.ensemble import BaggingRegressor
bagging_model = BaggingRegressor(base_estimator = regression_model, # 선형회귀모형
                                 n_estimators = 5, # 5번 샘플링
                                 verbose = 1) # 학습 과정 표시
linear_model2 = bagging_model.fit(train_x, train_y) # 학습 진행
predict2 = linear_model2.predict(test_x) # 학습된 Bagging 선형 회귀 모형으로 평가 데이터 예측
print("RMSE: {}".format(sqrt(mean_squared_error(predict2, test_y)))) # RMSE 결과
 
하이퍼 파라미터
base_estimator= : 사용하고 싶은 model(예측기)
n_estimators= : 모형의 갯수, 디폴트는 10, (하나의 예측기에 몇번을 시도 할 것인지 정함)
bootstrap= : 데이터 중복 선택. 디폴트는 트루(True)중복함
  • 데이터를 중복은  좀 더 깊게 학습한다는 의미
max_samples= : 하나의 예측기에 들어가는 샘플들이 랜덤하게 선택  
  • 랜덤하게 몇 퍼센트(%)씩 학습할지 한계 값을 결정. 
  • 줄일 수록 서로 다른 것들을 배운 예측기들이 모일 수 있는 가능성이 높아짐
bootstrap_features= : 하나의 예측기에 들어가는 샘플에 대해서 그 칼럼의 중복 사용 여부를 결정. (디폴트는 False)
max_features= : 하나의 예측기가 가져갈 수 있는 최대의 칼럼 개수

 

랜덤포레스트(RandomForest)

배깅의 일종으로 배깅과 다른점은 ‘설명변수’도 무작위로 선택
설명변수를 무작위로 선택하여 트리의 다향성을 확보하고 모형간의 상관관계를 줄이고자 하는것
  • 장점 : 의사결정나무보다 정확도가 높아짐
  • 단점 : 설명력을 상실하여 결과를 해석하기가 어려워짐
 

부스팅(boosting)

배깅과 유사하지만, 부트스트랩 표본을 구성하는 재표본 과정에서 분류가 잘못된 데이터에 더 큰 가중치/확률을 부여하여 표본을 추출(잘못 분류된 데이터(잔차)에 더 큰 가중치를 두어 학습)

 

그래디언트 부스팅(Gradient Boosting)
아다부스트 처럼 이전 에측기의 오차를 보정하도록 예측기를 순차적으로 추가 하지만, 반복 할 때 마다 샘플의 가중치를 수정하는 것이 아니라 이전 예측기가 생성한 잔여오차(residual error)에 새로운 예측기를 모델 전체에 수동 처리하는 것
⁠GradientBoostingRegressor(alpha=0.9, criterion='friedman_mse', init=None,
                          learning_rate=0.1, loss='ls', max_depth=2,
                          max_features=None, max_leaf_nodes=None,
                          min_impurity_decrease=0.0, min_impurity_split=None,
                          min_samples_leaf=1, min_samples_split=2,
                          min_weight_fraction_leaf=0.0, n_estimators=200,
                          n_iter_no_change=None, presort='auto',
                          random_state=42, subsample=1.0, tol=0.0001,
                          validation_fraction=0.1, verbose=0, warm_start=False)
하이퍼 파라미터
  • n_estimators : 트리 수(즉, 반복 수)
  • max_depth : 트리의 깊이(노드 수)
  • learning_rate : 학습률
  • RandomForestRegressor와 같이 결정트리의 성장을 제어하는 매개변수와, 앙상블의 훈련을 제어하는 n_estimators 등을 제공한다.
  • learning_rate는 각 트리의 기여도를 조절하므로 0.1처럼 낮게 설정하면 앙상블을 훈련세트에 학습시키기 위해 필요한 트리가 많아지지만 성능은 좋아진다.
 
스태킹(Stacking)
여러 모델을 사용해 예측한 결과를 다시 학습 결과로 사용하는 것 (모델 자체를 훈련)
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유