KNN-笔记(1)
1 - 背景
KNN:k近邻,表示基于k个最近的邻居的一种机器学习方法。该方法原理简单,构造方便。且是一个非参数化模型。
KNN是一个“懒学习”方法,也就是其本身没有训练过程。只有在对测试集进行结果预测的时候才会产生计算。KNN在训练阶段,只是简单的将训练集放入内存而已。该模型可以看成是对当前的特征空间进行一个划分。当对测试集进行结果预测时,先找到与该测试样本最接近的K个训练集样本,然后基于当前是分类任务还是回归任务来做对应的处理。
KNN模型中有三个需要注意的地方:
1 - 距离度量的方法;
2 - K值的选择;
3 - 最后的判别决策规则。
如上面第三个,较为简单的判别决策规则为:
1)分类任务,那么找这K个训练集样本中出现次数最多的那个标签作为该测试样本标签,如下图:

图1.1 周老师西瓜书图10.1
2)回归任务,基于这K个训练集样本求均值,将其作为该测试集样本的结果。
不过KNN正是因为基于K个近邻进行测量的方法,所以其出问题也就在这里,因为该模型不适合作为高特征维度下的选择。因为它会遇到维数灾难的问题。举个例子,假如当前数据集是均匀分布在一个D维特征的空间中的,假设我们需要计算测试样本\(x\)周边一个区域上的类别标签密度,那么我们期望基于足够大的区域范围的数据才能得到合理的结果,那么对应的边界长度公式为:
\]
也就是假如维度为\(D=10\),我们想评估10%的类别标签密度,那么每个维度上所需长度为\(e_{10}(0.1) = 0.8\),也就是我们需要每个维度上80%的长度范围内的数据,即使我们只需要估计1%的标签密度,我们每个维度上的长度也是\(e_{10}(0.01)=0.63\) 。

图2.2 mlapp上图1.16(b)
当维度为2,且样本能够无限多,那么该模型表现才是最好的(Cover and Hart 1967)。所以按道理,高维数据其实不适合KNN[]
不过幸运的是, 有一个效应可以在一定程度上抵消维度灾难, 那就是所谓的“ 非均匀性的祝福”(blessing of nonuniformity) 。
在大多数应用中, 样例在空间中并非均匀分布, 而是集中在一个低维流形manifold) 上面或附近。
这是因为数字图片的空间要远小于整个可能的空间。 学习器可以隐式地充分利用这个有效的更低维空间, 也可以显式地进行降维。[]
2 距离度量
KNN中最常用的方法就是欧式距离计算法,当然也有\(L_p\)距离和马氏距离等等。
假设样本的特征空间\(\chi\)是\(n\)维实数的向量空间\(\bf R^n\),\(x_i,x_j\in\chi\),$x_i=(x_i^{(1)}, x_i^{(2)}, ..., x_i^{(n)} ) \(,\)x_j=(x_j{(1)},x_j{(2)},...,x_j^{(n)})\(,那么\)x_i,x_j\(的\)L_p$距离定义为:
\]
这里\(p\geq1\),
当\(p=2\)时,称为欧式距离;
当\(p=1\)时,称为曼哈顿距离;
当\(p=\infty\)时,是各个坐标距离的最大值,即:
\]

图2.1 李航统计学习方法图3.2
上图为在2维情况下到原点的距离为\(L_p=1\)的点构成的范围图
3 K值选取
K值的选择会对KNN模型的结果产生重大影响。这就是一个模型选择问题。
模型选择:假设当前是一个KNN回归问题。现在是需要对点\(x_0\)进行\(\hat f_k(x_0)\)拟合,假设该样本来自函数\(Y=f(X)+\epsilon\), 这里\(E(\epsilon)=0\), 且\(Var(\epsilon)=\sigma^2\)。为了简化问题,假设训练样本中\(x_i\)的值是固定的,那么在测试样本点\(x_0\)的期望预测误差也叫做测试或泛化误差,如:
EPE_k^{(x_0)}
&=& E[(Y-\hat f_k(x_0))^2|X=x_0]\\
&=& \sigma^2+[Bias^2(\hat f_k(x_0))+Var(\hat f_k(x_0))]\\
&=& \sigma^2+[f(x_0)-\frac{1}{k}\sum_{l=1}^kf(x(l))]^2+\frac{\sigma^2}{k}
\end{eqnarray}\]
第一项叫做不可避免的误差,是我们不可控制的,第二项和第三项是我们能够控制的,分别对应着模型的偏置和方差。偏置随着K变大而变大,方差随着K变大而变小。即K越大,模型越简单,K越小,模型越复杂:

