机器学习PR:k近邻法分类
k近邻法是一种基本分类与回归方法。本章只讨论k近邻分类,回归方法将在随后专题中进行。
它可以进行多类分类,分类时根据在样本集合中其k个最近邻点的类别,通过多数表决等方式进行预测,因此不具有显式的学习过程。其本质是利用训练数据集对特征向量空间进行划分,并作为其分类的模型。k值选择、距离度量以及分类决策规则是其三个基本要素。
一、模型:
特征空间中,对每个训练点,距离该点比其他点更近的所有点组成一个区域(单元),每个训练点拥有一个区域(单元),所有训练点的区域(单元)构成对特征空间的一个划分。最近邻法将该点的类别作为所在单元中所有点的类标记。

二、距离度量
特征空间中两个点的距离反映了两个点的相似程度,可选距离包括Lp距离如欧式距离、曼哈顿距离,以及闵可夫斯基距离等。
三、k值选择
如果k值较小,以为着用较小的邻域中的训练样本进行预测,学习的近似误差会减小,但学习的估计误差会增大,预测结果对近邻点非常敏感。如果近邻点恰巧是噪声,预测就会出错,导致过拟合现象。如果k值较大,相当于用较大的领域中的训练样本进行预测,这样估计误差会减小,但学习的近似误差会增大。在实际应用中,通常采用交叉验证法来选取最有的k值。
四、分类决策规则
一般采用多数表决规则,等价于经验风险最小化。对给定的点x,如果涵盖*其最近邻的k个训练点构成的集合*的区域的类别是cj,那么误分类率是:

要是误分类率最小即经验风险最小,就要使得表决支持最多。
五、算法实现:kd树
k近邻算法要求快速对训练数据进行k近邻搜索,在特征空间维数大、训练样本容量大时尤为必要。k近邻算法的最简单实现方法是线性扫描,这时要计算输入实例与每一个训练实例的距离,显然当训练集很大时,计算是不可行的。为了提高搜索效率,可以考虑采用特殊的结构存储训练数据,以减少计算距离的次数,如kd树。
构造kd树:
kd树是一种对k维空间中的点进行存储以便于对其进行快速检索的树形数据结构。kd树是二叉树,表示对k维kj的一个划分。构造kd树相当于不断地用垂直于坐标轴的超平面将k维空间切分,构成一系列的k维超矩形区域,kd树的每一个结点对应于k维超矩形区域。


搜索kd树:


