机器学习十大算法 之 kNN(一)

最近在学习机器学习领域的十大经典算法,先从kNN开始吧。


简介

kNN是一种有监督学习方法,它的思想很简单,对于一个未分类的样本来说,通过距离它最近的k个“邻居”,来判断这个样本的类别。kNN也是一种lazy learning(不知道中文是啥)技术,训练代价小、分类代价大。算法的要点有四个:

  1. 训练集
  2. k的取值
  3. 距离的衡量方式
  4. 决定未知样本类别的方式

尽管kNN理解和实现起来都很简单,但是在某些应用上仍然有较好的表现。Cover和Hart指出,在一些合理的假设下,kNN的分类误差的上界是贝叶斯分类器误差的两倍,并且kNN方法的分类误差渐渐逼近贝叶斯分类器。

要点

  1. k的取值

    k表示未知样本在分类时“邻居”的个数。

    如果k过小,那么分类的风险就会变大,未知样本的分类会很容易受到噪音的干扰。比如古老的封建制度,风险较大,国家大事只有皇帝和极少数重臣拿主意,如果是个明君带领的团队,那很有可能早就诸如“贞观之治”、“康乾盛世”之类的治世,相反,如果是昏君团队,改朝换代也就不远了。

    如果k过大,那么分类时就会考虑过多的样本点,其中很可能包括大量无关的样本。随着k值变大,模型会变得越来越简单。极端的情况是k的值等于所有训练样本的个数,那么在训练集不变的情况下,每次分类结果都会是相同的。

    确定k值的大小可以采用交叉验证(cross-validation)的方式。

  2. 距离的衡量方式

    衡量样本点之间的距离最常用得有cosine距离、欧式距离和曼哈顿距离。

    • cosine距离:d(x, y) = cos(x, y)
    • 欧氏距离:d(x, y) = sqrt(sum(xi - yi)^2)
    • 曼哈顿距离:d(x, y) = sqrt(sum(abs(xi - yi)))

    在实际应用中,当然应该根据需求对距离进行修改甚至重新设计,但是原则是不变的,就是越相似的两个样本的距离应该是越小的。同时还应该注意在需要的时候进行归一化,避免夸大或者忽略个别值域差别较大的属性。

  3. 确定未知样本类别的方式

    确定未知样本类别是指,在选取好k个里邻居之后,如何根据这些邻居的类别确定未知样本的类别。

    最简单的方式是多数投票,也就是取k个邻居中个数最多的那个类别作为未知样本的类别。这种方式的问题是,当k个邻居分布比较广泛时,距离未知样本近的那些样本理应有更大的贡献,而实际上在投票的时候,所有邻居的权重是一样的。

    因此,稍微复杂一点的方法是,在投票时按照与未知样本的距离考虑训练样本的权重。权重的计算方法有多种,例如:距离平方的倒数。

