机器学习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近邻法假设给定一个训练数据集,其中的实例类别已定 ...
随机推荐
- xcode中使用xib添加autolayout中constrain to margins的不同
在使用xcode7 在storyboard中添加autolayout中发现 如果添加在view 直接添加到viewcontroller的view 上 constrain to margins 只 ...
- SonarQube的使用入门
SonarQube的安装.配置与使用 详情请参照原博客:http://www.cnblogs.com/qiaoyeye/p/5249786.html SonarQube是管理代码质量一个开放平台,可以 ...
- HotSpot 自动内存管理笔记与实战
1.对象的创建 虚拟机遇到一条new指令时,首先会去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载.解析和初始化过.如果没有,则必须先进行相应的类的 ...
- 在linux上通过yum安装JDK
完全转载自:https://my.oschina.net/andyfeng/blog/601291 这里完整粘贴一份留存 卸载centos自带的jdk 1.查看当前的jdk版本,并卸载 [root@l ...
- 停掉Linux固定的进程
ps -ef | grep php 查看进程ID,和信息 kill -s 9 1827 相关命令 ps -ef , ps -aux , pgrep php ,
- Java性能调优
一.JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范,JVM将内存划分为: New(年轻代) Tenured(年老代) 永久代(Perm) 其中New和Tenured属于堆内存,堆内存会从JV ...
- yum:在Red Hat和Fedora中使用
1.列出已安装包: yum list installed--------->输出的结果可能在屏幕上一闪而过.所以最好把已安装包的列表重定义到一个文件中.然后是使用more/less查看 yum ...
- 获取JAVA[WEB]项目相关路径的几种方法
在jsp和class文件中调用的相对路径不同. 在jsp里,根目录是WebRoot 在class文件中,根目录是WebRoot/WEB-INF/classes 当然你也可以用System.getPro ...
- 函数指针_typedef
一 函数指针 1 函数类型 函数的类型由它的返回值类型,和形参类型共通过决定,与函数名无关. eg:bool lengthcompare(const string&, const string ...
- 04-c#入门(类型转换)
“无论是什么类型,所有的数据都是一系列的位,即一系列0和1.变量的含义是通过解释这些数据的方式来传达的.”——这句原话是书上翻译的,不过后一句话总感觉理解起来不是很通俗,自己觉得这样理解可能会合适些: ...