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近邻法分类的更多相关文章

  1. 机器学习中 K近邻法(knn)与k-means的区别

    简介 K近邻法(knn)是一种基本的分类与回归方法.k-means是一种简单而有效的聚类方法.虽然两者用途不同.解决的问题不同,但是在算法上有很多相似性,于是将二者放在一起,这样能够更好地对比二者的异 ...

  2. K近邻法(KNN)原理小结

    K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用.比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出 ...

  3. 学习笔记——k近邻法

    对新的输入实例,在训练数据集中找到与该实例最邻近的\(k\)个实例,这\(k\)个实例的多数属于某个类,就把该输入实例分给这个类. \(k\) 近邻法(\(k\)-nearest neighbor, ...

  4. k近邻法

    k近邻法(k nearest neighbor algorithm,k-NN)是机器学习中最基本的分类算法,在训练数据集中找到k个最近邻的实例,类别由这k个近邻中占最多的实例的类别来决定,当k=1时, ...

  5. scikit-learn K近邻法类库使用小结

    在K近邻法(KNN)原理小结这篇文章,我们讨论了KNN的原理和优缺点,这里我们就从实践出发,对scikit-learn 中KNN相关的类库使用做一个小结.主要关注于类库调参时的一个经验总结. 1. s ...

  6. 机器学习之K近邻算法(KNN)

    机器学习之K近邻算法(KNN) 标签: python 算法 KNN 机械学习 苛求真理的欲望让我想要了解算法的本质,于是我开始了机械学习的算法之旅 from numpy import * import ...

  7. 《统计学习方法》笔记三 k近邻法

    本系列笔记内容参考来源为李航<统计学习方法> k近邻是一种基本分类与回归方法,书中只讨论分类情况.输入为实例的特征向量,输出为实例的类别.k值的选择.距离度量及分类决策规则是k近邻法的三个 ...

  8. k近邻法(kNN)

    <统计学习方法>(第二版)第3章 3 分类问题中的k近邻法 k近邻法不具有显式的学习过程. 3.1 算法(k近邻法) 根据给定的距离度量,在训练集\(T\)中找出与\(x\)最邻近的\(k ...

  9. 统计学习方法与Python实现(二)——k近邻法

    统计学习方法与Python实现(二)——k近邻法 iwehdio的博客园:https://www.cnblogs.com/iwehdio/ 1.定义 k近邻法假设给定一个训练数据集,其中的实例类别已定 ...

随机推荐

  1. Javascript中变量提升的问题

    一.函数声明变量提升 函数声明具有变量提升的问题,所以在函数被声明之前就可以访问. //else中的语句相当于将if中的function重写,因此无论flag为何值,返回的方法始终为重写后的方法. / ...

  2. STM32固件库3.5+uCOS2.86移植(转自暴走的工程师)

    考了很多移植的资料和代码,终于移植好了...应该是完美移植吧~~哈哈哈~~ 编译环境是IAR 工程适用于STM32F10X大容量产品,如果不是,请自行修改启动文件和工程配置 编译器优化等级最高...这 ...

  3. Windows Server 2012 克隆修改SID

    更改SID后蓝屏\黑屏: 环境:Windows Server 2012 R2 目的:克隆出来的系统的SID都是一样,所以想修改各个系统的SID号 现象:克隆出来的系统的SID都是一样,所以想修改各个系 ...

  4. Sql Server Job 简单使用

    http://www.cnblogs.com/zerocc/p/3400529.html(转载) use msdb EXEC sp_add_job @job_name =   'tk_bakdata' ...

  5. 每天一个 Linux 命令(15):tail 命令

    tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新, ...

  6. Java生成XML文件

    我们在数据库中的数据可以将其提取出来生成XML文件,方便传输.例如数据库中有Admin这张表: 我们写一个java类表示admin数据: package xmlDom.vo; import java. ...

  7. eclipse项目debug方法

    属性查看代码在哪里存 本地项目启动 1,2步骤需要success

  8. memcpy和memmove

    memcpy函数 函数原型 void *memcpy(void *dest, const void *src, size_t n); dest:目标地址 src: 起始地址 n: 字节数 头文件 st ...

  9. 没想到cnblog也有月经贴,其实C#值不值钱不重要。

    呵呵,就不倚老卖老了,从basic走过来,一路经历vb,vf,delphi,C#,php,asp,html,js,css,太多太多的开发语言,包括面向对象编程思想,语义化页面结构等等,除了高级的编程技 ...

  10. 同一服务器上多个版本的 sqlserver ,如何连接,改变某一实例的端口号

    1. SQL Server配置管理器,双击“TCP/IP” 2. TCP/IP设置 确定后重启SQL Server服务,打开SQL Server Management Studio,服务器名称输入12 ...