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": [388],
              "min_samples_split": [238],
              "min_samples_leaf": [138],
              "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.10.050.01],
              'max_depth': [48],
              'min_samples_leaf': [100,150],
              'max_features': [0.30.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.0010.010.11],
                  'C': [11050100,200,3001000]}
 
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': [ 00.0010.010.11],
                  'learning_rate':[0.10.050.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



+ Recent posts