机器学习十大算法 之 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. 【开源java游戏框架libgdx专题】-10-核心库-Viewport

    Viewport类,又称为视口类,主要负责管理游戏相机,处理游戏世界坐标与布景层坐标的换算关系.在移动端开发,不像PC端容易.因为要适配不同分辨率的设备.libgdx处理不同的设备屏幕时,用视口处理舞 ...

  2. Java遍历Map、List、Array

    1.遍历array,使用for循环或者foreach(本人建议使用) int arr[] = {2, 3, 1}; System.out.println("----1----排序前的一维数组 ...

  3. Python 函数的使用 外加引入文件

    #coding=utf-8 #!user/bin/python import sys import test2 def functionsss(name,sex,age=25): print name ...

  4. Swift - 18 - 数组的基础操作

    //: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...

  5. 分享Git的一些个人配置

    先贴上自己.gitconfig的相关命令,我再具体说一下 diff.external=~/.git-meld.sh http.sslverify=false http.proxy=http://127 ...

  6. 【转】Hibernate和ibatis的比较

    1. 简介 Hibernate是当前最流行的O/R mapping框架.它出身于sf.net,现在已经成为Jboss的一部分了.iBATIS是另外一种优秀的O/R mapping框架,现已改名叫myB ...

  7. gdb调试带参数程序(转:笑笑小白,cnblog http://www.cnblogs.com/rosesmall/archive/2012/04/10/2440514.html)

    一般来说GDB主要调试的是C/C++的程序.要调试C/C++的程序,首先在编译时,我们必须要 把调试信息加到可执行文件中.使用编译 器(cc/gcc/g++)的 -g 参数可以做到这一点.如: > ...

  8. jquery 文本框聚焦文字删除

    做作业需要,自己写了一个,写的很烂. $(function() { $("#search_input").addClass("before_focus");/* ...

  9. wamp虚拟机配置

    1.找到httpd.conf 里面:找到 # Virtual hosts 开启虚拟机Include conf/extra/httpd-vhosts.conf 2  编辑httpd-vhosts.con ...

  10. python -- 函数传参

    一.参数传入规则 可变参数允许传入0个或任意个参数,在函数调用时自动组装成一个tuple: 关键字参数允许传入0个或任意个参数,在函数调用时自动组装成一个dict: 1. 传入可变参数: def ca ...