K-近邻分类算法
1. 概述
k近邻算法采用测量不同特征值之间的距离方法来进行分类。
1.1 优点
- 精度高
- 对异常值不敏感
- 无数据输入假定
1.2 缺点
- 计算复杂度高
- 空间复杂度高
1.3 数据适用范围
数值型与标称型数据
2. 工作原理
对于一个训练样本集来说,每个数据都存在标签(也就是说我们知道每一个数据与所属分类对应的关系)。
当我们输入没有标签的新数据后,将新数据的每个特征与样本集中的数据对应特征进行比较,然后算法提取样本集中特征最相似的数据的分类标签。
对于每个训练样本,算法首先将其与所有训练样本进行距离测量,然后按照距离从小到大的顺序排列,最近的k个训练样本就是k近邻。
3. 数学实现
输入:训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
⋅
⋅
⋅
(
x
N
,
y
N
)
}
T=\{(x_1,y_1),(x_2,y_2),···(x_N,y_N)\}
T={(x1,y1),(x2,y2),⋅⋅⋅(xN,yN)}
其中,
x
i
∈
χ
=
R
n
x_i\in\chi=R^n
xi∈χ=Rn ,
y
i
∈
Y
=
{
c
1
,
c
2
,
⋅
⋅
⋅
,
c
K
}
y_i\in Y=\{c_1,c_2,···,c_K\}
yi∈Y={c1,c2,⋅⋅⋅,cK}为实例的类别,
i
=
1
,
2
,
⋅
⋅
⋅
N
i=1,2,···N
i=1,2,⋅⋅⋅N;实例特征向量
x
x
x
R
n
R^n
Rn为特征空间
输出:实例x所属的类y。
-
- 根据给定的距离度量,在训练集 T T T中找出与 x x x最近邻的 k k k个点,涵盖这 k k k个点的 x x x的领域记作 N k ( x ) N_k(x) Nk(x)。
-
- 在 N k ( x ) N_k(x) Nk(x)中根据分类决策规则(如多数表决)决定 x x x的类别 y y y。
y
=
a
r
g
m
a
x
c
j
∑
x
i
∈
N
k
(
x
)
I
(
y
i
=
c
j
)
,
i
=
1
,
2
,
3
,
⋅
⋅
⋅
,
N
;
j
=
1
,
2
,
⋅
⋅
⋅
,
K
y=argmax_{cj}\sum_{x_i\in N_k(x)}I(y_i=c_j),i=1,2,3,···,N;j=1,2,···,K
y=argmaxcjxi∈Nk(x)∑I(yi=cj),i=1,2,3,⋅⋅⋅,N;j=1,2,⋅⋅⋅,K
式中
I
I
I为指示函数,即当
y
i
=
c
j
y_i=c_j
yi=cj时
I
I
I为
1
1
1,否则
I
I
I为0.
在
k
=
1
k=1
k=1时称为最近邻算法,k近邻法没有显式的学习过程。
3.1 举个简单例子理解一下
假设需要我们分辨一部电影是动作片还是爱情片,直观的感受就是动作片打斗镜头很多,爱情片亲吻镜头很多,但是现实电影里,爱情片也有打斗,动作片也有亲吻,不能单一的靠是否有亲吻或者是否有打斗镜头来区别一部电影。
所以我们对于一部电影给出两个特征:打斗镜头数、接吻镜头数,以及两个类型:爱情片、动作片,对于样本数据集如下表:
电影名称 | 打斗镜头数 | 接吻镜头数 | 类型 |
---|---|---|---|
电影1 | 3 | 104 | 爱情片 |
电影2 | 2 | 100 | 爱情片 |
电影3 | 1 | 81 | 爱情片 |
电影4 | 101 | 10 | 动作片 |
电影5 | 99 | 5 | 动作片 |
电影6 | 92 | 2 | 动作片 |
这样子的数据就叫做一种结构化的数据
我们现在要判断一个新的数据:
电影名称 | 打斗镜头数 | 接吻镜头数 | 类型 |
---|---|---|---|
电影7 | 18 | 90 | ? |
我们就可以采用KNN来分类了,先把新数据的特征向量 x x x放入训练数据集 T T T中,然后计算 x x x与每个训练数据的距离,然后按照距离从小到大的顺序排列如下: | |||
电影名称 | 与未知电影之间的距离 | ||
:-: | :-: | ||
电影2 | 18.7 | ||
电影3 | 19.2 | ||
电影1 | 20.5 | ||
电影4 | 115.3 | ||
电影5 | 117.4 | ||
电影6 | 118.9 | ||
假设我们取 k k k为4,采用多数表决的方法,前四个有三个原类型是爱情片,所以对未知电影7分类为爱情片。 |
4. 模型建立
模型建立
模型三要素为:距离度量, K K K的大小和分类规则。
距离度量
- 闵可夫斯基距离(Minkowski Distance)
D ( x , y ) = ( ∑ i = 1 m ∣ x i − y i ∣ p ) 1 p D(x,y)=(\sum\limits_{i=1}^m|x_i-y_i|^p)^\frac{1}{p} D(x,y)=(i=1∑m∣xi−yi∣p)p1
其中 p ≥ 1 p\geq 1 p≥1。 - 当 p = 2 p=2 p=2时,是欧式距离。
- 当 p = 1 p=1 p=1时,是曼哈顿距离。
- 当 p = ∞ p=\infty p=∞时,是各个坐标距离的最大值。
k k k的选择
k k k的选择会对结果产生重大影响。
- k k k的值过小,极端情况下 k = 1 k=1 k=1,测试实例只和最接近的一个样本有关,训练误差很小,但是如果这个样本恰好是噪点,预测就会出错,即产生了过拟合。
- 如果 k k k值过大,极端情况 k = n k=n k=n,则会产生欠拟合。
姑通常采用交叉验证法来选取合适的 k k k。
分类规则
k
k
k近邻的分类决策通常是多数表决:由测试样本的
k
k
k个临近样本的多数类决定测试样本的类别。有如下规则:
给定测试样本
x
x
x,其最临近的
k
k
k个训练示例构成的集合
N
k
(
x
)
N_k(x)
Nk(x),分类损失函数为
0
−
1
0-1
0−1型损失,如果涵盖
N
k
(
x
)
N_k(x)
Nk(x)区域的类别为
c
j
c_j
cj,则分类误差率为:
1
k
∑
x
i
∈
N
k
(
x
)
I
{
y
i
≠
c
j
}
=
1
−
1
k
\frac{1}{k}\sum_{x_i\in N_k(x)}I\{y_i\neq c_j\}=1-\frac{1}{k}
k1xi∈Nk(x)∑I{yi=cj}=1−k1
∑
x
i
∈
N
k
(
x
)
I
{
y
i
=
c
j
}
\sum_{x_i\in N_k(x)}I\{y_i=c_j\}
xi∈Nk(x)∑I{yi=cj}
要使得分类误差率最小,就是要使
∑
x
i
∈
N
k
(
x
)
I
{
y
i
=
c
j
}
\sum_{x_i\in N_k(x)}I\{y_i=c_j\}
∑xi∈Nk(x)I{yi=cj}最大,所以多数表决规则等价于误分类绿最小。
4. 一般流程
- 收集数据:任何适用的方法
- 准备数据:数据预处理阶段,距离计算所需要的数值,最好是结构化的数据格式
- 分析数据:任何适用的分析数据方法
- 训练算法:由于KNN没有显式的学习过程,所以不需要训练过程,只需要给定训练数据和测试数据即可
- 测试算法:计算错误率
- 使用算法:使用即使预测新数据并完成分类任务