본문 바로가기

AI_딥_러닝_언어지능

AI_파이썬_언어지능_KNN.ipynb


#[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