机器学习十大算法 之 kNN(一)的更多相关文章

  1. 机器学习十大算法之KNN(K最近邻,k-NearestNeighbor)算法

    机器学习十大算法之KNN算法 前段时间一直在搞tkinter,机器学习荒废了一阵子.如今想重新写一个,发现遇到不少问题,不过最终还是解决了.希望与大家共同进步. 闲话少说,进入正题. KNN算法也称最 ...

  2. 机器学习十大算法总览(含Python3.X和R语言代码)

    引言 一监督学习 二无监督学习 三强化学习 四通用机器学习算法列表 线性回归Linear Regression 逻辑回归Logistic Regression 决策树Decision Tree 支持向 ...

  3. 机器学习十大算法之EM算法

    此文已由作者赵斌授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 由于目前论坛的Markdown不支持Mathjax,数学公式没法正常识别,文章只能用截图上传了...     ...

  4. 【十大算法实现之KNN】KNN算法实例(含测试数据和源码)

    KNN算法基本的思路是比较好理解的,今天根据它的特点写了一个实例,我会把所有的数据和代码都写在下面供大家参考,不足之处,请指正.谢谢! update:工程代码全部在本页面中,测试数据已丢失,建议去UC ...

  5. 秒懂机器学习---k临近算法(KNN)

    秒懂机器学习---k临近算法(KNN) 一.总结 一句话总结: 弄懂原理,然后要运行实例,然后多解决问题,然后想出优化,分析优缺点,才算真的懂 1.KNN(K-Nearest Neighbor)算法的 ...

  6. 十大算法 pagerank 傅里叶变换

    来源于最近阅读的一些链接 首先是介绍十大算法的 http://blog.jobbole.com/70639/ 然后是pageRank算法 http://blog.jobbole.com/23286/ ...

  7. 机器学习——十大数据挖掘之一的决策树CART算法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第23篇文章,我们今天分享的内容是十大数据挖掘算法之一的CART算法. CART算法全称是Classification ...

  8. GJM : 数据结构 - 轻松看懂机器学习十大常用算法 [转载]

     转载请联系原文作者 需要获得授权,非法转载 原文作者将享受侵权诉讼 文/不会停的蜗牛(简书作者)原文链接:http://www.jianshu.com/p/55a67c12d3e9 通过本篇文章可以 ...

  9. 轻松看懂机器学习十大常用算法 (Machine Learning Top 10 Commonly Used Algorithms)

    原文出处: 不会停的蜗牛    通过本篇文章可以对ML的常用算法有个常识性的认识,没有代码,没有复杂的理论推导,就是图解一下,知道这些算法是什么,它们是怎么应用的,例子主要是分类问题. 每个算法都看了 ...

随机推荐

  1. Android Camera开发:使用GLSurfaceView预览Camera 基础拍照

    GLSurfaceView是OpenGL中的一个类,也是可以预览Camera的,而且在预览Camera上有其独到之处.独到之处在哪?当使用Surfaceview无能为力.痛不欲生时就只有使用GLSur ...

  2. IOS 开发 【os x 使用常识】

    开始看<learn Objective-C on the Mac>这本书,很基础,准备快速看完. 刚接触mac 的 os x 系统,很不适应,介绍一点我刚学的基本常识. 1.os x 显示 ...

  3. <html:form>、 <html:text>、<html:password>、<html:submit> 标签

    用Struts标签来写表单元件, 引用: <%@ taglib uri="/tags/struts-html" prefix="html" %> 例 ...

  4. JavaScript—window对象使用

    window对象是JavaScript浏览器对象模型中的顶层对象,包含多个常用方法和属性: 1. 打开新窗口 window.open(pageURL,name,parameters) 其中:pageU ...

  5. ORACLE导入导出操作篇

    1. DIRECTORY 指定转储文件和日志文件所在的目录DIRECTORY=directory_objectDirectory_object用于指定目录对象名称.需要注意,目录对象是使用CREATE ...

  6. 利用TOAD实现把EXCEL数据导入oracle数据库

    利用TOAD实现把EXCEL数据导入oracle数据库 工具:   Toad11.7z(百度搜索,直接下载) 1.将Excel文件中某些字段导入到Oracle数据库的对应表 连接想要导入的数据库 ,然 ...

  7. 使用ol,添加图书销售排行榜

    如果想在网页中展示有前后顺序的信息列表,怎么办呢?如,当当网上的书籍热卖排行榜,如下图所示. 这类信息展示就可以使用<ol>标签来制作有序列表来展示. 语法: <ol> < ...

  8. poj3620

    #include<iostream>#include<string>#include<stack>#include<vector>#include< ...

  9. undefined 和 null 的异同

    在javascript中,undefined和Null是两个比较特殊的值.但有时候在判断时就有点迷糊.依个人浅见,整理如下: 1.数据类型 众多周知,在javascript中存在五种基本类型,即und ...

  10. sae crop 文档

    原文是google缓存:http://webcache.googleusercontent.com/search?q=cache:MD_FP-G6RI8J:sae.sina.com.cn/%3Fm%3 ...