数据挖掘笔记技术篇- Chapter5 分类算法 KNN

720 阅读3分钟

根据相对距离测量构建分类器

其中,最具代表性的就是KNN算法

参考:《统计学习原理 李航》

1.KNN算法简介

数据集:   T=[(x1,y1),(x2,y2),...,(xn,yn)]T={[(x_1,y_1),(x_2,y_2),...,(x_n,y_n)]}

其中 xiXRnx_i \in \mathcal{X} \in \mathbb{R}^n 为实例的特征向量, yiY=[c1,c2,...,cN] y_i \in \mathcal{Y}=[c_1,c_2,...,c_N]为实例的类别,i=1,2,...,Ni=1,2,...,N

输出: 实例xx所属的类yy.

  • 根据给定的距离矢量,在训练集TT中找到与xx最邻近的k个点,涵盖这kk个点的xx的邻域记做Nk(x)N_k(x)
  • Nk(x)N_k(x)中根据分类决策规则决定xx的类别yy;

模型

在k近邻法中,当训练集、距离度量(如欧氏距离〉、k值及分类决策规则(如多数表决〕确定后,对于任何一个新的输入实例,它所属的类唯一地确定。这相当于根据上述要素将特征空间划分为一些子空间,确定于空间里的每个点所属的类,这一事实从最近邻算法中可以看得很清楚。

特征空间中,对每个训练实例点xx,距离该点比其他点更近的所有点组成一个区域,叫作单元(ce11)。每个训练实例点拥有一个单元,所有训练实例点的单元构成对特征空间的个划分。最近邻法将实例xix_i的类yy,作为其单元中所有点 的类标记(class label)。这样,每个单元的实例点的类别是确定的。

距离度量

对于一个特征空间,两个实例点的距离是两个实例点相似程度的反映。

一般使用的是欧式距离,当然也有LpL_p距离及Minkowski距离。

k值的选择

k值的选择会对k近邻法的结果产生重大影响。

如果选择较小的k值,就相当于用较小的邻域中的训练实例进行预测,"学习"的近似误差会减小,只有与输入实例较近的(相似的)训练实例才会对预测结果起作用。但缺点是"学习"的估计误差会增大,预测结果会对近邻的实例点非常敏感,如果邻近的实例点恰巧是噪声,预测就会出错。换句话说,k值的减小就意味着整体模型变得复杂,容易发生过拟合.

如果选择较大的k值,就相当于用较大邻域中的训练实例进行预测,其优点是可以减少学习的估计误差,但缺点是学习的近似误差会增大。这时与输入实例较远的〈不相似的〉训练实例也会对预测起作用,使预测发生错误k值的增大就意味着整体的模型变得简单.

在应用中,k值一般取一个比较小的数值。通常采用交叉验证法来选取最优的k值。

分类规则

KNN的分类规则即为少数服从多数的规则

损失函数为0-1损失函数,分类规则为:

f:Rnc1,c2,...,ckf:R^n \rightarrow {c_1,c_2,...,c_k}

则对于相邻k个训练实例点构成的集合NN,误差(误分类)率是:

1kxiNk(x)I(yicj)=11kxiNk(x)I(yi=cj)\frac{1}{k} \sum_{x_i \in N_k(x)}I(y_i \neq c_j) = 1-\frac{1}{k} \sum_{x_i \in N_k(x)}I(y_i =c_j)

要使误分类率最小,那么就是要求正确的概率最大,所以少数服从多数的规则正好可以满足经验风险最小化。

kd树

实现KNN时,主要是考虑的问题时如何对训练数据进行快速K近邻搜索,如果特征空间的维数大或者训练数据容量大时,那么数据存储就是一个大问题。KNN最简单的实现方法是线性扫描,这时当数据集很大,计算就非常地耗时。为了提高这种搜索效率,使用特殊地结构进行存储训练数据——kd树(kd tree)。kd树是一种对k维空间中的点进行存储以便于对其进行快速搜索的树形数据结构。实质上,kd树是一种二叉树,表示对k维空间的一个划分。