반응형
SMALL
프로젝트 deadline이 임박해서 거의 3~4일에 한 번 학습을 진행할 수 있네요-_-
이번 학습 주제는 예측하려는 대상의 속성을 입력 받아 목표 값(범주형) 중에서
어느 한 값으로 분류하여 예측하는 분류 알고리즘 중에서 새로운 관측값이 주어지면
기존 데이터 중 속성이 가장 비슷한 k개의 이웃을 찾아
이웃들이 갖는 목표 값과 같은 값으로 분류하는 KNN(K-Nearest-Neighbors) 알고리즘입니다
이 KNN 알고리즘은 k값에 따라 예측의 정확도가 달라지므로 k값을 잘 찾는 것이 관건이 되겠습니다
# -*- coding: utf-8 -*-
# 판다스(Pandas)
import pandas
import seaborn
# Prepare Data
titanic_data = seaborn.load_dataset('titanic')
pandas.set_option('display.max_columns', 15)
print(titanic_data.head(), end = '\n')
# Explore Data
print(titanic_data.info(), end = '\n')
# Drop Columns 'deck', 'embark_town'
run_data = titanic_data.drop(['deck', 'embark_town'], axis = 1)
print(run_data.columns.values, end = '\n')
# Delete row
run_data = run_data.dropna(subset = ['age'], how = 'any', axis = 0)
print(len(run_data), end = '\n')
# Replace value
most_freq = run_data['embarked'].value_counts(dropna = True).idxmax()
print(most_freq, end = '\n')
run_data['embarked'].fillna(most_freq, inplace = True)
# Extract data & one-hot-encoding
extract_data = run_data[['survived', 'pclass', 'sex', 'age', 'sibsp', 'parch', 'embarked']]
onehot_sex = pandas.get_dummies(extract_data['sex'])
onehot_embarked = pandas.get_dummies(extract_data['embarked'], prefix = 'town')
extract_data = pandas.concat([extract_data, onehot_sex], axis = 1)
extract_data = pandas.concat([extract_data, onehot_embarked], axis = 1)
extract_data.drop(['sex', 'embarked'], axis = 1, inplace = True)
print(extract_data.head(), end = '\n')
x = extract_data[['pclass', 'age', 'sibsp', 'parch', 'female', 'male', 'town_C', 'town_Q', 'town_S']]
y = extract_data['survived']
# Normalization
from sklearn import preprocessing
x = preprocessing.StandardScaler().fit(x).transform(x)
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state = 10)
# KNN
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors = 5) # k = 5
knn.fit(x_train, y_train)
y_hat = knn.predict(x_test)
print(y_hat[0:10], end = '\n')
print(y_test.values[0:10], end = '\n')
# Evaluation
from sklearn import metrics
knn_matrix = metrics.confusion_matrix(y_test, y_hat)
print(knn_matrix, end = '\n')
knn_report = metrics.classification_report(y_test, y_hat)
print(knn_report, end = '\n')
코드의 마지막 부분이 메트릭스 형태로 평가 지표를 출력하는데
이를 이해하기 위해서 분류 모형을 평가하는 지표를 알아두어야할 것 같네요
반응형
LIST
'Machine Learning' 카테고리의 다른 글
[Machine Learning] 분류(Classification)_3 (0) | 2019.11.23 |
---|---|
[Machine Learning] 분류(Classification)_2 (0) | 2019.11.23 |
[Machine Learning] 회귀분석(Regression)_3 (0) | 2019.11.07 |
[Machine Learning] 회귀분석(Regression)_2 (0) | 2019.10.28 |
[Machine Learning] 회귀분석(Regression)_1 (0) | 2019.10.20 |