이론
자주 사용되는 지도학습 방법 중 하나
훈련 데이터가 라벨값을 가지는지에 따라 두 분류로 나눌 수 있음
지도 학습(supervised learning)
- 정답(입력값에 대한 Label)을 알려 주면서 학습시키는 방식
- EX) 고양이(input) 사진을 입력시키면서 결과가 '고양이(Label)'임을 알려주는 것
- 분류(Classification), 회귀(Regression)
비지도 학습(unsupervised learning)
※ 머신 러닝의 학습 방법은 대표적으로 강화 학습을 포함하여 세 가지로 나눈다.
강화 학습(Reinforcement Learning)
- 머신이 분류한 액션에 대해 보상(reward)를 얻으면서 학습하는 것
- 지도 학습과 같은 Lable이 없음
- 최종 결과를 구하면 그 액션들에 대해 보상과 반성
K-최근접 이웃 학습은 인접한 K개의 샘플을 찾아서, 해당 K개의 정보를 바으로 예측하는 모델
일반적으로는 K개 샘플 중 가장 많이 출현한 클래스를 예측 결과로 보는 투표법을 사용한다.
( 회귀에서 사용될 경우에는 평균 값을 예측치로 보는 평균법을 사용한다. )
K가 1일 때는 범위에 ★이 가장 많으므로, ?를 ★로 판단할 것이고,
K가 3일 때는 ★보다 ◆가 많으므로 ◆로 판단할 것이다.
K-NN은 다른 학습 알고리즘에 비해 명확한 학습 과정이 드러나지 않는데, 이를 게으른 학습(Lazy learning)이라 부른다고 한다.
게으른 학습(Lazy Learning)
- 판별함수를 학습하지 않고, 훈련 데이터 샘플을 보존(저장)함
- 훈련(학습) 시간이 0 이고, 예측 시간이 긺
- 테스트 샘플이 올 때 까지 기다렸다가 받은 뒤에 처리함
열정적 학습(Eager Learning)
- 게으른 학습의 반대
- 샘플을 훈련 단계에서 학습하는 방법
소스코드
K-NN 알고리즘은 sklearn.neighbors - NearestNeighbors 에 구현되어 있다.
여기서 algorithm으로는 'ball_tree', 'kd_tree'와 같은 알고리즘을 사용할 수 있고, 아무 값도 주지 않으면 (auto) 가장 적합한 알고리즘으로 결정하려 한다.
코드 출처는 맨 하단 scikit-lean.org
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import neighbors, datasets, model_selection
from matplotlib.colors import ListedColormap
n_neighbors = 15
iris = datasets.load_iris() # load test dataset
# we only take the first two features. We could avoid this ugly
# slicing by using a two-dim dataset
X = iris.data[:, :2]
y = iris.target
h = .01 # step size in the mesh
# Create color maps
cmap_light = ListedColormap(['lemonchiffon', 'paleturquoise', 'lavenderblush'])
cmap_bold = ['yellowgreen', 'lightcoral', 'darkblue']
for weights in ['uniform', 'distance']:
# we create an instance of Neighbours Classifier and fit the data.
clf = neighbors.KNeighborsClassifier(n_neighbors, weights=weights)
clf.fit(X, y)
# Plot the decision boundary. For that, we will assign a color to each
# point in the mesh [x_min, x_max]x[y_min, y_max].
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
np.arange(y_min, y_max, h))
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
# Put the result into a color plot
Z = Z.reshape(xx.shape)
plt.figure(figsize=(8, 6))
plt.contourf(xx, yy, Z, cmap=cmap_light)
# Plot also the training points
sns.scatterplot(x=X[:, 0], y=X[:, 1], hue=iris.target_names[y],
palette=cmap_bold, alpha=1.0)
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.title("3-Class classification (k = %i, weights = '%s')"
% (n_neighbors, weights))
plt.xlabel(iris.feature_names[0])
plt.ylabel(iris.feature_names[1])
plt.show()
|
cs |
참고
(소스코드)
'인공지능' 카테고리의 다른 글
의사결정트리 (decision tree) (0) | 2021.01.26 |
---|