一、算法

1、kNN算法又称为k近邻分类(k-nearest neighbor classification)算法。

最简单平庸的分类器或许是那种死记硬背式的分类器,记住全部的训练数据。对于新的数据则直接和训练数据匹配,假设存在同样属性的训练数据,则直接用它的分类来作为新数据的分类。这样的方式有一个明显的缺点,那就是非常可能无法找到全然匹配的训练记录。

kNN算法则是从训练集中找到和新数据最接近的k条记录。然后依据他们的主要分类来决定新数据的类别。该算法涉及3个主要因素:训练集、距离或相似的衡量、k的大小。

2、代表论文

Discriminant Adaptive Nearest Neighbor Classification

Trevor Hastie and Rolbert Tibshirani

IEEE TRANSACTIONS ON PAITERN ANALYSIS AND MACHINE INTELLIGENCE, VOL. 18, NO. 6, JUNE 1996

http://www.stanford.edu/~hastie/Papers/dann_IEEE.pdf



3、行业应用

客户流失预測、欺诈侦測等(更适合于稀有事件的分类问题)



二、算法要点



1、指导思想

kNN算法的指导思想是“近朱者赤,近墨者黑”。由你的邻居来判断出你的类别。



计算过程例如以下:

    1)算距离:给定測试对象,计算它与训练集中的每一个对象的距离

    2)找邻居:圈定距离近期的k个训练对象。作为測试对象的近邻

    3)做分类:依据这k个近邻归属的主要类别,来对測试对象分类



2、距离或相似度的衡量

什么是合适的距离衡量?距离越近应该意味着这两个点属于一个分类的可能性越大。

觉的距离衡量包含欧式距离、夹角余弦等。

对于文本分类来说。使用余弦(cosine)来计算相似度就比欧式(Euclidean)距离更合适。



3、类别的判定

投票决定:少数服从多数。近邻中哪个类别的点最多就分为该类。

加权投票法:依据距离的远近。对近邻的投票进行加权,距离越近则权重越大(权重为距离平方的倒数)



三、优缺点



1、长处

简单。易于理解。易于实现,无需预计參数,无需训练

适合对稀有事件进行分类(比如当流失率非常低时,比方低于0.5%,构造流失预測模型)

特别适合于多分类问题(multi-modal,对象具有多个类别标签),比如依据基因特征来推断其功能分类,kNN比SVM的表现要好



2、缺点

懒惰算法,对測试样本分类时的计算量大。内存开销大,评分慢

可解释性较差,无法给出决策树那样的规则。



四、常见问题



1、k值设定为多大?

k太小,分类结果易受噪声点影响;k太大,近邻中又可能包括太多的其他类别的点。(对距离加权,能够减少k值设定的影响)

k值一般是採用交叉检验来确定(以k=1为基准)

经验规则:k一般低于训练样本数的平方根



2、类别怎样判定最合适?

投票法没有考虑近邻的距离的远近,距离更近的近邻或许更应该决定终于的分类,所以加权投票法更恰当一些。



3、怎样选择合适的距离衡量?

高维度对距离衡量的影响:众所周知当变量数越多,欧式距离的区分能力就越差。

变量值域对距离的影响:值域越大的变量经常会在距离计算中占领主导作用,因此应先对变量进行标准化。



4、训练样本是否要一视同仁?

在训练集中,有些样本可能是更值得依赖的。

能够给不同的样本施加不同的权重,加强依赖样本的权重。减少不可信赖样本的影响。

5、性能问题?

kNN是一种懒惰算法,平时不好好学习,考试(对測试样本分类)时才临阵磨枪(暂时去找k个近邻)。

懒惰的后果:构造模型非常easy。但在对測试样本分类地的系统开销大,由于要扫描所有训练样本并计算距离。

已经有一些方法提高计算的效率,比如压缩训练样本量等。

6、是否能大幅降低训练样本量,同一时候又保持分类精度?

浓缩技术(condensing)

编辑技术(editing)



參考:

维基百科:

http://zh.wikipedia.org/wiki/%E6%9C%80%E9%82%BB%E8%BF%91%E6%90%9C%E7%B4%A2

百度百科:http://baike.baidu.com/view/1485833.htm

KNN它可以用来推荐:

在这里,我们没有KNN为了实现分类,我们使用KNN最原始的想法算法,每一个内容搜索K它的一个最相似内容。并给用户推荐。

