【机器学习具体解释】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分类的概念、误差率及其问题的更多相关文章
- 机器学习---K最近邻(k-Nearest Neighbour,KNN)分类算法
K最近邻(k-Nearest Neighbour,KNN)分类算法 1.K最近邻(k-Nearest Neighbour,KNN) K最近邻(k-Nearest Neighbour,KNN)分类算法, ...
- 吴裕雄--天生自然python机器学习实战:K-NN算法约会网站好友喜好预测以及手写数字预测分类实验
实验设备与软件环境 硬件环境:内存ddr3 4G及以上的x86架构主机一部 系统环境:windows 软件环境:Anaconda2(64位),python3.5,jupyter 内核版本:window ...
- Python机器学习算法 — KNN分类
KNN简介 K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.KNN分类算法属于监督学习. 最简单最初级的分类器是将全部的训练 ...
- 吴裕雄 python 机器学习——KNN分类KNeighborsClassifier模型
import numpy as np import matplotlib.pyplot as plt from sklearn import neighbors, datasets from skle ...
- (数据科学学习手札29)KNN分类的原理详解&Python与R实现
一.简介 KNN(k-nearst neighbors,KNN)作为机器学习算法中的一种非常基本的算法,也正是因为其原理简单,被广泛应用于电影/音乐推荐等方面,即有些时候我们很难去建立确切的模型来描述 ...
- knn分类算法学习
K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的 ...
- 机器学习之路--KNN算法
机器学习实战之kNN算法 机器学习实战这本书是基于python的,如果我们想要完成python开发,那么python的开发环境必不可少: (1)python3.52,64位,这是我用的python ...
- 机器学习实战 之 KNN算法
现在 机器学习 这么火,小编也忍不住想学习一把.注意,小编是零基础哦. 所以,第一步,推荐买一本机器学习的书,我选的是Peter harrigton 的<机器学习实战>.这本书是基于pyt ...
- KNN分类算法及python代码实现
KNN分类算法(先验数据中就有类别之分,未知的数据会被归类为之前类别中的某一类!) 1.KNN介绍 K最近邻(k-Nearest Neighbor,KNN)分类算法是最简单的机器学习算法. 机器学习, ...
随机推荐
- SDL 学习及相关API
SDL_PeepEvents() 在事件队列中搜索特定类型的事件. int SDL_PeepEvents(SDL_Event *events, int numevents, SDL_eventacti ...
- 【转】Socket状态变迁图
转自:http://www.cnblogs.com/ILove/archive/2008/12/08/1350430.html 服务端,端口的状态变化 先在本机(IP地址为:192.168.1.1 ...
- Linux配置虚拟主机后,只能访问到主页怎么办?
Linux配置虚拟主机后,只能访问到主页怎么办? 今天配置了lamp后,添加了一个虚拟主机,配置http.conf后,增加虚拟主机,测试访问发现只有域名下能访问,ljt.com但是域名下所有的都访问不 ...
- Building Vim from source(转)
Compiling Vim from source is actually not that difficult. Here's what you should do: First, install ...
- iOS 音频视频图像合成那点事
代码地址如下:http://www.demodashi.com/demo/13420.html 人而无信不知其可 前言 很久很久没有写点什么了,只因为最近事情太多了,这几天终于闲下来了,趁此机会,记录 ...
- ehcache object key的实现原理
这几天为了设计缓存机制,查阅了非常多缓存方面的资料,作为没有实战经验的小白自然被各种性能报告.内存机制.集群方式搞得一头雾水. 但查了这些资料后.对各个cache的特点有了感性的了解. ehcache ...
- springboot常见异常解决方案
1.@Transactional类注入失败 spring的代理模式有2种::java自带的动态代理模式和cglib代理模式,默认情况下使用的java自带的代理模式. 对于这2种模式,java自带的适用 ...
- ConcurrentBag同线程元素的添加和删除
https://www.mgenware.com/blog/?p=232 ConcurrentBag<T>对于同一个线程值的添加和删除是非常快的,因为ConcurrentBag内部将数据按 ...
- Xml+Xslt测试工具
下载地址:http://download.csdn.net/detail/a497785609/5791359 说明:下载后,修改下Xslt部分的头部:<xsl:stylesheet versi ...
- Entity Framework "There is already an open DataReader associated with this 的解决办法
解决办法: 1,修改连接串,加上MultipleActiveResultSets=true 2, 一次性先把数据读出来 var contacts = from c in db.Contact sele ...