분석시각화 대회 코드 공유 게시물은
내용 확인 후
좋아요(투표) 가능합니다.
Python 튜토리얼
Lv4 모델링 복습 - (2)
안녕하세요.🤠 이번시간에는 Stratified K-Fold 와 Voting Classifier 에 대해 복습 해보도록 하겠습니다. 🤗🤗
k-fold의 경우 데이터 셋을 일정한 간격으로 잘라서 사용합니다.
그러다 보니 target의 비율이 일정하지 않게 테스트 셋에 들어 갈 수 있습니다.
만약 target이 0, 1, 2 세가지로 이뤄져 있는데, 이 상황에서 데이터를 잘라서 학습 할 때 0, 1만 답으로 가지고 있는 학습데이터를 가지고 학습을 했을때는 당연하게도 모델은 2라는 답을 도출 할 수 없을 것입니다 .
마찬가지로 1, 2만 가지고 학습을 진행한다면 0이라는 답을 도출 할 수 없을 것입니다. 이러한 점이 k-fold의 치명적인 문제점입니다.
k-fold의 문제점인 target 데이터의 비율을 일정하게 유지 하지 못하는 것을 일정 하게 유지하며, 교차 검증을 진행 하는 것을
stratified k-fold 라고 합니다.👴
Voting Classifier란 여러개의 모델을 결합하여 더 좋은 예측 결과를 도출 하는 앙상블 기법 중 하나 입니다.
Voting Classifier에는 hard voting 방법과 soft voting 방법이 있습니다 .
Hard Voting은 Majority Voting이라고도 하며, 각각의 모델들이 결과를 예측하면 각 모델의 예측을 모아 다수결 투표로 최종 예측 결과를 선정하는 방식입니다.
그림을 살펴보시면, 첫 번째 분류기는 0.9의 확률로 생존을 선택, 두 번째 분류기는 0.6의 확률로 사망을 선택, 세 번째 분류기는 0.7의 확률로 사망을 선택 하였습니다. 생존을 선택 한 모델이 1개, 사망을 선택한 모델이 2개 이기 때문에 Voting Classifier은 최종적으로 사망을 선택하게 됩니다.
Soft Voting은 Probability Voting이라고 하며, 각 모델들이 예측한 결과값의 확률을 합산해 최종 예측 결과를 선정합니다.
단순히 개별 분류기의 예측 결과만을 고려하지 않고 높은 확률값을 반환하는 모델의 비중을 고려할 수 있기 때문에 Hard Voting 보다 성능이 더 좋은 편입니다.
그림을 살펴보시면, 3개의 모델이 생존을 선택 할 확률의 평균은 0.533 이고, 사망을 선택 할 확률의 평균은 0.466 입니다. 최종적으로 Voting Classifier는 Hard Voting과 다르게 생존을 선택하게 됩니다.
-----------------------------------------------------------------------------------------------------------------------------------------
import pandas as pd
from sklearn.model_selection import StratifiedKFold
from sklearn.metrics import accuracy_score
from lightgbm import LGBMClassifier
from xgboost import XGBClassifier
from sklearn.ensemble import VotingClassifier
from sklearn.ensemble import RandomForestClassifier
# StratifiedKFold라이브러리를 이용해 5개의 fold로 나눔.
skf = StratifiedKFold(n_splits = 5)
X = train_one.drop('quality',axis = 1)
y = train_one['quality']
cnt = 1
acc = 0
for train_idx, valid_idx in skf.split(X,y):
train_data = train_one.iloc[train_idx]
valid_data = train_one.iloc[valid_idx]
# 모델 정의
LGBM = LGBMClassifier() # LGBM
XGB = XGBClassifier() # XGBoost
RF = RandomForestClassifier() #Random forest
VC = VotingClassifier(estimators=[('rf',RF),('xgb',XGB),('lgbm',LGBM)],voting = 'soft') # VotingClassifier
# train_X 는 train_data에서 quality 를 제외한 모든 변수
# train_y 는 train_data의 qulity 변수
train_X = train_data.drop('quality',axis= 1)
train_y = train_data['quality']
# fit 메소드를 이용해 모델 학습
VC.fit(train_X,train_y)
valid_X = valid_data.drop('quality',axis = 1)
valid_y = valid_data['quality']
# predict 메소드와 valid_X 데이터를 이용해 품질 예측
pred = VC.predict(valid_X)
# 모델 정확도 출력
print(cnt," 번째 모델 정확도 : " ,accuracy_score(pred,valid_y))
acc += accuracy_score(pred,valid_y)
cnt+=1
print('모델 정확도 평균 : ',acc/5)
-----------------------------------------------------------------------------------------------------------------------------------------
↩️ 오늘의 파이썬 리스트
#데이콘_101 #AI #머신러닝 #딥러닝 #파이썬 #파이선 #데이터분석 #데이터사이언티스트 #코랩 #Python #colab #kaggle #pandas #numpy #sckit-learn # read_csv #LGBM #XGBoost
✅
✅
done
✅
✅
데이콘(주) | 대표 김국진 | 699-81-01021
통신판매업 신고번호: 제 2021-서울영등포-1704호
서울특별시 영등포구 은행로 3 익스콘벤처타워 901호
이메일 dacon@dacon.io | 전화번호: 070-4102-0545
Copyright ⓒ DACON Inc. All rights reserved
done