k近邻(KNN)复习总结
摘要:
1.算法概述
2.算法推导
3.算法特性及优缺点
4.注意事项
5.实现和具体例子
6.适用场合
内容:
1.算法概述
K近邻算法是一种基本分类和回归方法;分类时,根据其K个最近邻的训练实例的类别,通过多数表决等方式进行预测;k近邻法实际上利用训练数据集对特征向量空间进行划分,并作为其分类的"模型"(Cover和Hart 在1968)--参考自《统计学习方法》
回归是根据k个最近邻预测值计算的平均值--参考自scikit-learn官网
2.算法推导
2.1 kNN三要素
k值的选择:当k值较小时,预测结果对近邻的实例点非常敏感,容易发生过拟合;如果k值过大模型会倾向大类,容易欠拟合;通常k是不大于20的整数(参考《机器学习实战》)
距离度量:不同距离度量所确定的最近邻点是不同的
分类决策规则:多数表决(majority voting)规则是在损失函数是0-1损失函数时的经验风险最小化
2.2 KD树:解决对k近邻进行快速搜索的一种二叉树,构造kd树相当于不断用垂直于坐标轴的超平面对特征空间进行划分,最终构成一系列的K维超矩阵区域;每一个节点对应于一个k维超矩形区域。一般情况下顺序选择坐标轴及坐标轴的中位数(下图中取的最中间两个数较大的一个数)进行切分。kd树是平衡的但效率未必最优--参考自《统计学习方法》
KD树只在小于等于20维的数据集上可以快速搜索,但是当维数增长时效率降低
如下图对T = {(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)}建立kd树的结果:

2.3 ball tree:解决高维空间下kd树失效的一种树形结构;Ball树根据质心C和半径r对数据进行递归的划分,每一个数据点都会被划分到一个特定的质心C和半径r的的超球体里面,在搜索的时候,候选的点会使用|x+y| <= |x| + |y|进行筛选(papers:“Five balltree construction algorithms”)
如下图是显示了一个2维平面包含16个观测实例的图(参考自):

