关于k-NN算法的总结及个人理解

k-NN算法的三要素:k值的选择,距离度量,分类决策规则

k值的选择
k值选的过小,训练误差会很小,但测试误差会对应增加,这是明显的过拟合现象。k值选的过大,训练误差过大,测试误差也会很大,明显的欠拟合现象。
K近邻法不具有显示的学习过程,也就是没有显示的训练过程,怎么会有训练误差呢?其实从原理上还是挺容易理解的,K近邻法确定后k值大小,距离度量和分类决策之后,数据集本身就可以使用该模型进行误差的计算(这便是训练误差),而测试误差便是加入新的测试数据来估计该不用训练(只用设置超参数)的模型。
当K很小的时候,训练结果对临近点的实例点非常敏感,K越小,结果越是敏感,当K取1时,训练误差下降到0,但测试误差却会反向增加(因为模型容量过高,表达能力太高),则便是K值选太小会产生过拟合的原因。
k值选的过大,相当于用较大领域中的训练实例来进行预测。过大的话,这时与输入实例较远(不相近的)训练实例也会对测设起到预测作用,从而是预测发生错误,个人感觉是因为数据规模不够大(如果数据规模大,K值即使大页不会选择到较远的点),我便认为这是一种数据不够而导致的欠拟合现象,如果理解有误还望见谅。
K值的选择办法:通常采用交叉验证法来选取最优的K值。

距离度量
个人感觉对应于机器学习中损失函数的味道(但又不能直接说是损失函数,因为分类决策规则也有损失函数的感觉)。简单的理解就是如何选择样本之间的“距离”,从而使数据样本集能按自己的标签更好的分类。从而使测试样本能根据这个距离很好的正确预测自己的结果。
分类决策规则
目前多数都会采用多数表决,从数学上分析,多数表决规则等价于经验风险最小化。具体正面可以参看《统计学习方法》中的证明过程。
kd树
Kd树是为了减少计算距离的次数,提高搜索速度。

你可能感兴趣的:(机器学习)