KNN算法的理解的更多相关文章

  1. 菜鸟之路——机器学习之KNN算法个人理解及Python实现

    KNN(K Nearest Neighbor) 还是先记几个关键公式 距离:一般用Euclidean distance   E(x,y)√∑(xi-yi)2 .名字这么高大上,就是初中学的两点间的距离 ...

  2. kNN算法个人理解

    新手,有问题的地方请大家指教 训练集的数据有属性和标签 同类即同标签的数据在属性值方面一定具有某种相似的地方,用距离来描述这种相似的程度 k=1或则较小值的话,分类对于特殊数据或者是噪点就会异常敏感, ...

  3. KNN算法理解

    一.算法概述 1.kNN算法又称为k近邻分类(k-nearest neighbor classification)算法. 最简单平庸的分类器或许是那种死记硬背式的分类器,记住全部的训练数据,对于新的数 ...

  4. 理解KNN算法中的k值-knn算法中的k到底指的是什么 ?

    2019-11-09 20:11:26为方便自己收藏学习,转载博文from:https://blog.csdn.net/llhwx/article/details/102652798 knn算法是指对 ...

  5. 【Machine Learning】KNN算法虹膜图片识别

    K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  6. 机器学习笔记--KNN算法1

    前言 Hello ,everyone. 我是小花.大四毕业,留在学校有点事情,就在这里和大家吹吹我们的狐朋狗友算法---KNN算法,为什么叫狐朋狗友算法呢,在这里我先卖个关子,且听我慢慢道来. 一 K ...

  7. KNN算法的补充

    文本自动分类技术是文字管理的基础.通过快速.准确的文本自动分类,可以节省大量的人力财力:提高工作效率:让用户快速获得所需资源,改善用户体验.本文着重对KNN文本分类算法进行介绍并提出改进方法. 一.相 ...

  8. KNN算法--物以类聚,人以群分

    KNN(K Nearest Neighbors,K近邻 )算法是机器学习所有算法中理论最简单,最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值之间的距离,然后选取K(K>= ...

  9. KNN算法介绍

    KNN算法全名为k-Nearest Neighbor,就是K最近邻的意思. 算法描述 KNN是一种分类算法,其基本思想是采用测量不同特征值之间的距离方法进行分类. 算法过程如下: 1.准备样本数据集( ...

随机推荐

  1. AngularJS 实现按需异步加载

    习惯了 seajs 的异步加载方式,也想着 angular 也能同样使用异步加载,但是事实不随人愿. angularjs 和 requirejs 一样,使用的是预先加载的方式组织模块(这和 seajs ...

  2. Cytoscape画图初探

    Cytoscape是一个做网络图的js插件.用起来非常方便,并且非常强大.这是它的站点:点击打开链接 使用它须要导入两个文件,一个是js文件,一个是css文件.官网上下载. 这里实现了一个功能.即从后 ...

  3. Java静态字段(属性、方法、类别)

    假设域被定义为static,那么每个类中仅仅有一个这种域.作为对照,每个对象对于全部的实例域却都有自己的一份拷贝. 比如,假定须要给每个雇员赋予唯一的标识码. 这里给Employee类加入一个实例域i ...

  4. 7-days-asp-dotnet-mvc-day1

    目录 第 1 天 第 2 天 第 3 天 第 4 天 第 5 天 第 6 天 第 7 天 0. 前言 今天是开心的一天.因为我们终于来到了系列学习的最后一节.我相信你喜欢之前的课程,并从中学到了许多. ...

  5. ash

    查看当前用户使用的Shell,echo $SHELL BusyBox ('01-current) The BusyBox distribution is aiming for small implem ...

  6. PeopleRank从社交网络中发现个体价值

    阅读导读: 1.什么是PeopleRank? 2.PeopleRank和PageRank有什么差别? 3.PR分析微博数据时,怎样对微博单个账号评分? 4.R语言怎样递归计算矩阵特征值? 5.怎样计算 ...

  7. cralwer_爬虫代理中心的简要设计

    代理中心: 简单讲: 精细化控制限制资源的使用,保证有限资源的充分利用及有效性.支持动态增减,实时更新. 需求 rest api提供请求输入与输出 客户端使用代理心跳接收,用于更新代理的使用次数,被占 ...

  8. 【转】Java 工程师成神之路

    一.基础篇 1.1 JVM 1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收 http://www.jcp.org/en/jsr/detail?id=133 http://i ...

  9. HDU 3376 && 2686 方格取数 最大和 费用流裸题

    题意: 1.一个人从[1,1] ->[n,n] ->[1,1] 2.仅仅能走最短路 3.走过的点不能再走 问最大和. 对每一个点拆点限流为1就可以满足3. 费用流流量为2满足1 最大费用流 ...

  10. MAC 命令行工具(Command Line Tools)安装

    不过升级后安装命令行工具(Command Line Tools)时发现官网没有clt的下载安装包了,原来改了,使用命令在线安装. 打开终端,输入命令:xcode-select --install 选择 ...