반응형
k-최근접 이웃(k- Nearest Neighbors ; KNN)
학습 데이터에서 가장 유사한 k개의 특징을 찾아 타겟을 추정하는 것입니다. 게으른 학습기(lazy learner)로, 비모수 모델(nonparametric model)에 해당됩니다.
- 게으른 학습기 : 학습 데이터에서 미리 함수를 학습하지 않고, 새로운 입력이 주어지면 학습 데이터를 활용하는 학습기입니다.
- 비모수 모델 : 모델의 학습 매개변수의 개수가 정해져 있지 않은 모델입니다.
KNN 분별기(KNN Classifier)
KNN 분별기의 동작은 KNN의 초매개변수(숫자k, 거리측정 함수)에 의해서 결정될 수도 있고, 학습 데이터 중에서 입력 특징과 가장 가까운 k개를 검출해서 동작할수도 있습니다. 최근접 이웃 중 다수결로 투표하여 클래스를 결정하게 됩니다.
거리 측정 함수의 종류
- 유클리디안 거리
- 맨해튼 거리
- 민코스키 거리(Minkowski distance)
- 마할라노비스 거리 : 특징 간의 공분산을 고려하여 측정하는 거리입니다.
KNN 분별기의 구현
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
def plot_decision_boundary(model,X,y):
x_min, x_max = X[:,0].min() - .5, X[:,0].max() +.5
y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
h = .02
xx,yy = np.meshgrid(np.arange(x_min,x_max,h), np.arange(y_min,y_max,h))
Z = model.predict(np.c_[xx.ravel(),yy.ravel()])
Z = Z.reshape(xx.shape)
plt.pcolormesh(xx,yy,Z,shading = 'nearest',cmap=plt.cm.Paired)
plt.scatter(X[:,0],X[:,1],c=y,edgecolors='k',cmap=plt.cm.Paired)
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
plt.xticks(())
plt.yticks(())
dataset = load_iris()
data = dataset['data']
x = data[:,:2]
y = dataset['target']
model = KNeighborsClassifier(n_neighbors=1)
model.fit(x,y)
plt.figure(figsize=(6,5))
plot_decision_boundary(model,x,y)
plt.title('KNN Classifier with k=1')
plt.show()
model = KNeighborsClassifier(n_neighbors=5)
model.fit(x,y)
plot_decision_boundary(model,x,y)
plt.title('KNN Classifier with k=5')
plt.show()
KNN 회귀 (KNN Regression)
학습 데이터 중에서 입력 특징과 가장 가까운 k개를 검출합니다. 최근접이웃을 가중합하여 타겟을 추정하게 됩니다.
KNN 회귀의 구현
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_boston
from sklearn.neighbors import KNeighborsRegressor
dataset = load_boston()
data = dataset['data']
x = np.reshape(data[:,12],(-1,1)) #LSTAT feature
y = dataset['target']
model = KNeighborsRegressor(n_neighbors=11)
model.fit(x,y)
plt.figure(figsize=(6,5))
plt.scatter(x[:,0],y)
x_test = np.reshape(np.linspace(0.0,40.0,50),(-1,1))
pred_y = model.predict(x_test)
plt.plot(x_test,pred_y,'r-')
plt.show()
반응형
'머신러닝' 카테고리의 다른 글
지도학습 모델 - 서포트 벡터 머신(Support Vector Machine ; SVM) (0) | 2022.08.19 |
---|---|
지도 학습 모델 - 의사결정나무(Decision Tree) (0) | 2022.08.19 |
회귀 모델 - 로지스틱 회귀 모델 (0) | 2022.08.19 |
회귀 모델 - 규제 선형 회귀 모델 (0) | 2022.08.19 |
머신 러닝 - 회귀 분석 (0) | 2022.08.19 |
댓글