K近邻算法小结
什么是K近邻?
K近邻一种非参数学习的算法,可以用在分类问题上,也可以用在回归问题上。
- 什么是非参数学习?
一般而言,机器学习算法都有相应的参数要学习,比如线性回归模型中的权重参数和偏置参数,SVM的C和gamma参数,而这些参数的学习又依赖一定的学习策略。相比较而言,k近邻算法可以说是最简单,也是最容易理解的一种机器学习算法了。 - K近邻算法思想?
具体而言,在一个待测试样本周围找K个最近的点,然后根据这k个点进行决策,如果是分类问题,决策结果就是K个点中出现最多的类别;如果是回归问题,结果值为K个点目标值的均值; - 那么K值怎么选?
K值的选择会对k近邻算法的结果产生重大的影响。
具体怎么解释呢?以特殊情况入手来说,如果k值最小,等于1,这就意味着说,每次在对输入实例进行预测时,只考虑与其最近的实例,预测结果与最近的这个实例点密切相关,如果这个点恰巧为噪声点,就会出现误判,同时这样也会导致模型的过拟合,复杂度增加;如果K取值变得很大,等于N(训练实例总数),最后,无论距离度量方式是怎样的,最后的结果都是训练实例中出现最多的类,模型变得异常简单,预测时只要总是输出最多的类就可以了。
总体而言,如果k值太小,就相当于用较小的邻域中的训练实例进行预测,“学习”的近似误差会减小,缺点是“学习”的估计误差会增大,预测结果会对近邻的实例点非常敏感,如果近邻的实例点恰巧是噪声就会出错。换句话说,k值的减小意味着整体模型变复杂,容易发生过拟合;
如果k值太大,就相当于用较大的邻域中的训练实例进行预测,优点可以减小学习的估计误差,缺点是学习的近似误差增大,与输入实例较远的训练实例也会对预测起作用,使预测发生错误,k值的增大意味着整体模型变得简单。如果k=N,那么无论输入实例是什么,都将简单的预测它属于在训练实例中最多的类,模型过于简单,完全忽略训练实例中的大量有用信息。 - “最近”如何确定?
距离度量方式,一般通过计算欧几里得距离进行比较,当然也有别的选择,如:曼哈顿距离,cos值等等; - 最终结果怎么确定?(分类决策规则)
一般都是采用投票法,在选择的k个近邻点的标签值中,选择出现频率最高的作为输入实例的预测值。
总体而言,在数据集一定的情况下, K近邻算法的表现如何主要取决于上面提到的三个要素:K值的选择,距离度量的方式和分类决策规则。
算法描述
对未知类别属性的数据集中的每个点依次执行以下操作:
- 计算已知类别数据集中的点与当前点之间的距离;
- 按照距离递增次序排序;
- 选取与当前点距离最近的k个点;
- 确定前k个点所在类别的出现频率;
- 返回前k个点出现频率最高的类别作为当前点的预测分类。
优点
算法简单 ,模型容易理解,没有学习训练过程,通常情况下不需要做很大调整就有着不错的表现;因此通常用作一个问题的baseline(最差、最基本的解决方案)
局限性
- 当实例特征过多,或者实例中大部分为稀疏特征时,模型表现并不如意;
- 当数据集过大时,分类过程变得十分缓慢;
因此实际过程中,只能用来处理一些小数据集,同时数据特征不多的情况,并不常用!
K近邻算法小结的更多相关文章
- 用Python从零开始实现K近邻算法
KNN算法的定义: KNN通过测量不同样本的特征值之间的距离进行分类.它的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别.K通 ...
- 02-16 k近邻算法
目录 k近邻算法 一.k近邻算法学习目标 二.k近邻算法引入 三.k近邻算法详解 3.1 k近邻算法三要素 3.1.1 k值的选择 3.1.2 最近邻算法 3.1.3 距离度量的方式 3.1.4 分类 ...
- 02机器学习实战之K近邻算法
第2章 k-近邻算法 KNN 概述 k-近邻(kNN, k-NearestNeighbor)算法是一种基本分类与回归方法,我们这里只讨论分类问题中的 k-近邻算法. 一句话总结:近朱者赤近墨者黑! k ...
- 机器学习实战笔记--k近邻算法
#encoding:utf-8 from numpy import * import operator import matplotlib import matplotlib.pyplot as pl ...
- k近邻算法的Java实现
k近邻算法是机器学习算法中最简单的算法之一,工作原理是:存在一个样本数据集合,即训练样本集,并且样本集中的每个数据都存在标签,即我们知道样本集中每一数据和所属分类的对应关系.输入没有标签的新数据之后, ...
- 基本分类方法——KNN(K近邻)算法
在这篇文章 http://www.cnblogs.com/charlesblc/p/6193867.html 讲SVM的过程中,提到了KNN算法.有点熟悉,上网一查,居然就是K近邻算法,机器学习的入门 ...
- 从K近邻算法谈到KD树、SIFT+BBF算法
转自 http://blog.csdn.net/v_july_v/article/details/8203674 ,感谢july的辛勤劳动 前言 前两日,在微博上说:“到今天为止,我至少亏欠了3篇文章 ...
- 机器学习之K近邻算法(KNN)
机器学习之K近邻算法(KNN) 标签: python 算法 KNN 机械学习 苛求真理的欲望让我想要了解算法的本质,于是我开始了机械学习的算法之旅 from numpy import * import ...
- k近邻算法
k 近邻算法是一种基本分类与回归方法.我现在只是想讨论分类问题中的k近邻法.k近邻算法的输入为实例的特征向量,对应于特征空间的点,输出的为实例的类别.k邻近法假设给定一个训练数据集,其中实例类别已定. ...
随机推荐
- [翻译] LiquidFloatingActionButton
LiquidFloatingActionButton https://github.com/yoavlt/LiquidFloatingActionButton LiquidFloatingAction ...
- 动态展开tableView的cell[2]
动态展开tableView的cell[2] http://code4app.com/ios/%E5%8A%A8%E6%80%81%E6%B7%BB%E5%8A%A0cell/53845f8a933bf ...
- 审计系统---paramiko模块学习
paramiko模块学习 [更多参考]http://www.cnblogs.com/wupeiqi/articles/4963027.html [paramiko的Demo实例]https://git ...
- QQ邮箱验证码
人的记忆有时候跟鱼一样,只有七秒钟,短暂的时间! .NET Web窗体实现忘记密码,使用QQ邮箱验证修改 一.首先设置一下发送个人或企业发送的邮箱 二.登录邮箱进行设置,如图: 三.关闭邮箱 四. ...
- 【转】【Flex】#010 操作XML文件(E4X)
该教程转载来自于:http://blog.chinaunix.net/uid-14767524-id-2785506.html [看到这边文章的位置,具体原作者未知] 经过一些排版的修改,其他内 ...
- Alpha 冲刺报告
Alpha 冲刺报告(4/10) 队名:洛基小队 峻雄(组长) 已完成:继续行动脚本的编写 明日计划:尽量完成角色的移动 剩余任务:物品背包交互代码 困难:具体编码进展比较缓慢 ----------- ...
- Spring MVC Interceptor
1 在spring-servlet.xml中进行如下配置 <mvc:interceptors> <mvc:interceptor> <mvc:mapping path=& ...
- SpringMVC如何防御CSRF
本文说一下SpringMVC如何防御CSRF(Cross-site request forgery跨站请求伪造)和XSS(Cross site script跨站脚本攻击). 说说CSRF 对CSRF来 ...
- python里的splitlines具体解释
Python的split方法函数能够切割字符串成列表,默认是以空格作为分隔符sep来切割字符串. In [1]: s = "www jeapedu com" In [2]: ...
- php魔术变量
__LINE__ 文件中的当前行号 __FILE__ 文件的完整路径和文件名 __DIR__ 文件所在的目录 __FUNCTION__ 自 PHP 5 起本常量返回该函数被定义时的名字 __C ...