K-近邻算法

419 阅读4分钟

k近邻法是一种基本分类与回归方法。K-近邻算法是最简单的分类器,没有显式的学习过程或训练过程,是懒惰学习(Lazy Learning)。当对数据的分布只有很少或者没有任何先验知识时,K 近邻算法是一个不错的选择。

k近邻法的输入为实例的特征向量,对应于特征空间的点;输出为实例的类别。 对k近邻法的通俗理解:k近邻法在对一个新的数据点A进行分类的时候,需要以A为中心,寻找距离A最近的k个点,这k个点是由训练集给出的,然后我们计算这k个点里面数量最多的类别,作为A的类别。

k值的选择、距离度量及分类决策规则是k近邻法的三个基本要素。

k近邻模型

KNN中,当训练集、距离度量、k值及分类决策规则确定后,对于任何一个新的输入实例,它所属的类唯一地确定。这相当于根据上述要素将特征空间划分为一些子空间,确定子空间里的每个点所属的类。

单元(cell):特征空间中对每个训练实例点x,距离该点比其他点更近的所有点组成的一个区域叫做单元。

类标记( classlabel):每个训练实例点拥有一个单元,所有训练实例点的单元构成对特征空间的一个划分。最近邻法将实例x_i的类y_i作为其单元中所有点的类标记( classlabel)。这样,每个单元的实例点的类别是确定的。

距离度量

特征空间中两个实例点之间的距离是二者相似程度的反应

Snipaste_2023-02-10_14-28-50.png

Snipaste_2023-02-10_14-29-24.png

k值的选择

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

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

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

特例:k = 1(最近邻算法)

此时,KNN的泛化错误率上界为贝叶斯最优分类器错误率的两倍(证明见最后)

特例:k = N

K近邻算法对每一个测试样本的预测结果将会变成一样(属于训练样例中最多的类)。

k值选择

一般k值较小。 k通常取奇数,避免产生相等占比的情况。 往往需要通过**交叉验证(Cross Validation)**等方法评估模型在不同取值下的性能,进而确定具体问题的K值。

分类决策规则

一般都是多数表决规则(majority voting rule),即把k个邻近的多数类别作为测试样本的类别

kNN的完整实现

(1)确定K的大小和距离计算方法

(2)从训练样本中得到K个与测试最相似的样本

​ ①计算测试数据与各个训练数据之间的距离;

​ ②按照距离的递增关系进行排序;

​ ③选取距离最小的K个点;

​ ④确定前K个点所在类别的出现频率;

​ ⑤返回前K个点中出现频率最高的类别作为测试数据的预测分类。

(3)根据K个组相似样本的类别,通过投票的方式来确定测试样本的类别

相关资料来源:李航《统计学习方法》、CSDN