
“모르는 애가 있으면, 가까운 애들(k명)한테 물어보고 다수결로 결정하자!”
어떤 장소에 피자 집을 새로 열고 싶다고 가정,
보통은 유클리디안 거리 사용 (유클리드 거리):

📌 그래서 스케일링이 중요함!
어떤 feature는 01인데 어떤 feature는 01000이면 거리 계산이 왜곡됨!
n_neighbors: 몇 명한테 물어볼 거냐? (k 값)weights:'uniform' = 모두 동일한 가중치'distance' = 가까운 애들한테 더 큰 영향 부여metric: 거리 계산 방식 (보통은 'minkowski', 그 안에 유클리디안 포함)| 문제점 | 설명 |
|---|---|
| 느림 | 새로운 데이터 들어올 때마다 모든 거리 계산해야 됨 (훈련은 빠름) |
| 차원의 저주 | Feature가 많아지면 거리 계산이 의미 없어짐 |
| 이상치 영향 | 주변에 이상치가 있으면 결과에 방해될 수 있음 |
이번엔 오랜만에 iris 데이터로 실습~
iris 데이터 불러오고, data split:
from sklearn.datasets import load_iris
iris = load_iris()
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=13, stratify=iris.target)
kNeighborsClassifier 불러오고 fit:
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
accuracy 확인:
from sklearn.metrics import accuracy_score
pred = knn.predict(X_test)
accuracy_score(y_test, pred)

96%. 간단한 데이터여서 그런지 n_neighbors=3을 줘도 acc가 동일했다.
confusion matrix와 classification report로 간단한 성과 확인:
from sklearn.metrics import confusion_matrix, classification_report
print(confusion_matrix(y_test, pred))
print(classification_report(y_test, pred))

다시, confusion matrix의 형태는,
row - 실제 라벨 / 열 - 예측값
끄읕. 😄
(이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.)