学习笔记——k近邻法
对新的输入实例,在训练数据集中找到与该实例最邻近的\(k\)个实例,这\(k\)个实例的多数属于某个类,就把该输入实例分给这个类。
\(k\) 近邻法(\(k\)-nearest neighbor, \(k\)-NN)是一种基本分类与回归方法,这里只讨论分类问题中的\(k\)-NN。
三要素:
- \(k\)值的选择
- 距离度量
- 分类决策规则
\(k\)近邻算法
输入:训练数据集\(T = \{ (x_1,y_1), (x_2,y_2), \cdot \cdot \cdot , (x_N,y_N) \}\),这里的\(y_i\)是实例的类别;实例特征向量\(x\);
输出:实例\(x\)所属的类\(y\)。
- 根据给定的距离度量,在训练集中找出与\(x\)最邻近的\(k\)个点,涵盖这\(k\)个点的\(x\)的邻域记作\(N_k(x)\);
- 在\(N_k(x)\)中根据分类决策规则(如多数表决)决定\(x\)的类别\(y\):
\[ y = \arg \max_{c_j} \sum_{x_i \in N_k(x)} I \left(y_i = c_j \right), i = 1,2, \cdot \cdot \cdot, K \]
其中,\(I\)为指示函数,等于的时候为1,否则为0。
\(k\)近邻模型
- 模型
每个训练实例附近的cell一起构成了对特征空间的一个划分。 - 距离度量
欧氏距离,或者更一般的闵可夫斯基距离等都可以。 - \(k\)值的选择
\(k\)值的减小意味着整体模型的=变得复杂,容易过拟合。通常采用交叉验证法来选取最优的\(k\)值。 - 分类决策规则
往往使用多数表决,对应于经验风险最小化。
\(k\)近邻法的实现:\(kd\)树
线性扫描(linear scan)算出所有的距离,简单但是耗时。可以使用\(kd\)树这种数据结构来提高效率,它可以表示对\(k\)维空间的一个划分,\(kd\)树的每个节点对应一个\(k\)维超矩形区域。
构造平衡\(kd\)树
- 输入:\(k\)维空间数据集\(T={x_1, x_2,...,x_N}\)
- 输出:\(kd\)树
- 开始:构造根节点
选择\(x^{(1)}\)为坐标轴,以所有实例\(x^{(1)}\)坐标的中位数为切分点,这个超平面将空间切分为两个子区域,落在这个超平面上的实例点保存在根节点。- 重复:一个一个地细分,切分成子区域
依次循环往后选择坐标轴。- 直到子区域没有实例存在时停止
搜索\(kd\)树
- 输入:已构造的\(kd\)树;目标点\(x\)
- 输出:\(x\)的最近邻
- 找到包含\(x\)的叶结点
从根节点出发,向左或向右移动,直到找到叶结点。- 以此叶结点为“当前最近点”
- 递归地向上回退,在每个结点进行以下操作:
- 若该结点更近,则以该点为“当前最近点”
- 检查该结点的另一子结点对应的区域内是否有更近的点:
如果这个区域有可能,也就是另一子节点下边可能存在更近的点:\(rightarrow\)递归进行最近邻搜索。
否则向上回退。- 回退到根结点时结束,最后的“当前最近点”即为\(x\)的最近邻。
(注:本文为读书笔记与总结,侧重算法原理,来源为《统计学习方法》一书第三章)
作者:rubbninja
出处:http://www.cnblogs.com/rubbninja/
关于作者:目前主要研究领域为机器学习与无线定位技术,欢迎讨论与指正!
学习笔记——k近邻法的更多相关文章
- R语言学习笔记—K近邻算法
K近邻算法(KNN)是指一个样本如果在特征空间中的K个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性.即每个样本都可以用它最接近的k个邻居来代表.KNN算法适 ...
- 《统计学习方法》笔记三 k近邻法
本系列笔记内容参考来源为李航<统计学习方法> k近邻是一种基本分类与回归方法,书中只讨论分类情况.输入为实例的特征向量,输出为实例的类别.k值的选择.距离度量及分类决策规则是k近邻法的三个 ...
- K近邻法(KNN)原理小结
K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用.比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出 ...
- 机器学习PR: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近邻法假设给定一个训练数据集,其中的实例类别已定 ...
- scikit-learn K近邻法类库使用小结
在K近邻法(KNN)原理小结这篇文章,我们讨论了KNN的原理和优缺点,这里我们就从实践出发,对scikit-learn 中KNN相关的类库使用做一个小结.主要关注于类库调参时的一个经验总结. 1. s ...
- k近邻法
k近邻法(k nearest neighbor algorithm,k-NN)是机器学习中最基本的分类算法,在训练数据集中找到k个最近邻的实例,类别由这k个近邻中占最多的实例的类别来决定,当k=1时, ...
- 机器学习中 K近邻法(knn)与k-means的区别
简介 K近邻法(knn)是一种基本的分类与回归方法.k-means是一种简单而有效的聚类方法.虽然两者用途不同.解决的问题不同,但是在算法上有很多相似性,于是将二者放在一起,这样能够更好地对比二者的异 ...
随机推荐
- 基于Ubuntu14.04系统的nvidia tesla K40驱动和cuda 7.5安装笔记
基于Ubuntu14.04系统的nvidia tesla K40驱动和cuda 7.5安装笔记 飞翔的蜘蛛人 注1:本人新手,文章中不准确的地方,欢迎批评指正 注2:知识储备应达到Linux入门级水平 ...
- phpqrcode 生成二维码
这个项目需要根据信息来自动生成二维码,到网上搜了下,发现php有生成二维码的类库phpqrcode,所以打算就用这个来生成二维码 从官网下载类库源码http://sourceforge.net/pro ...
- Android开发资源汇总
搜索 虫部落快搜(已被墙) Google免FQ镜像汇总 Lantern stackoverflow 博客 Android基础&进阶 深入理解Android 老罗的Android之旅 Andro ...
- 科学计算器(JAVA实现)
前记: 大二学 Java 的时候写的,现在贴上来,只为留念. 再翻代码,自己看着都头疼.一重重的 if 嵌套,当时写得费劲,现在看着更费劲. 代码思想: 代码的大致思想是这样: 首先定义一个算式字符串 ...
- Matlab的68个小常识
1.det(A)可以计算矩阵A的行列式值.inv(A)可以计算矩阵A的逆 2.rref(A)可以将矩阵A化为行简化阶梯梯形矩阵 3.eps是系统定义的容许误差,eps=2.2204*10-16 4.p ...
- Slam(即时定位与地图构建) 知识篇
Slam即时定位与地图构建 技术解释 同步定位与地图构建(SLAM或Simultaneous localization and mapping)是一种概念:希望机器人从未知环境的未知地点出发,在运动过 ...
- Revolving Digits[EXKMP]
Revolving Digits Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 字符加密Cipher(bzoj 1031)
Description 喜欢钻研问题的JS同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法 :把需要加密的信息排成一圈,显然,它们有很多种不同的读法.例如下图,可以读作 ...
- 解决Ajax不能跨域的方法
1. Ajax不能跨域请求的原因 同源策略(Same Origin Policy),是一种约定,该约定阻止当前脚本获取或者操作另一个域下的内容.所有支持Javascript的浏览器都支持同源策略,也 ...
- 熟悉MyEclipse
资源网址:http://www.myeclipsecn.com/learningcenter/ 20151126 [从这里开始]量身打造自己的MyEclipse(多图) 主要讲在MyEclipse里面 ...