图2.2 esl书上的图2.11
4 搜索优化
实现KNN模型时,主要考虑的还有个问题是如何对训练集的样本点进行快速的K近邻搜索。当特征空间维度太大,或者训练集样本点很多的时候特别重要。最基础的搜索方法就是线性搜索了,可想而知每个测试样本在比较时,都需要去计算一遍训练集的所有样本。效率着实不高。所以才需要量身定做的数据结构搜索方法。
4.1 - KD树
4.2 - Ball树
(待续)
参考资料:
[] Machine Learning A Probabilistic Perspective
[] 李航,统计学习方法
[] The Elements of Statistical Learning Data Mining, Inference, and Prediction (Second Edition)
[] Pedro Domingos,A Few Useful Things to Know About Machine Learning
[] 以叶子为数据的http://www.cnblogs.com/lysuns/articles/4710712.html
[] http://blog.csdn.net/likika2012/article/details/39619687
KNN-笔记(1)的更多相关文章
- KNN笔记
KNN笔记 先简单加载一下sklearn里的数据集,然后再来讲KNN. import numpy as np import matplotlib as mpl import matplotlib.py ...
- 机器学习实战笔记(Python实现)-01-K近邻算法(KNN)
--------------------------------------------------------------------------------------- 本系列文章为<机器 ...
- 第2章KNN算法笔记_函数classify0
<机器学习实战>知识点笔记目录 K-近邻算法(KNN)思想: 1,计算未知样本与所有已知样本的距离 2,按照距离递增排序,选前K个样本(K<20) 3,针对K个样本统计各个分类的出现 ...
- opencv2.4.13+python2.7学习笔记--使用 knn对手写数字OCR
阅读对象:熟悉knn.了解opencv和python. 1.knn理论介绍:算法学习笔记:knn理论介绍 2. opencv中knn函数 路径:opencv\sources\modules\ml\in ...
- 机器学习笔记(5) KNN算法
这篇其实应该作为机器学习的第一篇笔记的,但是在刚开始学习的时候,我还没有用博客记录笔记的打算.所以也就想到哪写到哪了. 你在网上搜索机器学习系列文章的话,大部分都是以KNN(k nearest nei ...
- 学习笔记之k-nearest neighbors algorithm (k-NN)
k-nearest neighbors algorithm - Wikipedia https://en.wikipedia.org/wiki/K-nearest_neighbors_algorith ...
- 机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN)
机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN) 关键字:邻近算法(kNN: k Nearest Neighbors).python.源 ...
- kNN算法笔记
kNN算法笔记 标签(空格分隔): 机器学习 kNN是什么 kNN算法是k-NearestNeighbor算法,也就是k邻近算法.是监督学习的一种.所谓监督学习就是有训练数据,训练数据有label标好 ...
- retrival and clustering: week 2 knn & LSH 笔记
华盛顿大学 <机器学习> 笔记. knn k-nearest-neighbors : k近邻法 给定一个 数据集,对于查询的实例,在数据集中找到与这个实例最邻近的k个实例,然后再根据k个最 ...
- 【cs231n作业笔记】一:KNN分类器
安装anaconda,下载assignment作业代码 作业代码数据集等2018版基于python3.6 下载提取码4put 本课程内容参考: cs231n官方笔记地址 贺完结!CS231n官方笔记授 ...
随机推荐
- application.properties多环境配置文件、jar包外部配置文件、配置项加密、程序中配置使用
一.简介 spring boot项目application.properties文件存放及使用介绍 二.方法一多环境配置文件 我们一般都会有多个应用环境,开发环境.测试环境.生产环境,各个环境的配置会 ...
- 如何用ABP框架快速完成项目(13) - 用ABP遇到难题项目受阻时如何避免项目延迟
只有一个人在开发ABP, 遇到难题时可以: 最根本的, 简化问题, 不要盖楼式结构 前端优先用VSCode看文档, 后端看官网文档. 看ABP源码/issues 到QQ群和微信群里寻求外援. 我建 ...
- Jmeter接口测试问题及解决方法积累
一.各个类型参数的位置 plain body query parameter URI 路径上 二.特殊字符处理 \"作为参数输入到接口,会出现错误 响应断言中如果有用到正则表达式,不能包含正 ...
- Python 爬虫实例(爬百度百科词条)
爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入 ...
- 产品经理说| AIOps 让告警变得更智能 (下)
AIOps 人工智能和IT运营支撑 Ops 之间的故事,愈演愈烈,已经成为当今运维圈的热门话题,我打算从2篇文档分享我们在 AIOps 上一些探索和实践.(上篇)主要介绍了为什么事件(告警)处理需要 ...
- [20180823]IMU与db link.txt
[20180823]IMU与db link.txt --//当使用db link查看远程表时,实际上会产生小小的日志.--//当时如果与IMU结合在一起,可以导致IMU的失效. 1.环境:SCOTT@ ...
- 文件服务器HFS
用途:用于文件共享(类似FTP) 官网:http://www.rejetto.com/hfs/?f=ss 优点:比起apache,它有界面方便查看当前正连接的主机 如果在内网环境下进行文件共享的话,可 ...
- Android项目的targetSDK>=23,在低于Android6.0的部分测试机(类似华为)上运行时出现的系统权限问题
相信大家对Android6.0以上的动态权限已经有所了解,很多童鞋也已经跃跃欲试地将自己项目的targetSDK升级到了23及其以上,很不幸的是我也成为了其中一员,然而我还是图样图森破了,升级之后的问 ...
- 学习flying logic
之前在知乎上结识的朋友吴笛,他的qq空间里分享了 flying logic的一些用途,我想到可以规划和团队的目标,这点让我感到很兴奋,分享学习这个软件. 学习之前,我应当把软件中的单词学明白.现在就 ...
- 【Linux基础】大B和小b
1.小b(bit) 在计算机科学中,bit(比特)是表示信息的最小单位,叫做二进制位,一般用0和1表示. 2.大B(Byte) Byte叫做字节,由8个位(8bit)组成一个字节(1Byte),用于表 ...