SW/머신러닝

python : 머신러닝 : KNN : 실습, 예제

얇은생각 2019. 11. 25. 07:30
반응형
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
import numpy as np

 

실습에 사용할 라이브러리를 import 합니다.

 

 

dir = './gdrive/My Drive/Colab Notebooks/'

trainData = np.genfromtxt(dir+'process_data_train.csv',delimiter=',', skip_header=1)
X_train = trainData[:,:-1]
y_train = trainData[:,-1]

testData = np.genfromtxt(dir+'process_data_test.csv',delimiter=',', skip_header=1)
X_test = testData[:,:-1]
y_test = testData[:,-1]

이제 실습에 활용할 데이터를 읽어옵니다. 좋은 라이브러리를 활용해 csv 파일을 쉽게 임포트 시킬 수 있습니다. 여러 오픈된 데이터를 가지고 실습하셔도 좋을 것 같습니다.

 

 

neighbors_value = 3
kNN_classifier = KNeighborsClassifier(n_neighbors = neighbors_value)

분류할 클래스 수를 정의합니다. 이 값에 따라 결과가 많이 달라질 수 있습니다.

 

 

kNN_classifier.fit(X_train,y_train)

이제 로드한 데이터를 가지고, 학습을 실시합니다. 

 

 

y_hat = kNN_classifier.predict(X_test)
accuracy = accuracy_score(y_test,y_hat)
print(accuracy)


"""
0.7272727272727273
"""

 

테스트 데이터를 넣어봅니다. 그리고 해당 데이터와 예측 데이터를 비교해봅니다. 정확도가 약 0.72 가 나온 것을 확인할 수 있습니다.

 

 

import matplotlib.pyplot as plt
test_result = []
k_neighbors = [1,3,5,7,9,11,13,15]

for k_neighbor in k_neighbors:
    kNN_classifier = KNeighborsClassifier(n_neighbors = k_neighbor)
    kNN_classifier.fit(X_train,y_train)

    y_hat = kNN_classifier.predict(X_test)
    accuracy = accuracy_score(y_test,y_hat)
    test_result.append(accuracy)

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(k_neighbors, test_result, '-x', c='blue', label="Accuracy of test")
plt.xlabel('the number of neighbors')
plt.ylabel('accuracy')
plt.legend(loc='upper right')
plt.show()

KNN 정확도

이제 분류할 수에 따라 accuracy가 어떻게 변하는지 알아보겠습니다. 중간 값에서는 정확도가 떨어지는 것을 확인할 수 있었습니다. 그 후로는 비슷한 수준으로 예측하는 것을 알 수 있습니다. 

반응형