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에 담아 결과를 확인한다.

 

코드 전문은 아래 사이트에서 확인가능하다.

 

 

SeoroMin/khusw_study

code sharing in study. Contribute to SeoroMin/khusw_study development by creating an account on GitHub.

github.com

 

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기