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



해당 대회는 캐글의 워싱턴 공공 자전거 데이터를 바탕으로 수요를 예측하는 모델을 만든 것입니다

대회 링크: https://www.kaggle.com/c/bike-sharing-demand


*코드 복붙이 필요하신 분들은 제 커널 페이지에 가시면 됩니다 


순서는 아래와 같습니다.


Step 1.

Data Explore


Step 2. 

Feature Engineering


Step 3. 

Modeling


















해당 대회는 캐글의 워싱턴 공공 자전거 데이터를 바탕으로 수요를 예측하는 모델을 만든 것입니다

대회 링크: https://www.kaggle.com/c/bike-sharing-demand


*코드 복붙이 필요하신 분들은 제 커널 페이지에 가시면 됩니다 


순서는 아래와 같습니다.


Step 1.

Data Explore


Step 2. 

Feature Engineering


Step 3. 

Modeling














해당 대회는 캐글의 워싱턴 공공 자전거 데이터를 바탕으로 수요를 예측하는 모델을 만든 것입니다

대회 링크: https://www.kaggle.com/c/bike-sharing-demand


*코드 복붙이 필요하신 분들은 제 커널 페이지에 가시면 됩니다 


순서는 아래와 같습니다.


Step 1.

Data Explore


Step 2. 

Feature Engineering


Step 3. 

Modeling








''' 생략 '''


''' 생략 '''





해당 대회는 캐글의 워싱턴 공공 자전거 데이터를 바탕으로 수요를 예측하는 모델을 만든 것입니다

대회 링크: https://www.kaggle.com/c/bike-sharing-demand


*코드 복붙이 필요하신 분들은 제 커널 페이지에 가시면 됩니다 


순서는 아래와 같습니다.


Step 1.

Data Explore


Step 2. 

Feature Engineering


Step 3. 

Modeling







.

해당 대회는 캐글의 Iowa 부동산 데이터를 바탕으로 집값을 예측하는 모델을 만든 것입니다

대회 링크: https://www.kaggle.com/c/house-prices-advanced-regression-techniques


*코드 복붙이 필요하신 분들은 제 커널 페이지에 가시면 됩니다


순서는 아래와 같습니다.


Step 1.

Data Explore


Step 2. 

Feature Engineering


Step 3. 

Modeling


*Grid search를 통한 hyper parameter 찾는 방법은 추후 포스팅에서 자세히 진행하도록 하겠습니다

** Gradient Boosting Regression, XGBoost, LightGBM 을 사용하였습니다.







해당 대회는 캐글의 Iowa 부동산 데이터를 바탕으로 집값을 예측하는 모델을 만든 것입니다

대회 링크: https://www.kaggle.com/c/house-prices-advanced-regression-techniques


*코드 복붙이 필요하신 분들은 제 커널 페이지에 가시면 됩니다


순서는 아래와 같습니다.


Step 1.

Data Explore


Step 2. 

Feature Engineering


Step 3. 

Modeling







해당 대회는 캐글의 Iowa 부동산 데이터를 바탕으로 집값을 예측하는 모델을 만든 것입니다

대회 링크: https://www.kaggle.com/c/house-prices-advanced-regression-techniques


*코드 복붙이 필요하신 분들은 제 커널 페이지에 가시면 됩니다


순서는 아래와 같습니다.


Step 1.

Data Explore


Step 2. 

Feature Engineering


Step 3. 

Modeling




















해당 대회는 캐글의 Iowa 부동산 데이터를 바탕으로 집값을 예측하는 모델을 만든 것입니다

대회 링크: https://www.kaggle.com/c/house-prices-advanced-regression-techniques


*코드 복붙이 필요하신 분들은 제 커널 페이지에 가시면 됩니다


순서는 아래와 같습니다.


Step 1.

Data Explore


Step 2. 

Feature Engineering


Step 3. 

Modeling





지금까지 데이터 전처리를 진행하였다.


이제 K-fold cross validation을 써서 가장 좋은 정확도를 보이는 모델을 찾고, 


해당 모델로 test set의 survived를 예측해 보겠다.



사이키 런 라이브러리를 통해 구현한다

교차검증 코드는 다음과 같다.

K-fold cross validation에 대한 설명은 이곳에.



kNN 구현 코드는 다음과 같다. 

교차검증 결과 평균 정확도 82.6



의사결정나무 구현 코드는 다음과 같다

교차검증 결과 평균 정확도 79.58


랜덤포레스트 구현 코드는 다음과 같다

교차검증 결과 평균 정확도 80.81


나이브베이즈 구현 코드는 다음과 같다

교차검증 결과 평균 정확도 78.78


SVM 구현 코드는 다음과 같다

교차검증 결과 평균 정확도 83.5


*즉 SVM이 제일 정확도가 높기 때문에, Test Set을 SVM으로 예측한다.




Test set을 SVM으로 예측하고, 해당 결과물을 다시 csv로 저장한다 (to_csv 명령어)

SVM에 대한 설명은 여기 참고.

해당 결과물을 캐글에 제출하면 모델의 정확도를 측정해 주는데, 오늘 우리가 만든 모델의 정확도는..


'




정확도는 0.789고 이는 전체 제출 모델의 상위 31퍼.에 해당하는 성적이다.



Reference:

https://www.youtube.com/channel/UCxP77kNgVfiiG6CXZ5WMuAQ

http://scikit-learn.org/stable/index.html


*코드 복붙이 필요하신분은 제 캐글 커널페이지에서 하실 수 있습니다.



지난 포스팅에 이어서 전처리를 마무리해 보겠다.


Embarked 칼럼부터 시작한다.







Cabin에 대해서 좀 더 보충해서 설명하자면, Cabin은 객실을 뜻하는 것인데 알파뱃과 숫자의 조합으로 이루어진다.

여기서 숫자까지 분류를 하기에는 조금 무리가 있기 때문에, 우리는 제일 앞에 있는 알파벳만 추출하여 연관성을 보기 위해

시각화를 진행한 것이다.




기존에 SibSP 랑 Parch 두 개로 나누어져있던 칼럼을 Familysize 하나로 합친다

그리고 해당 두 칼럼을 drop한다.


이제 전처리를 마무리하였고, 모델 학습을 진행해 보겠다.


*코드 복붙이 필요하신분은 제 캐글 커널페이지에서 하실 수 있습니다.



+ Recent posts