머신러닝

머신러닝(11) K-NN으로 데이터를 예측해보자

개발연습자1 2022. 12. 2. 15:45

K-NN은 머신러닝 기법중 하나이다. K-NN이 무엇인지 알아보도록 하자

 

K-NN은 이렇게 작동한다.

 

그래프 상에 값이 2개로 나오는 점들이 집합을 이루고 있다. 이 그래프에 새로운 데이터가 들어올때 어느 모임에 속하게 되는지 알아맞추는게 이번 인공지능의 목표이다. 그럼 어떻게 알아맞출까? 바로 새로운 데이터점과 좀더 가까운 모임에 속하게 된다고 예측하게 된다. 언뜻 보면 Logistic Regression을 떠올릴수 있겠지만 접근방식이 다른 기법이다.

 

 

 이런식으로 조금이라도 더 가까운곳에 데이터가 속하게 된다.

 

그럼 어떻게 구현할까 알아보자

 

#데이터 프레임 함수

import pandas as pd
import numpy as np

#데이터를 불러온다.
df=pd.read_csv('../data/Social_Network_Ads.csv')
df

 

데이터 전처리 과정은 인공지능 기법에 데이터 전처리 과정이 모두 같으므로 생략한다.

 

#k-NN함수 호출
from sklearn.neighbors import KNeighborsClassifier

#n_neighbors=5는 가장가까운 5개 데이터로 분류(디폴트 기본값도 5)
classifier = KNeighborsClassifier(n_neighbors=5)

classifier.fit(X_train, y_train)

이렇게 뜨면 학습이 된것이다.

 

예측 값과 실제 값은 비교해보자

y_pred = classfier.predict(X_test)

#예측값
y_pred
>>> array([0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1,
          0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0,
          0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1,
          1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0], dtype=int64)

# 분류의 문제이기 때문에 0과 1로 나온다.

#실제값
y_test.values
>>> array([0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1,
           0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0,
           0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1,
           1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0], dtype=int64)

 

 

confusionmatrix값을 내고 시각화 하자

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)

#confusionmatrix값 시각화
import matplotlib.pyplot as plt
import seaborn as sb

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

 

정확도를 도출하자

from sklearn.metrics import accuracy_score

accuracy_score(y_test,y_pred)
>>> 0.9625

96%의 정확도를 갖게 된다.

반응형