【机器学习详解】KNN分类的概念、误差率及其问题
转载请注明出处: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分类的概念、误差率及其问题相关推荐
- 二分类最优阈值确定_机器学习 | 详解GBDT在分类场景中的应用原理与公式推导...
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第31篇文章,我们一起继续来聊聊GBDT模型. 在上一篇文章当中,我们学习了GBDT这个模型在回归问题当中的原理.GBD ...
- Android Loader 异步加载详解一:基础概念
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/70241844 本文出自[赵彦军的博客] Android Loader 异步加载详解 ...
- 强的离谱, Transformer 模型与联邦机器学习详解!
Transformer 作为一种基于注意力的编码器 - 解码器架构,不仅彻底改变了自然语言处理(NLP)领域,还在计算机视觉(CV)领域做出了一些开创性的工作.与卷积神经网络(CNN)相比,视觉 Tr ...
- 经典算法详解--CART分类决策树、回归树和模型树
Classification And Regression Tree(CART)是一种很重要的机器学习算法,既可以用于创建分类树(Classification Tree),也可以用于创建回归树(Reg ...
- TCP/IP详解学习笔记-基本概念
为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样 ...
- 机器学习--详解基于梯度下降的Logistic回归算法原理
先给出Logistic回归的sigmod函数数学表达式: 很简单的表达式,再看看它的性质,当时,,因此 当时,,因此 Logistic回归之所以称为Logistic是因为只有两个状态即0和1,这也是数 ...
- 一文详解K-NN近邻算法详解
0x01 K近邻算法概述 在统计学中,K近邻算法(K-NN)是一种非参数监督学习方法,最初由Evelyn Fix和Joseph Hodges在 1951 年开发,后来由Thomas Cover扩展. ...
- 15、Windows驱动开发技术详解笔记(11) 基本概念
9.Windows驱动程序的入口函数规定为_DriverEntry@8,所以用C++编写时要用extern. 驱动程序中,不能使用编译器运行时函数,甚至C语言中的malloc,C++的new函数都不能 ...
- java 输入输出流详解及分类
字节流与字符流的详解,文件流,数据流 2017年04月29日 19:54:47 阅读数:1294 首先看一下File类的常用方法 •File类的对象不但可以表示文件,还可以表示目录,在程序中一个Fil ...
- 机器学习第二篇:详解KNN算法
本篇介绍机器学习众多算法里面最基础也是最"懒惰"的算法--KNN(k-nearest neighbor).你知道为什么是最懒的吗? 01|算法简介: KNN是英文k-nearest ...
最新文章
- docker stats命令源码分析结果
- VS2010/VS 2013 删除空行
- Redis与DB数据同步问题
- 【linux】——ubuntu12.04 下安装wine和wine乱码解决方案
- 华为的发展与管理浅析
- 判断三角形java代码_java基础编程题之异常处理
- SAP WebClient UI和business switch相关的逻辑介绍
- html中输出PHP的下拉列表,html中关于下拉列表select的图文代码详解
- 谈谈Angular关于$watch,$apply 以及 $digest的工作原理
- ai驱动数据安全治理_JupyterLab中的AI驱动的代码完成
- Python:为什么必须在方法定义和调用中明确使用'self'?
- MySQL的varchar水真的太深了,你真的会用吗?
- 对QQ保镖检测结果的几点疑问
- 色彩缤纷的python(改变字体颜色及样式)不是我写的
- AriaNG保存服务器信息,Aria2 AriaNg 安装配置教程
- 【滤波器】基于matlab实现微波带低通高通带通滤波器设计
- 计算机网络导论 虚电路 X.25 帧中继 ATM
- solr版本的选择,4.X如何选择?
- JavaScript中document的用法
- Bazel编译教程(基础篇)