일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- IT
- Python
- 디지털직무
- 사전학습
- 과소완전
- 지도학습
- 일반상식
- 주피터노트북
- jupyternotebook
- 직무역량평가
- 군집분석
- 디지털용어
- 비지도학습
- Jupyter Notebook
- 금융상식
- 데이콘
- 머신러닝
- 데이크루
- 은행채용
- 은행
- 금융권
- 알고리즘
- 과대완전
- 디지털
- 파이썬문법
- 데이터분석
- IT용어
- dacrew
- 금융
- 파이썬
- Today
- Total
Ming's blog
kaggle) Titanic data 분석하기 2. 모델링(xgboost, RandomForest) 본문
1. Modeling
앞에서 처리한 데이터를 이용하여 분석을 해보고자 합니다.
여러가지 모델 중 xgboost 와 randomforest를 이용한 분석을 하려고 합니다.
1.1. xgboost
train 데이터를 train_test_split 함수로 7:3으로 나누어 CV방법을 이용하여 모델을 생성하고자 합니다.
우리가 예측하고자 하는 타켓변수는 0 또는 1의 값을 가지므로 XGBClassifier 모델을 이용하려 합니다.
import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, accuracy_score
#train 변수 나누기
X, y = dfm_train.drop(columns = ['Survived','PassengerId']) , dfm_train['Survived']
X_train, X_test, y_train, y_test= train_test_split(X, y,test_size=0.3, random_state=123)
xg_cl = xgb.XGBClassifier(objective='binary:logistic',n_estimators=20, seed=123)
xg_cl.fit(X_train, y_train)
#예측하기
preds = xg_cl.predict(X_test)
#정확도
accuracy = float(np.sum(preds==y_test))/y_test.shape[0]
print("accuracy: %f" % (accuracy))
accuracy: 0.820896
우선, 튜닝없이 임의의 하이퍼파라미터를 넣고 모델링은 한 결과 위와같이 82%의 정확도를 가지는 것을 알 수 있습니다.
이 모델을 이용하여 train data의 타겟변수를 예측하였습니다.
y_pred = xg_cl.predict(dfm_test.drop(columns='PassengerId')).astype('int')
results = pd.DataFrame(data={'PassengerId':dfm_test['PassengerId'].astype('int'), 'Survived':y_pred})
print(results)
results.to_csv('Prediction_XGB.csv', index=False)
이번에는 tuning을 이용하여 xgboost 모델을 생성하고자 합니다.
import xgboost as xgb
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.model_selection import RandomizedSearchCV, GridSearchCV
from sklearn.model_selection import StratifiedKFold
X, y = dfm_train.drop(columns = ['Survived','PassengerId']) , dfm_train['Survived']
X_train, X_test, y_train, y_test= train_test_split(X, y,test_size=0.2, random_state=123)
# A parameter grid for XGBoost
params = {
'min_child_weight': [1, 3,5,7 , 10],
'gamma': [0.5, 1, 1.5, 2,3,4, 5],
'subsample': [0.6,0.7, 0.8,0.9, 1.0],
'colsample_bytree': [0.6,0.7, 0.8,0.9, 1.0],
'max_depth': [3, 4, 5 , 6]
}
xgb = xgb.XGBClassifier(learning_rate=0.02, n_estimators=600, objective='binary:logistic', silent=True, nthread=1)
folds = 3
param_comb = 5
skf = StratifiedKFold(n_splits=folds, shuffle = True, random_state = 1001)
random_search = RandomizedSearchCV(xgb, param_distributions=params, n_iter=param_comb, scoring='roc_auc', n_jobs=4, cv=skf.split(X_train,y_train), verbose=3, random_state=1001 )
random_search.fit(X_train, y_train)
StratifiedKFold를 이용하고 RandomizedSearchCV를 이용하여 최적의 하이퍼파라미터를 찾아 모델링을 진행하였습니다.
random_search.best_params_
최적 파라미터는 위와 같습니다.
이 파라미터를 이용하여 train데이터의 예측력을 확인해보면 아래와 같이 87%로 더 높아진 것을 확인할 수 있습니다.
#예측하기
preds = random_search.predict(X_test)
#정확도
accuracy = float(np.sum(preds==y_test))/y_test.shape[0]
print("accuracy: %f" % (accuracy))
accuracy: 0.877095
y_test = random_search.predict(dfm_test.drop(columns='PassengerId')).astype('int')
results = pd.DataFrame(data={'PassengerId':dfm_test['PassengerId'].astype('int'), 'Survived':y_test})
results.to_csv('Prediction_XGB_hp.csv', index=False)
1.2. RandomForest
다음으로 RandomForest 함수를 이용하여 예측하겠습니다.
RandomForestClassifier 함수를 이용하여 타겟변수를 예측하였습니다.
from sklearn.ensemble import RandomForestClassifier
param={'n_estimators':[100,200,300],
'max_depth':[6,8,10,12],
'min_samples_leaf':[3,5,7,10,15],
'min_samples_split':[2,3,5,10]
}
rf = RandomForestClassifier(n_estimators=100,
n_jobs=-1,
random_state=0,warm_start=True)
random_search = RandomizedSearchCV(rf, param_distributions=param, scoring='accuracy', cv=skf.split(X_train,y_train))
random_search.fit(X_train, y_train)
튜닝된 최적화 하이퍼파라미터는 아래와 같습니다.
random_search.best_params_
이 모델을 이용하여 train 데이터를 예측한 결과는 아래와 같습니다.
#예측하기
preds = random_search.predict(X_test)
#정확도
accuracy = float(np.sum(preds==y_test))/y_test.shape[0]
print("accuracy: %f" % (accuracy))
accuracy: 0.849162
y_test = random_search.predict(dfm_test.drop(columns='PassengerId')).astype('int')
results = pd.DataFrame(data={'PassengerId':dfm_test['PassengerId'].astype('int'), 'Survived':y_test})
results.to_csv('Prediction_rf_hp.csv', index=False)
xgboost를 이용하였을 때, 더 높은 예측력을 보이는 것을 알 수 있습니다.
'데이터 분석' 카테고리의 다른 글
[서평] 이기적 빅데이터 분석기사 실기 교재 (0) | 2022.11.14 |
---|---|
[서평] 가장 빨리 만나는 스벨트 (0) | 2022.04.10 |
[서평] 2022 공개적 빅데이터분석기사 실기 교재 추천 (0) | 2022.02.21 |
kaggle) Titanic data 분석하기 1. 데이터 전처리 (0) | 2020.04.24 |