Voting Classifiers
Voting Classifiers는 "다수결 분류"를 뜻하는 것으로, 두 가지 방법으로 분류할 수 있습니다.
1. Hard Voting Classifier
여러 모델을 생성하고 그 성과(결과)를 비교합니다. 이 때 classifier의 결과들을 집계하여 가장 많은 표를 얻는 클래스를
최종 예측값으로 정하는 것을 Hard Voting Classifier라고 합니다.
위와 같이 최종 결과를 1로 예측한 모델이 3개, 2로 예측한 모델이 한 개이므로 Hard Voting Classifier의 최종 결과(예측)은 1이 됩니다.
2. Soft Voting Classifier
앙상블에 사용되는 모든 분류기가 클래스의 확률을 예측할 수 있을 때 사용합니다.
각 분류기의 예측을 평균 내어 확률이 가장 높은 클래스로 예측하게 됩니다 (가중치 투표)
위와 같이 예측 확률에 대한 평균이 높게 나오는 클래스를 최종 예측 클래스로 정하게 됩니다.
3. 사이킷 런 Sklearn을 통한 구현
해당 데이터는 캐글의 타이타닉 데이터를 이용하였습니다.
*전체 코드 확인 및 copy가 필요하신 분들은 제 커널 페이지에 가시면 됩니다.
1 2 3 4 5 | from sklearn.ensemble import VotingClassifier from sklearn.model_selection import GridSearchCV, StratifiedKFold # Cross validate model with Kfold stratified cross val k_fold = KFold(n_splits=10, shuffle=True, random_state=0) | cs |
검증엔 10 fold cross validation을 사용합니다.
오늘 만들 Voting Classifier는 총 네 가지 모델을 사용합니다.
1. Random Forest Classifier
2. Gradient Boosting Classifier
3. XGBoost Classifier
4. Support Vector Machine(SVC)
Random Forest Classifier에 대한 Grid Search 및 모델 학습, 예측 진행
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | RFC = RandomForestClassifier() ## Search grid for optimal parameters rf_param_grid = {"max_depth": [None], "max_features": [3, 8, 8], "min_samples_split": [2, 3, 8], "min_samples_leaf": [1, 3, 8], "bootstrap": [False], "n_estimators" :[100,300], "criterion": ["gini"]} gsRFC = GridSearchCV(RFC, rf_param_grid, cv=k_fold, scoring="accuracy", verbose = 1) #print(score) gsRFC.fit(train_data,target) RFC_best = gsRFC.best_estimator_ # Best score gsRFC.best_score_ | cs |
OUT:
Gradient Boosting Classifier에 대한 Grid Search 및 모델 학습, 예측 진행
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | GBC = GradientBoostingClassifier() gb_param_grid = {'loss' : ["deviance"], 'n_estimators' : [100,200,300], 'learning_rate': [0.1, 0.05, 0.01], 'max_depth': [4, 8], 'min_samples_leaf': [100,150], 'max_features': [0.3, 0.1] } gsGBC = GridSearchCV(GBC,param_grid = gb_param_grid, cv=k_fold, scoring="accuracy", n_jobs= 4, verbose = 1) gsGBC.fit(train_data,target) GBC_best = gsGBC.best_estimator_ # Best score gsGBC.best_score_ | cs |
OUT:
Support Vector Classifier에 대한 Grid Search 및 모델 학습, 예측 진행
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | ### SVC classifier SVMC = SVC(probability=True) svc_param_grid = {'kernel': ['rbf'], 'gamma': [ 0.001, 0.01, 0.1, 1], 'C': [1, 10, 50, 100,200,300, 1000]} gsSVMC = GridSearchCV(SVMC,param_grid = svc_param_grid, cv=k_fold, scoring="accuracy", n_jobs= 4, verbose = 1) gsSVMC.fit(train_data,target) SVMC_best = gsSVMC.best_estimator_ # Best score gsSVMC.best_score_ | cs |
OUT:
XGBoost Classifier에 대한 Grid Search 및 모델 학습, 예측 진행
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | XGBC = XGBClassifier() xgb_param_grid = {'max_depth':[3,5,7], 'min_child_weight':[3,5,6], 'gamma': [ 0, 0.001, 0.01, 0.1, 1], 'learning_rate':[0.1, 0.05, 0.01]} gsXGBC = GridSearchCV(XGBC,param_grid = xgb_param_grid, cv=k_fold, scoring="accuracy", n_jobs= 4, verbose = 1) gsXGBC.fit(train_data,target) XGBC_best = gsXGBC.best_estimator_ # Best score gsXGBC.best_score_ | cs |
OUT:
Voting Classifier를 통한 최종 클래스 결정
1 2 3 4 5 6 7 8 9 | #Voting Classifier - voting 파라미터로 hard/soft 선택가능 votingC = VotingClassifier(estimators=[('rfc', RFC_best), ('svc', SVMC_best),('gbc',GBC_best), ('xgb', XGBC_best)], voting='hard', n_jobs=4) votingC = votingC.fit(train_data, target) #예측 진행 prediction = votingC.predict(test_data) | cs |
Prediction으로 최종 예측값을 받아옵니다.
CSV파일 저장 및 확인
1 2 3 4 5 | #케글에 제출할 csv파일 저장 submission = pd.DataFrame({ "PassengerId": test["PassengerId"], "Survived": prediction }) | cs |
'데이터분석 > with Python' 카테고리의 다른 글
[Python] fbprophet를 사용한 시계열 데이터 예측 (0) | 2018.07.29 |
---|---|
Batch, Mini-Batch, SGD 정의와 설명 및 예시 (5) | 2018.07.22 |
[Python] 공공자전거 수요 예측 모델 만들기 (캐글 Bike Sharing Demand) (4) (0) | 2018.07.04 |
[Python] 공공자전거 수요 예측 모델 만들기 (캐글 Bike Sharing Demand) (3) (0) | 2018.07.04 |
[Python] 공공자전거 수요 예측 모델 만들기 (캐글 Bike Sharing Demand) (2) (0) | 2018.07.04 |