머신러닝
iris data 를 이용한 KNN 구현해보기_1
느린 개미
2018. 5. 4. 22:14
반응형
In [174]:
import numpy as np
def distance(p1, p2):
return np.sqrt(np.sum(np.power((p2-p1),2)))
p1 = np.array([1,3])
p2 = np.array([2,6])
print(distance(p1, p2)) # (1,3) 과 (2,6) 간의 거리 계산
In [175]:
from sklearn.datasets import load_iris
data = load_iris()
distance_result = np.zeros(150)
for i in range(len(data.data)):
distance_result[i] = distance(data.data[len(data.data)-1],data.data[i] )
print(distance_result)
In [176]:
print(np.argsort(distance_result)) ## sorting 시 index 값 반환. 첫번째 index 인 149 는 자기 자신이다.
In [177]:
def find_nearest_neighbors(p, points, k):
distance_result = np.zeros(len(points))
for i in range(len(points)):
distance_result[i] = distance(points[i],p )
sorted_index = np.argsort(distance_result)[:k]
result = np.zeros(k)
for i in range(k):
result[i] = data.target[sorted_index[i]]
return result # target 값 ==> 0:setosa , 1:versicolor , 2:virginica
In [178]:
target_result = find_nearest_neighbors(data.data[149], data.data[:149], 5)
print(target_result)
In [179]:
from collections import Counter
def majority_vote(target_result):
vote_counts = Counter(target_result)
#print(type(vote_counts.most_common(1)))
#print(vote_counts.most_common(1))
#vote_counts 의 가장 빈번한 값중 0번째 index 의 target 값을 반환
#가장 빈번한 값이 중복된 경우의 처리는 하지 않았다.
# most_common([n])
#Return a list of the n most common elements and their counts from the most common to the least.
return vote_counts.most_common(1)[0][0]
In [180]:
majority_vote(target_result)
Out[180]:
In [181]:
def knn_predict(p, points , k=5):
species = {0: "setosa", 1:"versicolor", 2:"virginica"}
target_result = find_nearest_neighbors(p, points, k)
species_result = majority_vote(target_result)
return species[species_result]
In [182]:
print("최종결과 : " + knn_predict(data.data[149], data.data[:149], 5))
In [183]:
print("최종결과 : " + knn_predict(data.data[0], data.data, 5))
# 여기서는 distance 측정에 자신의 data 가 포함되게 넣어주었다. 귀찮아서 ㅠㅠ
In [184]:
print("최종결과 : " + knn_predict(data.data[80], data.data, 5))
# 역시 distance 측정에 자신의 data 가 포함되게 넣어주었다. 귀찮아서 ㅠㅠ
반응형