您的位置:首页 > 其它

统计学习方法 笔记<第三章 k近邻法>

2014-08-28 15:37 309 查看
第三章 k近邻法

  好吧,我承认,我又想偷懒了,毕竟k近邻这个东西理解起来是完全没有困难的(小学生么。。。),然后看着看着就没有动力了,不过还好基本坚持翻完了,之后又看了《机器学习实战》上两个k近邻的例子(一个婚介网站的,一个手写识别的),挺有意思的,也不难理解。感觉书本内容什么的还是比较有局限性的。

  之后看了书本上的kd树,看看还觉得不错,但总觉得有些偏离学习主题了(说好的统计机器学习呢,怎么变成数据结构了,确定没走错教室么? ?_?)。实在懒得写,索性盗一下链接:http://blog.csdn.net/v_july_v/article/details/8203674/,里面涵盖了k近邻的基本概念,kd树的构造,添加,删除等,还有kd树的扩展BBF算法,SIFT等(大神,请收下我的膝盖吧%>_<%)。

  还是把一些基本的东西写写吧(⊙﹏⊙b汗)。

  k近邻,就是我们经常说的KNN算法,这个算法基本是不需要训练过程的,也就是说,拿到训练数据,建立基本模型,然后...就可以用了。训练数据集中的每一个实例,都包含一个特征向量以及一个类别标签。

  方法:建立好模型后,对于一个待分类的未知数据,我们利用一个距离度量函数,找出离它最近的k个点,这k个点属于哪个类别多,待分类点就属于哪个类别(少数服从多数嘛,基本民主法则)。

  1.模型:实际上就是利用类别标签,把特征向量所在的特征空间划分为N个子空间(或者叫单元 cell,N是类别总数)。

  2.距离度量函数:

  


  基本的就是这个了,当p=1时,就是曼哈顿距离;当p=2时,就是欧氏距离;当p→∞时,就是切比雪夫距离 。还有就是汉明距离,夹角余弦距离,皮尔逊距离之类的。

  3.K值的选择。大了,容易分类错误(模型过于简单化,分类易分到热门类中);小了,容易过拟合(邻居数据影响非常大,如果邻居是渣渣数据,那就完了...),引用一段话:

    如果选择较小的K值,就相当于用较小的领域中的训练实例进行预测,“学习”近似误差会减小,只有与输入实例较近或相似的训练实例才会对预测结果起作用,与此同时带  来的问题是“学习”的估计误差会增大,换句话说,K值的减小就意味着整体模型变得复杂,容易发生过拟合;

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

    K=N,则完全不足取,因为此时无论输入实例是什么,都只是简单的预测它属于在训练实例中最多的累,模型过于简单,忽略了训练实例中大量有用信息。

    在实际应用中,K值一般取一个比较小的数值,例如采用交叉验证法(简单来说,就是一部分样本做训练集,一部分做测试集)来选择最优的K值。

  kd树:这部分也不想写了,引用博客中讲的非常清楚了,盗几张觉得有意思的图:

  

    


  左边是正常情况下kd树查找最近邻事的开销,右边是最差情况下,需要遍历几乎所有点了(⊙﹏⊙b汗)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: