1. 모델링 기법
생존율 예측을 위해 6가지 모델을 학습시켜서 정확도가 가장 높은 것을 테스트에서 사용한다. 여기서 사용할 모델은 다음과 같다.
1. Logistic Regression : 독립변수의 선형 결합을 이용해서 사건의 발생 가능성의 예측을 위한 통계 기법
2. Decision Tree : 분류함수를 의사결정 규칙으로 이루어진 나무 형태로 그려서 나타내는 것으로 Flow chart 로 자주 사용되는 모델
3. Support Vector Machine : 주어진 데이터를 바탕으로 새로운 데이터가 어느 카테고리에 포함될지 판단하는 모델
4. Random Forest : 의사결정나무가 분산이 크다는 점을 고려해서 다수의 의사결정나무로 다양한 무작위성을 주어 학습하는 모델
5. k-Nearest Neighbors : 주변 특징 공간 내 k개 데이터에서 가장 연관있는 데이터의 class로 결과가 도출되는 모델
6. Naive Bayes : 베이즈 정리를 이용한 확률 분류기의 일종으로 주로 텍스트 분류에 활용되는 모델
2. 데이터 모델링
앞선 글에 이어, 이제부터 본격적으로 train 데이터를 학습시킨다.
import numpy as np
#머신러닝 패키지 Import
from sklearn.linear_model import LogisticRegression #로지스틱 회귀
from sklearn.tree import DecisionTreeClassifier #의사결정 나무
from sklearn.svm import SVC #SVM
from sklearn.ensemble import RandomForestClassifier #랜덤포레스트
from sklearn.neighbors import KNeighborsClassifier #K-NN
from sklearn.naive_bayes import GaussianNB #나이브 베이즈
# 교차검증
from sklearn.model_selection import KFold
k_fold = KFold(n_splits=10, shuffle=False, random_state =0)
# 정확도 측정
from sklearn.model_selection import cross_val_score
행렬 연산을 하게 하는 numpy 및 머신러닝 모델에 대해 import한다. 추가로, 교차검증을 하는 KFold 및 정확도 측정을 위한 cross_val_score까지 import한다.
교차검증이란, 과적합을 방지하기 위해 데이터 셋을 k개로 나누어 test 셋을 중복되지 않도록 바꾸면서 모델을 학습시키는 것이다. 여기서는 데이터 셋을 10개로 나누어 진행한다. K-fold 외에도 교차검증에는 Holdout 방법, Leave-one-out 교차 검증 등이 있다.
learning = train['Survived']
train = train.drop('Survived',axis =1)
scoring = 'accuracy'
생존여부를 학습하기 위해 learning으로 생존 결과만 따로 분리하고, train 데이터의 생존 여부는 삭제한다. 정확도 평가는 accuracy(TN+TP/전체)를 사용한다.
model = LogisticRegression()
score = cross_val_score(model, train, learning, cv = k_fold, n_jobs = 1, scoring = scoring)
round(np.mean(score)*100, 2)
로지스틱 회귀 : 80.14
model = DecisionTreeClassifier()
score = cross_val_score(model, train, learning, cv = k_fold, n_jobs = 1, scoring = scoring)
round(np.mean(score)*100, 2)
의사결정나무 : 80.7
model = SVC()
score = cross_val_score(model, train, learning, cv = k_fold, n_jobs = 1, scoring = scoring)
round(np.mean(score)*100, 2)
SVM : 82.83
model = RandomForestClassifier(n_estimators = 13)
score = cross_val_score(model, train, learning, cv = k_fold, n_jobs = 1, scoring = scoring)
round(np.mean(score)*100, 2)
13개의 의사결정나무를 묶은 랜덤 포레스트 : 81.71
model = KNeighborsClassifier(n_neighbors = 13)
score = cross_val_score(model, train, learning, cv = k_fold, n_jobs = 1, scoring = scoring)
round(np.mean(score)*100, 2)
주변 13개의 데이터 중 가장 근접한 경우를 확인하는 K-NN : 81.37
model = GaussianNB()
score = cross_val_score(model, train, learning, cv = k_fold, n_jobs = 1, scoring = scoring)
round(np.mean(score)*100, 2)
나이브 베이즈 : 80.7
SVM이 가장 정확도가 높게 나왔고, 이를 테스트 모델로 사용한다.
3. 데이터 테스트
test_model = SVC()
test_model.fit(train, learning)
testing = test.drop("PassengerId", axis=1).copy()
prediction = test_model.predict(testing)
test 데이터도 train 데이터처럼 데이터 전처리 완료 후, 테스트를 진행한다.
result = pd.DataFrame({
"PassengerId": test["PassengerId"],
"Survived": prediction
})
result.head(10)
예측 결과를 result에 담아 결과를 확인한다.
코드 전문은 아래 사이트에서 확인가능하다.
'데이터 사이언스 메뉴얼 > Machine Learning' 카테고리의 다른 글
(SM) Machine Learning - Support Vector Machine(서포트 벡터 머신) (0) | 2020.05.20 |
---|---|
(SM) Machine Learning - kNN(k-Nearest Neighbor) (0) | 2020.05.20 |
Machine Learning - Kaggle Titanic(2) (0) | 2020.05.13 |
(SM) Machine Learning - Logistic Regression(로지스틱 회귀) (0) | 2020.05.12 |
Machine Learning - Kaggle Titanic(1) (0) | 2020.05.08 |
최근댓글