统计学习方法 笔记<第三章 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汗)。
好吧,我承认,我又想偷懒了,毕竟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汗)。
相关文章推荐
- 统计学习方法 笔记<第二章 感知机>
- 统计学习方法 笔记<第一章>
- <<深入Java虚拟机>>-第三章-垃圾收集器与内存分配策略-学习笔记
- <Xen虚拟化技术>阅读笔记---第三章 Xen信息页
- <黑客免杀攻防>第三章 免杀与特征码 阅读笔记
- <统计学习方法>6 隐马尔可夫模型
- <第三章>Node 学习笔记 |>URL网站解析<|
- <深入理解C指针>学习笔记和总结 第三章 指针和函数
- oracle开发之<<SQL Cookbook>>学习笔记整理:第三章 操作多个表
- <Head First Java>学习笔记--第三章:primitive主数据类型和引用
- <<Ruby元编程>>第三章笔记
- <java与模块>第三章面向对象设计原则笔记
- 统计学习方法笔记,第三章,k近邻法
- 读<.net大局观>笔记(一)
- 一个小网工的笔记<7>
- List<object>数组笔记一
- 读王维树老师的笔记&lt;&lt;程序员的12条经营分享&gt;&gt;感
- Nullable<T>学习笔记
- 卡卡笔记之Linux基础命令---<貳>
- 【应用篇】WCF学习笔记(二):ServiceContract、DataContract <第一部分>