机器学习十大算法 之 kNN(一)
机器学习十大算法 之 kNN(一)
最近在学习机器学习领域的十大经典算法,先从kNN开始吧。
简介
kNN是一种有监督学习方法,它的思想很简单,对于一个未分类的样本来说,通过距离它最近的k个“邻居”,来判断这个样本的类别。kNN也是一种lazy learning(不知道中文是啥)技术,训练代价小、分类代价大。算法的要点有四个:
- 训练集
- k的取值
- 距离的衡量方式
- 决定未知样本类别的方式
尽管kNN理解和实现起来都很简单,但是在某些应用上仍然有较好的表现。Cover和Hart指出,在一些合理的假设下,kNN的分类误差的上界是贝叶斯分类器误差的两倍,并且kNN方法的分类误差渐渐逼近贝叶斯分类器。
要点
k的取值
k表示未知样本在分类时“邻居”的个数。
如果k过小,那么分类的风险就会变大,未知样本的分类会很容易受到噪音的干扰。比如古老的封建制度,风险较大,国家大事只有皇帝和极少数重臣拿主意,如果是个明君带领的团队,那很有可能早就诸如“贞观之治”、“康乾盛世”之类的治世,相反,如果是昏君团队,改朝换代也就不远了。
如果k过大,那么分类时就会考虑过多的样本点,其中很可能包括大量无关的样本。随着k值变大,模型会变得越来越简单。极端的情况是k的值等于所有训练样本的个数,那么在训练集不变的情况下,每次分类结果都会是相同的。
确定k值的大小可以采用交叉验证(cross-validation)的方式。
距离的衡量方式
衡量样本点之间的距离最常用得有cosine距离、欧式距离和曼哈顿距离。
- cosine距离:d(x, y) = cos(x, y)
- 欧氏距离:d(x, y) = sqrt(sum(xi - yi)^2)
- 曼哈顿距离:d(x, y) = sqrt(sum(abs(xi - yi)))
在实际应用中,当然应该根据需求对距离进行修改甚至重新设计,但是原则是不变的,就是越相似的两个样本的距离应该是越小的。同时还应该注意在需要的时候进行归一化,避免夸大或者忽略个别值域差别较大的属性。
确定未知样本类别的方式
确定未知样本类别是指,在选取好k个里邻居之后,如何根据这些邻居的类别确定未知样本的类别。
最简单的方式是多数投票,也就是取k个邻居中个数最多的那个类别作为未知样本的类别。这种方式的问题是,当k个邻居分布比较广泛时,距离未知样本近的那些样本理应有更大的贡献,而实际上在投票的时候,所有邻居的权重是一样的。
因此,稍微复杂一点的方法是,在投票时按照与未知样本的距离考虑训练样本的权重。权重的计算方法有多种,例如:距离平方的倒数。
机器学习十大算法 之 kNN(一)的更多相关文章
- 机器学习十大算法之KNN(K最近邻,k-NearestNeighbor)算法
机器学习十大算法之KNN算法 前段时间一直在搞tkinter,机器学习荒废了一阵子.如今想重新写一个,发现遇到不少问题,不过最终还是解决了.希望与大家共同进步. 闲话少说,进入正题. KNN算法也称最 ...
- 机器学习十大算法总览(含Python3.X和R语言代码)
引言 一监督学习 二无监督学习 三强化学习 四通用机器学习算法列表 线性回归Linear Regression 逻辑回归Logistic Regression 决策树Decision Tree 支持向 ...
- 机器学习十大算法之EM算法
此文已由作者赵斌授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 由于目前论坛的Markdown不支持Mathjax,数学公式没法正常识别,文章只能用截图上传了... ...
- 【十大算法实现之KNN】KNN算法实例(含测试数据和源码)
KNN算法基本的思路是比较好理解的,今天根据它的特点写了一个实例,我会把所有的数据和代码都写在下面供大家参考,不足之处,请指正.谢谢! update:工程代码全部在本页面中,测试数据已丢失,建议去UC ...
- 秒懂机器学习---k临近算法(KNN)
秒懂机器学习---k临近算法(KNN) 一.总结 一句话总结: 弄懂原理,然后要运行实例,然后多解决问题,然后想出优化,分析优缺点,才算真的懂 1.KNN(K-Nearest Neighbor)算法的 ...
- 十大算法 pagerank 傅里叶变换
来源于最近阅读的一些链接 首先是介绍十大算法的 http://blog.jobbole.com/70639/ 然后是pageRank算法 http://blog.jobbole.com/23286/ ...
- 机器学习——十大数据挖掘之一的决策树CART算法
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第23篇文章,我们今天分享的内容是十大数据挖掘算法之一的CART算法. CART算法全称是Classification ...
- GJM : 数据结构 - 轻松看懂机器学习十大常用算法 [转载]
转载请联系原文作者 需要获得授权,非法转载 原文作者将享受侵权诉讼 文/不会停的蜗牛(简书作者)原文链接:http://www.jianshu.com/p/55a67c12d3e9 通过本篇文章可以 ...
- 轻松看懂机器学习十大常用算法 (Machine Learning Top 10 Commonly Used Algorithms)
原文出处: 不会停的蜗牛 通过本篇文章可以对ML的常用算法有个常识性的认识,没有代码,没有复杂的理论推导,就是图解一下,知道这些算法是什么,它们是怎么应用的,例子主要是分类问题. 每个算法都看了 ...
随机推荐
- Servlet与JSP的关系
Servlet与JSP的异同点: 相似点: 都可以生成动态网页 不同点: JSP擅长网页制作,生成页面直观,但不易追踪与排错 Servlet是纯Java,擅长处理流程与业务逻辑,缺点是页面不直观
- Break和Continue的一些注意事项
Break: 1)可以用于switch-case判断中,用于跳出switch 2)用在循环中,用于立即跳出循环 其中,用于循环的情况下,跳出的是break所在的循环 Continue: 立即结束本次循 ...
- C# Word常用操作(转)格式设置
一.word文档表格操作.分页及换行 //合并单元格table.Cell(2, 2).Merge(table.Cell(2, 3)); //单元格分离 object Rownum = 2;object ...
- Android开发手记(23) Notification
有时候,我们需要应用程序在状态内显示一些通知信息,这时我们就需要使用Notification来完成这一工作.也许我们会想到以前经常使用的Toast来通知用户.虽然Notification与Toast都 ...
- 判断iPhone和iPad 判断设备版本
//判断iPhone和iPad #define IS_IPHONE (!IS_IPAD) #define IS_IPAD (UI_USER_INTERFACE_IDIOM() != UIUserInt ...
- PHP表单提交验证各种方式
<!DOCTYPE unspecified PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www. ...
- gdb调试 使用心得
1: 对于在应用程序中加入参数进行调试的方法: 直接用 gdb app -p1 -p2 这样进行调试是不行的. 需要像以下这样使用: #gdb app (gdb) r -p1 -p ...
- (转)QT常用快捷键
F1 查看帮助F2 跳转到函数定义(和Ctrl+鼠标左键一样的效果)Shift+F2 声明和定义之间切换F4 头文件和源文件之间切换Ctrl+1 ...
- python学习第十八天 --文件操作
这一章节主要讲解文件操作及其文件读取,缓存,文件指针. 文件操作 (1)文件打开:open(filepath,filemode) filepath:要打开文件的路径 filemode:文件打开的方式 ...
- storm接入metaq时类不兼容错误 无法初始化MonitorLog
在实际的项目中,需要storm从metaq中读取数据,一开始就有日志问题,查到是storm/lib中的log4j-over-slf4j和slf4j-api.jar包的不兼容导致的,这些日志包使用时必须 ...