캐글의 튜토리얼 격인 타이타닉 데이터를 의사결정 트리로 분류해보자
sklearn을 이용하여 KNN알고리즘으로 구현한다.
데이터 자체를 이해하고 어떤것이 중요한 데이터인지 분류하는 것보다는 sklearn을 이용하여 KNN알고리즘 자체를 구현해 보는 것이 목적이기 때문에 데이터 전처리에는 큰 비중을 두지 않고 넘어간다.
실습
1. 사용할 모듈을을 불러온다
데이터 처리를 위한 pandas와 numpy
KNN알고리즘을 구현하기 위한 sklearn 모듈을 불러온다.
import pandas as pd
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
2. 데이터셋 불러오기
#트레이닝 데이터 가져오기
train = pd.read_csv('../data/titanic/train.csv')
#테스트 데이터 가져오기
test = pd.read_csv('../data/titanic/test.csv')
train.head()
3. 학습
Pclass 데이터만을 가지고 학습시켜본다.
feature_name = ['Pclass']
x = train[feature_name]
print(x)
--출력--
0 0
1 1
2 1
3 1
4 0
..
886 0
887 1
888 0
889 1
890 0
Name: Survived, Length: 891, dtype: int64
feature_name, x에 학습 데이터를 넣는다.
target = "Survived"
y = train[target]
print(y)
--출력--
0 0
1 1
2 1
3 1
4 0
..
886 0
887 1
888 0
889 1
890 0
Name: Survived, Length: 891, dtype: int64
target, y에 정답 데이터를 넣는다.
knn_model = KNeighborsClassifier(n_neighbors= 13) #13개의 이웃을 기준
n_neighbors은 K가 13 즉, 13개의 이웃된 데이터를 보겠다는 것이다.
knn_model.fit(x,y)
fit으로 학습시킨다.
x_test=test[feature_name] #Pclass
met = knn_model.predict(x_test)
met
--출력--
array([0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0,
1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1,
1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1,
0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0,
0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1,
1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0,
0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1,
1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0,
1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0,
1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1,
1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0,
1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0,
1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1,
1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1,
1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1,
1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1,
0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0],
dtype=int64)
테스트 데이터를 모델에 적용시켜 본다.
a = pd.read_csv('../data/titanic/gender_submission.csv')
a['Survived'] = met
a.to_csv("KNN.csv", index=False) #인덱스가 있으면 제출에서 오류가 난다
제출 파일을 불러온 뒤에 Survived에 방금 적용된 met를 덮어 씌운 뒤에 저장한다.
제출해보면
0.6, 60퍼센트의 정확도가 나온다.
다음으로는 성별을 숫자로 변환한 뒤에 성별도 학습시켜 본다.
train.Sex = train.Sex.replace('male',0)
train.Sex = train.Sex.replace('female',1)
test.Sex = test.Sex.replace('male',0)
test.Sex = test.Sex.replace('female',1)
train.head()
Sex가 0, 1로 변환 된 것을 볼 수 있다.
feature_name에 'Sex'를 추가한 뒤에 학습시키고 제출해본다.
0.77, 70퍼센트로 정확도가 오른 것을 확인할 수 있다.
예제 파일
'Emotion > 인공지능 기초' 카테고리의 다른 글
랜덤 포레스트 (0) | 2020.09.16 |
---|---|
의사결정 트리 CART (0) | 2020.09.16 |
의사결정 트리 캐글 (0) | 2020.09.15 |
의사결정 트리 ID3 (1) | 2020.09.15 |
K-NN 최근접 이웃 (K-Nearest Neighbor) 알고리즘 (0) | 2020.09.11 |