KNN
knn是一种基本的分类和回归方法。
基本思想:假设给定一个训练数据集,其中的实例类别已定。分类时,对新的实例,根据其k个最近邻的训练实例的类别,通过多数表决等方式进行预测。
knn三要素:
- k值的选择:交叉验证法来选择k值
当k值较小时,”学习“的近似误差会减小,估计误差会增大,预测结果对近邻的实例点非常敏感,如果该点恰好为噪声,则预测会出错。k值越小,模型整体的复杂度越高,容易发生过拟合 - 距离度量:闵可夫斯基距离,欧氏距离,曼哈顿距离,最大距离
- 分类决策规则:
如果涵盖 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 ∑ x i ∈ N k ( x ) I ( y i = c j ) \frac{1}{k}\sum_{x_{i}\in N_{k}(x)}I(y_{i}\ne c_{j})=1-\frac{1}{k}\sum_{x_{i}\in N_{k}(x)}I(y_{i}= c_{j}) k1xi∈Nk(x)∑I(yi=cj)=1−k1xi∈Nk(x)∑I(yi=cj)
多数表决意味着经验风险最小化
优点:算法简单,直观
算法:
输入:训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
⋯
,
(
x
N
,
y
N
)
}
T=\{(x_{1},y_{1}),(x_{2},y_{2}),\cdots,(x_{N},y_{N})\}
T={(x1,y1),(x2,y2),⋯,(xN,yN)}其中,
x
i
∈
X
⊆
R
n
x_{i}\in \mathcal{X} \subseteq R^{n}
xi∈X⊆Rn为实例的特征向量,
y
i
∈
Y
=
{
c
1
,
c
2
,
⋯
,
c
K
}
y_{i}\in Y=\{c_{1},c_{2},\cdots,c_{K}\}
yi∈Y={c1,c2,⋯,cK}为实例的类别,
i
=
1
,
2
,
⋯
,
N
i=1,2,\cdots, N
i=1,2,⋯,N
输出:实例
x
x
x所属的类
y
y
y
(1)根据给定的距离度量,在训练集
T
T
T中找出与
x
x
x最近邻的
k
k
k个点,涵盖
k
k
k个点的
x
x
x的领域记作
N
k
(
x
)
N_{k}(x)
Nk(x);
(2)在
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
,
⋯
,
N
,
j
=
1
,
2
,
⋯
,
K
y = \underset{c_{j}}{argmax}\sum_{x_{i}\in N_{k}(x)}I(y_{i}=c_{j}),i=1,2,\cdots,N,j=1,2,\cdots,K
y=cjargmaxxi∈Nk(x)∑I(yi=cj),i=1,2,⋯,N,j=1,2,⋯,K
I
I
I为指示函数,当
y
i
=
c
j
y_{i}=c_{j}
yi=cj时为1,否则为0
当 k = 1 k=1 k=1时,为最近邻算法,对于输入的实例点 x x x,将训练数据集中与 x x x最近邻点的类作为 x x x的类
k近邻是线性扫描,需要计算输入实例与每一个训练实例的距离,当训练数据集很大时,计算非常耗时,因此考虑kd树来存储数据
kd树
kd树是是一种对k维空间中的实例点进行存储以便于对其进行快速检索的树形数据结构。是二叉树,对k维空间的一个划分。构造kd树等价于不断地用垂直于坐标轴的超平面对k维空间划分,构成一系列的k维超矩形区域,其中kd树的每个结点对于一个矩形区域。
构造kd树方法如下:
构造根节点,使根节点对应于k维空间中包含所有实例点的超矩形区域,在超矩形区域(结点)上选择一个坐标轴和在此坐标轴上的一个切分点,确定一个超平面,这个超平面通过选择的切分点垂直于选定的坐标轴。通过以上递归的方法,不断对k维空间进行切分,这个过程直至没有实例时终止(终止时的结点为叶结点),将实例保存在相应的叶结点上
搜索kd树:
给定一个目标点,搜索其最近邻。首先找到包含目标点的叶结点;然后从该叶结点依次回退到父节点;不断查找与目标点最近邻的结点,当确定不可能存在更近的叶结点时终止。