KNN:k-Nearest Neighbour,分类算法中最简单的算法之一,其核心思想是如果离某一个样本最近的k个样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。KNN不但可以预测分类,还可以做回归分析(预测具体的值)。
有 N 个已知分类结果的样本点,对新记录 r 使用KNN将其分类的步骤:
Step1:确定 k 值,确定计算距离的公式,比如欧氏距离
Step2:计算 r 和其他样本点之间的距离
d
i
r
d_{ir}
dir,其中
i
∈
(
1
,
N
)
i∈(1,N)
i∈(1,N)
Step3:找到目前和 r 最接近的k个样本
Step4:将这 k 个样本中最多归属类别的分类标签赋予新记录 r,分类结束
常见的距离计算公式:
欧氏距离:
d
i
j
=
(
x
i
−
x
j
)
2
+
(
y
i
−
y
j
)
2
d_{ij}=\sqrt{(x_i-x_j)^2+(y_i-y_j)^2}
dij=(xi−xj)2+(yi−yj)2
曼哈顿距离:
d
i
j
=
∣
x
i
−
x
j
∣
+
∣
y
i
−
y
j
∣
d_{ij}=|x_i-x_j|+|y_i-y_j|
dij=∣xi−xj∣+∣yi−yj∣
余弦相似度:
d
i
j
=
c
o
s
(
O
A
→
,
O
B
→
)
d_{ij}=cos(\overrightarrow{OA},\overrightarrow{OB})
dij=cos(OA,OB)
K 的取值不宜过大,一般使用交叉验证来确定,本例中选择 k=10;
使用公式
d
i
j
=
(
x
i
−
x
j
)
2
+
(
y
i
−
y
j
)
2
d_{ij}=\sqrt{(x_i-x_j)^2+(y_i-y_j)^2}
dij=(xi−xj)2+(yi−yj)2计算 r 和所有样本点的距离;
将得到的距离升序排列,选出其中 k 个最小的距离,作为KNN样本;
统计样本分类,确定 r 的分类。
KNN的优缺点:
- 优点
- 原理简单,容易理解,容易实现
- 重新训练代价较低
- 时间、空间复杂度取决于训练集(一般不算太大)
- 缺点
- KNN属于lazy-learning算法,得到结果的及时性差
- k值对结果影响大(试想一下k=1和k=N的极端情况)
- 不同类记录相差较大时容易误判
- 样本点较多时,计算量较大
- 相对于决策树,结果可解释性不强