#[KTAIVLE#6]KNN (김영인)
import numpy as np
group_a = np.zeros((15,2)) # 앞은 값은 샘플 수, 뒤에 값은 샘플의 디멘션 값
group_b = np.zeros((15,2)) # 앞은 값은 샘플 수, 뒤에 값은 샘플의 디멘션 값
group_c = np.zeros((15,2)) # 앞은 값은 샘플 수, 뒤에 값은 샘플의 디멘션 값
# 각 그룹마다 랜덤 값을 부여함
# a는 100 ~ 200 사이의 실수 값
# b는 0 ~ 50
# c는 x축은 100 ~ 200 실수 값, y축은 0 ~ 50 사이의 실수 값
group_a[:] = np.random.uniform(100, 200, size=group_a.shape)
group_b[:] = np.random.uniform(0, 50, size=group_b.shape)
group_c[:,0] = np.random.uniform(100, 200, size = 15)
group_c[:,1] = np.random.uniform(0, 50, size=group_c[:, 1].shape)
point = np.array([48, 150])
# 각 그룹의 점들과 우리가 가지고 있는 현재 point와의 거리를 구하는 함수가 필요
def distance(p, a):
return np.sqrt(np.sum((a - p) ** 2, axis=1))
dist = np.concatenate((distance(point, group_a), distance(point, group_b), distance(point, group_c)))
labels = np.array([0] * len(group_a) + [1] * len(group_b) + [2] * len(group_c)) # 0: a, 1: b, 2: c
# 거리 기준으로 가장 가까운 k개의 인덱스 선택
k = 7
knn_indices = np.argsort(dist)[:k]
print(knn_indices)
knn_labels = labels[knn_indices]
print(knn_labels)
# 각 그룹의 k개 이웃 중 가장 많은 레이블 선택
stat = [np.sum(knn_labels == i) for i in range(3)]
print(stat)
stat = np.argmax(stat)
print(stat)
# 결과 출력
if stat == 0:
print("Predicted group: A")
elif stat == 1:
print("Predicted group: B")
elif stat == 2:
print("Predicted group: C")
[14 9 4 6 2 11 15]
[0 0 0 0 0 0 1]
[6, 1, 0]
0
Predicted group: A