data-science-summary/summary

KNN (k-neareast neighbor) 분류모델 in python

고수트 2020. 9. 19. 17:51
반응형

<엔지니어는 구현을 못하면 모르는것이다>

KNN (k-neareast neighbor) 분류모델

근처 k개의 가장 가까운 훈련 데이터로 값을 예측하는방법

궁금한 데이터 주변 K 개의 데이터의 클래스가 1 이 제일 많으면 1 이 됨

거리 측정하는 방식에는 유클리디안방식, 맨헤탄 방식등이 있다.

보통 판정하기위해 K 는 홀수로 측정한다.

장점은 쉽고 직관적이고 샘플수가 많은경우 높은 정확도를 가지고 있다.

단점은 느리다.

# KNN (k-neareast neighbor) 분류모델
from sklearn.neighbors import KNeighborsClassifier
X = [[0,1,2], [1,3,5], [1,10,10],[1,2,2],[1,3,4],[2,7,8], [3,3,10]]
y = [0, 0, 1, 0,0,1,1]
# 유클리디안방식
knn = KNeighborsClassifier(n_neighbors=3, metric='euclidean')
knn = KNeighborsClassifier(n_neighbors=3, p=2) 

# 맨헤탄 방식
knn = KNeighborsClassifier(n_neighbors=3, metric='manhattan')
knn = KNeighborsClassifier(n_neighbors=3, p=1)

# 학습
knn.fit(X, y)
test_x = [[1,2,3],[1,9,9]]
test_y = [0, 1]
# 예측
knn.predict(test_x)

import numpy as np
# k 에 따른 정확도 
k = np.arange(1,8)[::2]
acc =[]
for i in k:
  knn =KNeighborsClassifier(n_neighbors=i).fit(X,y)
  acc.append(knn.score(test_x, test_y))

for i,j in zip(k,acc):
  print('k가 '+ str(i)+'일때 정확도는 ' + str(j))
반응형