一、什么是K-近邻算法?
K近邻算法(K-Nearest Neighbors,简称KNN)是一种基本的分类和回归算法。它的基本原理是通过测量样本之间的距离来对未知样本进行分类或预测。KNN算法被归类为一种“懒惰学习”(lazy learning)算法,因为它没有显式地从训练数据中学习模型,而是在需要进行分类或预测时才对训练数据进行计算。
二、K-近邻算法的工作流程
- 准备训练数据集,包括输入特征和对应的标签 ;
- 选择一个合适的距离度量方法,如欧氏距离或曼哈顿距离;
- 欧式距离:
其中, n表示样本向量的维度,xi和yi分别表示向量x和向量y在第i维上的取值。 - 曼哈顿距离:
其中,n表示样本向量的维度,xi和yi分别表示向量x和向量y在第i维上的取值。
- 欧式距离:
- 对于一个未知样本,计算它与训练集中每个样本的距离 ;
- 根据选定的K值,选择距离最近的K个样本 ;
- 根据这K个样本的标签,通过多数投票的方式确定未知样本的类别(对于分类问题)或计算平均值(对于回归问题) 。
三、“连续属性”和“离散属性”的距离计算
我们常将属性划分为“连续属性”和“离散属性”,前者在定义域上有无穷多个可能的取值,后者在定义域上是有限个取值。
- 若属性值之间存在有序关系,则可以将其转化为连续值,例如:身高属性“高”、“中”、“矮”,可转化为{1、0.5、0}。
- 闵可夫斯基距离可以用于有序属性。
- 若属性值之间不存在序关系,则通常将其转化为向量的形式,例如:性别属性“男”、“女”,可转化为{(1,0) , (0,1)}
四、K值怎么选择?
- 举例说明
- K值过小:
- 容易受到异常点的影响:假如K值取1,但是距离最小的那个数据是异常数据,那么预测就会发生错误。
- 选择较小的K值,就相当于用较小的领域中的训练实例进行预测,“学习”近似误差会减小,但“学习”估计误差会增大。换句话说,K值的减小就意味着整体模型变得复杂,容易发生过拟合。
- K值过大:
- 受到样本均衡的问题:假如K值取6,则距离最小的6个值,有三个属于喜剧片,有三个属于动作片。此时,预测就会发生错误。
- 选择较大的K值,就相当于用较大领域中的训练实例进行预测,优点是可以减少“学习”估计误差,但会增大“学习”近似误差。这时候,与输入实例较远(不相似的)训练实例也会对预测器作用,使预测发生错误,且K值得增大就意味着整体的模型变得简单。
- 近似误差:
- 对现有训练集的训练误差,关注训练集
- 如果近似误差过小可能会出现过拟合的现象,对现有的训练集能有很好的预测,但是对未知的测试样本将会出现较大偏差的预测
- 模型本身不是最接近最佳模型
- 估计误差:
- 可以理解为对测试集的测试误差,关注测试集
- 估计误差小说明对未知数据的预测能力好
- 模型本身最接近最佳模型
在实际应用中,K值一般取一个比较小的数值,例如采用交叉验证法(简单来说,就是把训练数据在分成两组:训练集和测试集)来选择最优的K值。