티스토리 뷰

머신러닝

[Ensemble_1] Bagging (배깅)

느린 개미 2018. 11. 9. 23:12
반응형

요즈음 캐글 타이타닉 score 을 올리기 위하여 홀로 고군분투하고 있다 -.- 

그래서 다른 사람들이 올려놓은 Kernel 을 보다가 요새 Ensemble 부분을 한번 가볍게 훑어보고 있다. 

처음 들어보는 단어들이 많이 헷갈려서 한번 정리해보고자 한다. 


                                                     출처) https://www.youtube.com/watch?v=2Mg8QD0F1dQ


1. Bagging 이란? 


- 머신러닝 Ensemble 방법 중 하나 

- Classification 과  regression 모두 사용 가능 

- 오버피팅 방지를 해주며, Variance를 감소하게 해준다. 

- 주로 Decision Tree 에서 많이 사용하지만, 어떤 알고리즘에도 사용 가능하다.


Train Data 에서 복원추출로 m 개의 데이터셋을 만들고, 각 m 개의 hypothesis  를 만든다. 

최종 결정은 m 개의 hypothesis값을 가지고 평균값이나 , voting 을 하여 결정한다. 

이렇게 되면, 다양한 데이터셋이 반영되기 때문에, overfitting 이 방지되는 장점이 있다. 


2. Bagging 은 Bootstrapping 방법으로 샘플링 하는 것이 핵심 


그럼 Bootstrapping 은 뭐니?

Train Data 에서 임의의 복원추출을 하는 것.


위의 그림과 같이 Train Data 에서 복원추출로 m  개의 데이터셋을 만든다. 


3. 하나의 model 유형에 대한 다양한 hypothesis 구성 


추출한 m개의 데이터 셋으로, 하나의 model유형에 대한 다양한 m개의 model (hypothesis 라고 볼 수 있겠다)을 만든다. 

그리고 이 만들어진 m개의 model 들로  voting, mean 등으로 최종 값을 결정한다 


4. 장점 


다양한 데이터셋에 강한 model 이 탄생한다.


5. 사용 


sklearn.ensemble.BaggingClassifier

class sklearn.ensemble.BaggingClassifier(base_estimator=Nonen_estimators=10max_samples=1.0max_features=1.0bootstrap=Truebootstrap_features=Falseoob_score=Falsewarm_start=Falsen_jobs=Nonerandom_state=Noneverbose=0)[source]

출처) https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.BaggingClassifier.html


best_estimator : 평가할 하나의 model 유형 


n_estimators : Bootstrapping 을 몇개 할래? (즉, 데이터셋을 몇개 만들래?)


max_samples : train 으로 넣어준 데이터에서 몇% 를 샘플링할래?


max_feature : feature 들 중에서, 최대 몇개의 feature 를 사용할까?


oob_score : bagging 실행 시에, 데이터셋에 포함 안된 데이터로 성능 측정 여부


6. 사용예 


예측 성능이 높아지지는 않았지만, 사용 방법을 아는데에 의미를 두었다.

KNN

In [533]:
knn = KNeighborsClassifier()
knn.fit(X_train, Y_train)
Out[533]:
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
           metric_params=None, n_jobs=1, n_neighbors=5, p=2,
           weights='uniform')
In [534]:
knn.score(X_test, Y_test)
Out[534]:
0.82835820895522383


 Bagging KNN


  • KNN
In [530]:
model = BaggingClassifier(base_estimator=KNeighborsClassifier(n_neighbors=5))
model.fit(X_train, Y_train)
print('The accuracy for bagged KNN is:', model.score(X_test, Y_test) )
The accuracy for bagged KNN is: 0.817164179104



반응형