转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/50923056

勿在浮沙筑高台

KNN概念

KNN(K-Nearest Neighbors algorithm)是一种非参数模型算法。在训练数据量为N的样本点中,寻找最近邻测试数据x的K个样本,然后统计这K个样本的分别输入各个类别w_i下的数目k_i,选择最大的k_i所属的类别w_i作为测试数据x的返回值。当K=1时,称为最近邻算法,即在样本数据D中,寻找最近邻x的样本,把x归为此样本类别下。常用距离度量为欧式距离。

算法流程:

                 

左图所示:在二维平面上要预测中间'*'所属颜色,采用K=11时的情况,其中有4黑色,7个蓝色,即预测'*'为蓝色。

右图所示:当K=1时,即最近邻算法,相当于把空间划分成N个区域,每个样本确定一块区域。每个区域中的点都归属于该样本的类别,因为该区域的数据点与所用样本相比与区域样本最近,此算法也被称为Voronoi tessellation

--------------------------------------------------------------------------------------------------------------------------------------------

下面四副图像是在一个二维平面上,数据点类别为3类,采用K=10。图(a)为样本数据点;图(b)为平面上每个位置属于y=1(对应‘+’)的概率热量图像,图(c)为类别y=2(对应'*')时对应的热量图像;图(d)采用MAP估计(即最大概率的类别)平面各点所属类别。

------------------------------------------------------------------------------------------------------------------

KNN算法误差率

假设最优贝叶斯分类率记为P_B,根据相关论文证明KNN算法的误差率为:

当数据样本量N趋于无穷大时,K=1时:    ,M为数据类别总数

当数据样本量N趋于无穷大时,M=2时:;

由公式看出,KNN的算法要优于1-NN算法,因为降低了误差下界。并随着k的增大,P_kNN渐近于最优误差率P_B;事实上,当k->∞时(但仍然占样本总量N很小一部分),KNN算法准确率趋近于贝叶斯分类器。

KNN算法的问题

  • 当数据量N很大,同时数据维度D很高,搜索效率会急剧下降。若采用暴力求解法,复杂度为。为增大效率,可以采用KD树等算法优化,见:KD树与BBF算法解析
  • 有时根据现实情况,需要降低样本数量,可以采用prototype editing或者condensing算法等;prototype editing算法采用自身数据样本作为测试样本,应用KNN算法,若分类错误则剔除该样本。
  • 当样本总量N很小时,会造成错误率上升。一种解决办法是训练度量距离方法,对不同的样本采用不同的度量方法目的是为了降低错误率,此种方法可以分为:全局方法(global)、类内方法(class-dependent)、局部方法(locally-dependent)。

Ref:Machine Learning: A Probabilistic Perspective

Pattern Recognition,4th.

【机器学习详解】KNN分类的概念、误差率及其问题相关推荐

  1. 二分类最优阈值确定_机器学习 | 详解GBDT在分类场景中的应用原理与公式推导...

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第31篇文章,我们一起继续来聊聊GBDT模型. 在上一篇文章当中,我们学习了GBDT这个模型在回归问题当中的原理.GBD ...

  2. Android Loader 异步加载详解一:基础概念

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/70241844 本文出自[赵彦军的博客] Android Loader 异步加载详解 ...

  3. 强的离谱, Transformer 模型与联邦机器学习详解!

    Transformer 作为一种基于注意力的编码器 - 解码器架构,不仅彻底改变了自然语言处理(NLP)领域,还在计算机视觉(CV)领域做出了一些开创性的工作.与卷积神经网络(CNN)相比,视觉 Tr ...

  4. 经典算法详解--CART分类决策树、回归树和模型树

    Classification And Regression Tree(CART)是一种很重要的机器学习算法,既可以用于创建分类树(Classification Tree),也可以用于创建回归树(Reg ...

  5. TCP/IP详解学习笔记-基本概念

    为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样 ...

  6. 机器学习--详解基于梯度下降的Logistic回归算法原理

    先给出Logistic回归的sigmod函数数学表达式: 很简单的表达式,再看看它的性质,当时,,因此 当时,,因此 Logistic回归之所以称为Logistic是因为只有两个状态即0和1,这也是数 ...

  7. 一文详解K-NN近邻算法详解

    0x01 K近邻算法概述 在统计学中,K近邻算法(K-NN)是一种非参数监督学习方法,最初由Evelyn Fix和Joseph Hodges在 1951 年开发,后来由Thomas Cover扩展. ...

  8. 15、Windows驱动开发技术详解笔记(11) 基本概念

    9.Windows驱动程序的入口函数规定为_DriverEntry@8,所以用C++编写时要用extern. 驱动程序中,不能使用编译器运行时函数,甚至C语言中的malloc,C++的new函数都不能 ...

  9. java 输入输出流详解及分类

    字节流与字符流的详解,文件流,数据流 2017年04月29日 19:54:47 阅读数:1294 首先看一下File类的常用方法 •File类的对象不但可以表示文件,还可以表示目录,在程序中一个Fil ...

  10. 机器学习第二篇:详解KNN算法

    本篇介绍机器学习众多算法里面最基础也是最"懒惰"的算法--KNN(k-nearest neighbor).你知道为什么是最懒的吗? 01|算法简介: KNN是英文k-nearest ...

最新文章

  1. docker stats命令源码分析结果
  2. VS2010/VS 2013 删除空行
  3. Redis与DB数据同步问题
  4. 【linux】——ubuntu12.04 下安装wine和wine乱码解决方案
  5. 华为的发展与管理浅析
  6. 判断三角形java代码_java基础编程题之异常处理
  7. SAP WebClient UI和business switch相关的逻辑介绍
  8. html中输出PHP的下拉列表,html中关于下拉列表select的图文代码详解
  9. 谈谈Angular关于$watch,$apply 以及 $digest的工作原理
  10. ai驱动数据安全治理_JupyterLab中的AI驱动的代码完成
  11. Python:为什么必须在方法定义和调用中明确使用'self'?
  12. MySQL的varchar水真的太深了,你真的会用吗?
  13. 对QQ保镖检测结果的几点疑问
  14. 色彩缤纷的python(改变字体颜色及样式)不是我写的
  15. AriaNG保存服务器信息,Aria2 AriaNg 安装配置教程
  16. 【滤波器】基于matlab实现微波带低通高通带通滤波器设计
  17. 计算机网络导论 虚电路 X.25 帧中继 ATM
  18. solr版本的选择,4.X如何选择?
  19. JavaScript中document的用法
  20. Bazel编译教程(基础篇)

热门文章

  1. Few Shot Vid2Vid 论文心得
  2. python3 调用http接口例子
  3. bos 获取数据库连接_BOS单据外部调用接口说明
  4. 基于微信公众平台的教师评教系统
  5. Java中多个pdf文件合并为一个
  6. 电脑ndows无法启动,电脑无法启动windows帮助和支持为什么?
  7. html图片逆时针转换,css3怎样做出逆时针旋转倒计时
  8. C# 将PDF文档转换成图片
  9. 分享一个空手反套白狼的骚操作
  10. 23位子网掩码是多少_24 28 30 位的子网掩码是多少