경기도미래기술학교 AI개발자 부트캠프 35일차 TIL- KNN 알고리즘 그려보기.

2023. 6. 28. 09:36python

반응형
import numpy as np
import matplotlib.pyplot as plt

def euclidean_distance(x1, y1, x2, y2):
    result = (((y1-x1)**2) + ((y2-x2)**2)) ** 0.5
    return result

n_classes = 4
n_data = 100

X, y = [], []

for class_idx in range(n_classes):
    centroid = np.random.uniform(low=-10, high=10, size=(2,))
    X_ = np.random.normal(loc=centroid, scale=2, size=(n_data, 2))
    y_ = class_idx * np.ones(n_data,)
    X.append(X_)
    y.append(y_)

X, y = np.vstack(X), np.concatenate(y)

print(X.shape, y.shape)

random_spot = np.random.uniform(low=-5, high=8, size=(2,))

test_list = np.empty(0)
for i in range(400):
    stack = euclidean_distance(X[i][0], random_spot[0], X[i][1], random_spot[1])
    test_list = np.append(test_list, stack)

sorted_indices = np.argsort(test_list)

sorted_test_list = test_list[sorted_indices]

k = 3
k_nearest_values = sorted_test_list[:k]
k_nearest_labels = y[sorted_indices[:k]]

n_classes = 4

# Scatter plot 그리기
colors = ['red', 'blue', 'green', 'yellow']

plt.scatter(X[:, 0], X[:, 1], c=y)
plt.scatter(random_spot[0], random_spot[1], c='black', marker='+', label='Random Spot', s=50)
plt.scatter(X[sorted_indices[:k], 0], X[sorted_indices[:k], 1], c='orange', marker='o', label='K Nearest')
plt.title('KNN')
plt.legend()

# 중심선 그리기
# plt.plot([random_spot[0], X[sorted_indices[0], 0]], [random_spot[1], X[sorted_indices[0], 1]], 'k--', label='Center Line')

# K Nearest에 화살표 선 그리기
for i in range(k):
    plt.arrow(random_spot[0], random_spot[1], X[sorted_indices[i], 0] - random_spot[0], X[sorted_indices[i], 1] - random_spot[1],
              length_includes_head=True, head_width=0.5, color='magenta')

plt.show()

KNN 알고리즘 배운 대로 화살표 점을 그려봤다.

 

색칠하는 것은 오늘 뇌가 과부하라 다음에 하기로 했다. 바이바이

728x90