现在我们有一个训练数据集,对新来的实例,找到训练数据集中离这个新实例最近的K个实例,统计这K个实例的类别,然后利用多数表决或者其他策略预测新实例的类别
这就是K近邻算法的基本思想。
K近邻的这种分类方式其实相当于利用训练数据集把特征向量空间进行划分,并且把这个划分好的空间作为分类模型。
K近邻算法有三个基本要素,需要重点考虑,即
1.K值的选择
2.距离度量的选择
3.分类决策规则
具体的:
1. K值的选择
K值的选择对K近邻算法的结果影响比较大。
K=N (训练实例总个数)。这个时候输入新实例后,都会简单的预测它属于训练实例中最多的类,模型过于简单,忽略训练实例中大量的有用信息。不可取。
K选择较小的值:
这个时候与输入实例比较近(相似的)的训练实例才会对预测结果起作用。缺点就是预测结果对近邻的实例点非常敏感,假如邻近的点恰好是噪音的话,预测就会出错。K值得减小意味着整体模型变复杂,容易发生过拟合。(邻近的点比较少,需要考虑多个类。)
K选择较大的值:
这个时候与输入实例较远的(不相似)训练实例也会对预测起作用,使预测产生错误。K值得增大意味着整体模型变得简单.(邻近的点比较多,需要考虑的类较少)。
在实际应用中K值一般选取一个较小的值。通常采用交叉验证法来选取最优的K值。
2.距离度量的选择
各种距离的应用场景简单概括为:
闵可夫斯基距离:P值不同
空间:欧氏距离(P=2)
路径:曼哈顿距离(P=1)
国际象棋:切比雪夫距离(P->无穷)
加权:标准化欧氏距离
排除量纲和依存:马氏距离
向量差距:夹角余弦
编码差别:汉明距离
集合近似度:杰卡德类似系数与距离
相关:相关系数与相关距离
3.分类决策规则
K近邻的分类决策规则往往是多数表决。也就是找到和输入实例最近的K个训练实例,这K个训练实例中的多数类别作为输入实例的类。
多数表决规则等价于经验风险最小化:
证:
如果分类的损失函数为0-1损失函数,误分类的概率为P(Yf(x))=1-P(y=f(x)),对于给定的实例x,其最近邻的k训练实例点构成集合Nk(x),如果涵盖Nk(x)的区域的类别为Cj,那么误分类率为:
要使误分类率最小
就要使
最大,即多数表决规则等价于经验风险最小化。
经验风险最小化:我们利用已知的经验数据(训练数据)来计算目标风险函数(损失函数的期望值),调整参数使得经验风险逐渐逼近理想的期望风险的最小值,这一过程就是经验风险最小化。