
📝 유클리드 거리(Euclidean Distance) 공식
KNN 분류기의 예측 확률의 정의:
이 방식은 단순히 다수결 원칙을 확률적으로 표현한 것으로, 확률값을 직접 계산하는 대신 이웃한 데이터가 많이 속한 클래스를 선택하는 방식입니다.
K 값이 너무 작거나 크면 성능이 저하될 수 있음.
📌 보통 홀수(K=3, 5, 7 등)를 사용하며, 데이터에 따라 최적의 K 값을 결정해야 함!
✅ 장점
❌ 단점
📌 K 값 최적화: Grid Search 또는 Cross Validation을 활용
📌 거리 측정 방식 선택: 유클리드 거리 외에 맨해튼 거리 등 다양한 거리 척도 고려
📌 고차원 데이터 처리: PCA(차원 축소) 또는 특징 선택 기법 적용
KNN은 단순하지만 직관적이고 강력한 모델입니다.
데이터가 적거나 패턴이 명확할 때 유용하지만, 대용량 데이터에서는 속도 문제를 고려
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
iris = load_iris()
iris
out:
{'data': array([[5.1, 3.5, 1.4, 0.2],
[4.9, 3. , 1.4, 0.2],
[4.7, 3.2, 1.3, 0.2],
[4.6, 3.1, 1.5, 0.2],
[5. , 3.6, 1.4, 0.2],
[5.4, 3.9, 1.7, 0.4],
[4.6, 3.4, 1.4, 0.3],
[5. , 3.4, 1.5, 0.2],
[4.4, 2.9, 1.4, 0.2], ...
iris.feature_names
out:
['sepal length (cm)',
'sepal width (cm)',
'petal length (cm)',
'petal width (cm)']
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size = 0.2,random_state = 42)
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors = 1)
knn.fit(X_train,y_train)
out:

for i in (1,3,5,7): #k의 갯수
for j in ('uniform', 'distance'): #거리계산
for k in ('auto','ball_tree','kd_tree','brute'): #최적화 algorithm
model = KNeighborsClassifier(n_neighbors=1, weights=j,algorithm=k)
model.fit(X_train,y_train)
y_p = model.predict(X_test)
relateion_square = model.score(X_test,y_test)
from sklearn.metrics import confusion_matrix, classification_report
knn_matrix = confusion_matrix(y_test,y_p)
print(knn_matrix)
target_names = ['setosa', 'cersicolor', 'virginica']
knn_result = classification_report(y_test,y_p,target_names=target_names)
print(knn_result)
print('\n')
print('\n')
out:
[[10 0 0]
[ 0 9 0]
[ 0 0 11]]
precision recall f1-score support
setosa 1.00 1.00 1.00 10
cersicolor 1.00 1.00 1.00 9
virginica 1.00 1.00 1.00 11
accuracy 1.00 30
macro avg 1.00 1.00 1.00 30
weighted avg 1.00 1.00 1.00 30
[[10 0 0]
[ 0 9 0]
[ 0 0 11]]
precision recall f1-score support
setosa 1.00 1.00 1.00 10
cersicolor 1.00 1.00 1.00 9
virginica 1.00 1.00 1.00 11
accuracy 1.00 30
macro avg 1.00 1.00 1.00 30
weighted avg 1.00 1.00 1.00 30
[[10 0 0]
[ 0 9 0]
[ 0 0 11]]
precision recall f1-score support
setosa 1.00 1.00 1.00 10
cersicolor 1.00 1.00 1.00 9
virginica 1.00 1.00 1.00 11
accuracy 1.00 30
macro avg 1.00 1.00 1.00 30
weighted avg 1.00 1.00 1.00 30
[[10 0 0]
[ 0 9 0]
[ 0 0 11]]
...