3.算法特性及优缺点
优点:精度高,对异常值不敏感
缺点:k值敏感,空间复杂度高(需要保存全部数据),时间复杂度高(平均O(logM),M是训练集样本数)
4.注意事项
归一化:基于距离的函数,要进行归一化;否则可能造成距离计算失效
5.实现和具体例子
构建KD树并使用KD树进行最近邻搜索(《统计学习方法》算法3.2和3.3)
机器学习实战中的提高约会网站配对指数和手写识别的例子(numpy实现,未使用KD树)
scikit-learn使用KNN进行分类的例子(分类决策上可以加大邻近点的权重);
ball tree 实现的例子(有时间研究下)
6.适用场合
是否支持大规模数据:单机下时间和空间消耗大,不过可以通过分布式解决(github上找到的一个spark knn实现,有时间研究下)
特征维度
是否有 Online 算法:有
特征处理:支持数值型数据,类别型类型需要进行0-1编码
k近邻(KNN)复习总结的更多相关文章
- 机器学习经典算法具体解释及Python实现--K近邻(KNN)算法
(一)KNN依旧是一种监督学习算法 KNN(K Nearest Neighbors,K近邻 )算法是机器学习全部算法中理论最简单.最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值 ...
- 机器学习-K近邻(KNN)算法详解
一.KNN算法描述 KNN(K Near Neighbor):找到k个最近的邻居,即每个样本都可以用它最接近的这k个邻居中所占数量最多的类别来代表.KNN算法属于有监督学习方式的分类算法,所谓K近 ...
- k近邻 KNN
KNN是通过测量对象的不同特征值之间的距离进行分类.它的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别,其中K通常是不大于20 ...
- 1.K近邻算法
(一)K近邻算法基础 K近邻(KNN)算法优点 思想极度简单 应用数学知识少(近乎为0) 效果好 可以解释机器学习算法使用过程中的很多细节问题 更完整的刻画机器学习应用的流程 图解K近邻算法 上图是以 ...
- 一看就懂的K近邻算法(KNN),K-D树,并实现手写数字识别!
1. 什么是KNN 1.1 KNN的通俗解释 何谓K近邻算法,即K-Nearest Neighbor algorithm,简称KNN算法,单从名字来猜想,可以简单粗暴的认为是:K个最近的邻居,当K=1 ...
- K近邻法(KNN)原理小结
K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用.比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出 ...
- k近邻算法(knn)的c语言实现
最近在看knn算法,顺便敲敲代码. knn属于数据挖掘的分类算法.基本思想是在距离空间里,如果一个样本的最接近的k个邻居里,绝大多数属于某个类别,则该样本也属于这个类别.俗话叫,"随大流&q ...
- 基本分类方法——KNN(K近邻)算法
在这篇文章 http://www.cnblogs.com/charlesblc/p/6193867.html 讲SVM的过程中,提到了KNN算法.有点熟悉,上网一查,居然就是K近邻算法,机器学习的入门 ...
- 机器学习之K近邻算法(KNN)
机器学习之K近邻算法(KNN) 标签: python 算法 KNN 机械学习 苛求真理的欲望让我想要了解算法的本质,于是我开始了机械学习的算法之旅 from numpy import * import ...
随机推荐
- css3clock.js - 一个用CSS3与纯js实现的简单时钟
前言 项目代码明细可以查看我Github上的源码:https://github.com/nelsonkuang/css3clock.js 实现思路 主要是用CSS3控制时针.分针和秒针旋转:时针每12 ...
- Entity Framework 通过Lambda表达式更新指定的字段
本来需要EF来更新指定的字段,后来在园子里找到了代码 var StateEntry = ((IObjectContextAdapter)dbContext).ObjectContext.ObjectS ...
- IntelliJ IDEA 绝对好用快捷键
最近根据自己的使用习惯整理了一下在windows下常用的一些快捷键,有些确实非常实用. 常用快捷键 键 作用 备注 Ctrl+F12 显示当前类的所有方法 F2 定位下一个错误位置 Alt ...
- 从零开始山寨Caffe·玖:BlobFlow
听说Google出了TensorFlow,那么Caffe应该叫什么? ——BlobFlow 神经网络时代的传播数据结构 我的代码 我最早手写神经网络的时候,Flow结构是这样的: struct Dat ...
- bzoj1024搜索
进度1/10mark(感觉完不成了) 事实上我刚看到题目一下子慌了,,,我在想怎么二分一块的长宽,然后验证 然而极其难写 于是想有没有暴力,举一些例子模拟一下 然后发现切割是有很明显的限制的:每次切割 ...
- HTML5 与 CSS3 jQuery部分知识总结【转】
一. HTML5 为什么需要HTML5 什么是HTML5 HTML5现状及浏览器支持 HTML5优点与缺点 HTML5语法规则与文档声明 HTML5新增表达标签 HTML5多媒体组件 HTML5 ...
- indows server 2008 多用户远程桌面连接设置(验证有效
然后,在运行框中输入 gpedit.msc 之后,点击确定或者直接按键盘上的回车键 计算机配置-->管理模板-->Windows组件---->远程桌面服务--->远程桌面会话 ...
- matlab环境配置
一.环境变量设置 AMD处理器:右键单击我的电脑 属性 — >高级 —> 环境变量 —> 系统变量 —> 新建 变量名:BLAS_VERSION,值为安装目录\atlas_At ...
- Ubuntu14.04或16.04下Hadoop及Spark的开发配置
对于Hadoop和Spark的开发,最常用的还是Eclipse以及Intellij IDEA. 其中,Eclipse是免费开源的,基于Eclipse集成更多框架配置的还有MyEclipse.Intel ...
- mysql之触发器trigger
触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/befo ...