评价:
如果点是随机分布的,kd树搜索的平均计算复杂度为O(logN),N是训练样本数,kd树更适合于训练实例树远大于空间维数时的k近邻搜索,当空间维数接近训练实例树时,它的效率会迅速下降,几乎接近线性扫描。
【测试数据: sample.dat,test.dat】
【算法1: test.cpp, knn-kd.a, knn-kd.so】
【算法2: test.cpp, knn-kd.a, knn-kd.so】
机器学习PR:k近邻法分类的更多相关文章
- 机器学习中 K近邻法(knn)与k-means的区别
简介 K近邻法(knn)是一种基本的分类与回归方法.k-means是一种简单而有效的聚类方法.虽然两者用途不同.解决的问题不同,但是在算法上有很多相似性,于是将二者放在一起,这样能够更好地对比二者的异 ...
- K近邻法(KNN)原理小结
K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用.比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出 ...
- 学习笔记——k近邻法
对新的输入实例,在训练数据集中找到与该实例最邻近的\(k\)个实例,这\(k\)个实例的多数属于某个类,就把该输入实例分给这个类. \(k\) 近邻法(\(k\)-nearest neighbor, ...
- k近邻法
k近邻法(k nearest neighbor algorithm,k-NN)是机器学习中最基本的分类算法,在训练数据集中找到k个最近邻的实例,类别由这k个近邻中占最多的实例的类别来决定,当k=1时, ...
- scikit-learn K近邻法类库使用小结
在K近邻法(KNN)原理小结这篇文章,我们讨论了KNN的原理和优缺点,这里我们就从实践出发,对scikit-learn 中KNN相关的类库使用做一个小结.主要关注于类库调参时的一个经验总结. 1. s ...
- 机器学习之K近邻算法(KNN)
机器学习之K近邻算法(KNN) 标签: python 算法 KNN 机械学习 苛求真理的欲望让我想要了解算法的本质,于是我开始了机械学习的算法之旅 from numpy import * import ...
- 《统计学习方法》笔记三 k近邻法
本系列笔记内容参考来源为李航<统计学习方法> k近邻是一种基本分类与回归方法,书中只讨论分类情况.输入为实例的特征向量,输出为实例的类别.k值的选择.距离度量及分类决策规则是k近邻法的三个 ...
- k近邻法(kNN)
<统计学习方法>(第二版)第3章 3 分类问题中的k近邻法 k近邻法不具有显式的学习过程. 3.1 算法(k近邻法) 根据给定的距离度量,在训练集\(T\)中找出与\(x\)最邻近的\(k ...
- 统计学习方法与Python实现(二)——k近邻法
统计学习方法与Python实现(二)——k近邻法 iwehdio的博客园:https://www.cnblogs.com/iwehdio/ 1.定义 k近邻法假设给定一个训练数据集,其中的实例类别已定 ...
随机推荐
- 基于Three.js的360X180度全景图预览插件
基于Three.js的360X180度全景图预览插件 时间 2015-08-12 10:01:10 HTML5中国 原文 http://www.html5cn.org/article-8621-1 ...
- 多个Jdk版本(转)
window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法 本机已经安装了jdk1.7,而比较早期的项目需要依赖jdk1.6,于是同时在本机安装了jdk1.6和jdk1.7. 安装 ...
- Windows下Apache配置域名
1.打开httpd.conf 找到“Include conf/extra/httpd-vhosts.conf”这一行,取消前面的#号注释并保存 2.修改httpd-vhosts.conf文件 进入ap ...
- JE22环境安装配置(JDK/ANT/TOMCAT/ECLIPSE)
文章中不涉及安装的均为解压即可直接使用的 1.安装JDK最新的J2EE安装会默认安装GlassFish,安装Java SDK就足够了,不是非要装JavaEE SDK,因为Tomcat的lib目录下,已 ...
- 【OpenCV练习】简单显示图片的代码
今天依照网上的教程尝试了一下最基本的图片显示. 首先想说一下编译时出现的问题,开始时在编译时会出现无法识别cvReleaseImage的情况,是因为没有在配置中包含相应的core的库文件. 加进去就解 ...
- Unity3d之json解析研究
Unity3d之json解析研究 json是好东西啊!JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式 JSON简单易用,我要好好研究一下 ...
- 从jquery源码中看类型判断和数组的一些操作
在深入看jquery源码中,大家会发现源码写的相当巧妙.那我今天也通过几个源码中用到的技巧来抛砖引玉,希望大家能共同研究源码之精华,不要囫囵吞枣. 1.将类数组转化成数组 我想大家首先想到的方法是fo ...
- 安利一个MVC的好东西,RazorGenerator.MsBuild,可以自动编译cshtml文件
在传统的asp.net webForm 开发里,在发布时,如果选择预编译,就会自动将所有的aspx 文件编译,在发布后的目录里,就看不到aspx的源代码了,同时因为是预编译的,所以每个页面打开速度都挺 ...
- 查看APK方法数的工具dex-method-counts
做APK方法总能遇到方法数超限的问题(主要是方法数, 字段数, String数.等各种数都可能超过65k导致不能安装) 除了大公司都自己做了一些检查方法. 网上还有一些开源的查询工具. 给大家推荐一个 ...
- C++设计模式-Flyweight享元模式
Flyweight享元模式 作用:运用共享技术有效地支持大量细粒度的对象. 内部状态intrinsic和外部状态extrinsic: 1)Flyweight模式中,最重要的是将对象分解成intrins ...