data science/machine learning

K-Neighbors Classifier

꼰대코더 2025. 4. 2. 02:04

K-Neighbors Classifier란 분류하고자 하는 샘플(Pt)과 가장 가까운 K개의 이웃들 중 가장 많이 속해있는 클래스를 선택하는 분류기이다.


만약 k=3으로 하면 별은 보라색원에 속하는 것이고(보라색원 2 > 노란색원 1)
만약 k=6으로 하면 별은 노란색원에 속하게 된다   (보라색원 2 < 노란색원 4)

 

 

아래는 IRIS 데이터셋의 샘플

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import classification_report, confusion_matrix
import pandas as pd
import seaborn as sns
import numpy as np

iris = sns.load_dataset('iris')
X_iris = iris.drop(columns=['species'], axis=1)
y_iris = iris['species']

# Split dataset into random train and test subsets:
Xtrain, Xtest, ytrain, ytest = train_test_split(X_iris, y_iris, random_state=1)

# Standardize features by removing mean and scaling to unit variance:
scaler = StandardScaler()
scaler.fit(Xtrain)
Xtrain = scaler.transform(Xtrain)
Xtest = scaler.transform(Xtest)


# Use the KNN classifier to fit data:
classifier = KNeighborsClassifier(n_neighbors=5)
classifier.fit(Xtrain, ytrain)

# Predict y data with classifier:
y_predict = classifier.predict(Xtest)

 

Classifier의 성능을 살펴보자

print(confusion_matrix(ytest, y_predict))
print(classification_report(ytest, y_predict))

 

confusion_matrix 결과 (각 종류에 대해 True Positive 의 결과 수)

 

classification_report 결과

그럼 무작위 데이터로 분류를 해 보자

X_sample = np.array([[5.7, 3.0, 2.2, 1.4]])
X_sample = scaler.transform(X_sample)

y_sample = classifier.predict(X_sample)
print(y_sample)

분류결과로서 ['versicolor'] 가 나왔다.