AI 이론/Classification (supervised)

[머신러닝] K-Nearest Neighbor (K-NN)

jasonshin 2021. 11. 24. 17:59

다음처럼 카테고리가 레이블링 되어 있는 데이터가 존재합니다.

새로운 데이터가 생겼을때, 이를 어디로 분류해야 할까요?

왜 빨간색으로 분류를 했을까요.

KNN 알고리즘

내 주위에 몇개의 이웃을 확인해 볼것인가를 결정한다. => K

# K를 하이퍼 파라미터(hyper parameter)라고 한다. 
# : 우리(사람)가 결정해줘야 하는 파라미터(항목)

새로운 데이터가 발생 시, Euclidean distance 에 의해서, 가장 가까운 K 개의 이웃을 택한다.

K 개의 이웃의 카테고리를 확인한다.

카테고리의 숫자가 많은 쪽으로, 새로운 데이터의 카테고리를 정해버린다.

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()

X = scaler.fit_transform(X)

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=3)

 

# KNN 으로 모델링

from sklearn.neighbors import KNeighborsClassifier

classifier = KNeighborsClassifier(n_neighbors=5)

classifier.fit(X_train, y_train)

KNeighborsClassifier()

 

# 검증

y_pred = classifier.predict(X_test)

y_test

y_pred

from sklearn.metrics import confusion_matrix, accuracy_score

cm = confusion_matrix(y_test, y_pred)

cm

array([[50,  5],
       [ 3, 22]], dtype=int64)

accuracy_score(y_test, y_pred)

0.9
 
sb.heatmap(data=cm, annot=True, cmap='RdPu', linewidths=0.5)
plt.show()

 

 

반응형