一、算法概述

KNN也称为K近邻或最近邻(nearest neighbor),从字面来理解就是根据测试样本相对最近(属性相对最近)的K个训练样本的类别来决定该测试样本的类别(少数服从多数)。KNN是一种惰性学习方法(不需要训练模型),主要处理分类问题。有惰性学习方法,那么也有积极学习方法,前面讲到的决策树是积极学习方法。那怎么判断属性相对最近呢?其实KNN算法在寻找相对最近样本时使用的是计算样本属性的距离。然后根据计算出来的距离取距离最近的K个训练样本,再根据这K个样本的类别的数量来决定该测试样本的类别。这里起到决定性作用的是样本个数K值,具体影响看如下图:

左图是K=1,则测试样本类别为负;中间图K=2,则测试样本类别没法判定;右图K=3,则测试样本类别是正。根据这三个图,我们可以看出,随着K值的变化,测试样本的类别会发生变化。因此可以看出K值的重要性。如果K值太小,则最近邻分类器容易受到由于训练数据中的噪声而产生的过分拟合的影响;如果K值太大,最近邻分类器可能会误分类测试样本,因为最近邻的K个样本中会包含距离较远的样本。

二、算法伪代码

数据集分为训练集和测试集,x和y分别代表特征向量和目标变量,一个训练样本为(x,y),训练样本空间为(x,y)∈D,测试样本为

,下面用伪代码来表示算法的执行过程。

KNN最近邻算法伪代码:

1.设置参数,K是最近邻样本个数,D是训练集;

2.for 每个测试样本

do

3.计算z和每个训练样本(x,y)∈D的距离

4.选择离z最近的K个训练样本的集合

(根据K个近邻样本确定测试样本类别)

6.end for

其中第5步式子中的v是类标号,而 I( )是指示函数,即若

,则返回1,否则返回0。但由于此算法对K值很敏感,为了降低K值的影响,我们可以给不同距离的训练样本加上权重值,权重值设为距离平方的倒数,即距离越远的,影响越小。

最终测试样本类标号公式如下:

三、模型完善

关于K值取值大小是该算法中重点问题。一般情况,K值选取3、5、7是比较常见的,但具体选择多少才合适,模型可靠性多大,还需要具体方法来辅助决定。

1.学习曲线

学习曲线在机器学习中非常常见,一般用于非模型判别结果参数的展示和选取,例如KNN模型中K值的选取,可以通过绘制一条横轴为1-10、纵轴为选取该K值时模型的准确率,用折线图展示。

2.交叉验证

学习曲线的本质是基于一个既定的训练集和测试集进行的,但实际上,测试集和训练集的划分也会影响模型的准确率,而就KNN而言模型的准确率在一定程度上又会影响K值的选取,最终影响模型的建立。为了消除该影响,我们可以利用交叉验证来判别模型判别效力。交叉验证是首先将数据集划分为n等分,然后选取其中一份作为测试集,剩下的n-1份作为训练集。首先将训练集训练模型,训练完成后将测试集投入测试,得到一个模型评估指标,接着再换另外一份测试集,继续训练测试并评估。最后得到n个评估指标,取平均值,将其记为最终的模型评估指标。

knn k的选取_经典算法(四):KNN相关推荐

  1. knn k的选取_KNN - 初窥K近邻算法

    1>算法概述 KNN: 全名K-NearestNeighbor,K近邻算法,简单讲就是每个样本都可以用最接近的k个邻居表示,或者说共享同一个标签.KNN是一种分类(classification) ...

  2. 数据挖掘十大经典算法之——KNN 算法

    数据挖掘十大经典算法系列,点击链接直接跳转: 数据挖掘简介及十大经典算法(大纲索引) 1. 数据挖掘十大经典算法之--C4.5 算法 2. 数据挖掘十大经典算法之--K-Means 算法 3. 数据挖 ...

  3. 生产实践中的经典算法(四)-BitMap

    生产实践中的经典算法(四)-BitMap 1.BitMap的原理 位图(Bitmap),即位(Bit)的集合,是一种数据结构,可用于记录大量的0-1状态,在很多地方都会用到,比如Linux内核(如in ...

  4. java经典算法四十题

    java经典算法四十题 [程序9]题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 ".例如6=1+2+3.编程找出1000以内的所有完数. public class W ...

  5. knn 邻居数量k的选取_选择K个最近的邻居

    knn 邻居数量k的选取 Classification is more-or-less just a matter of figuring out to what available group so ...

  6. 机器学习十大经典算法之KNN最近邻算法

    KNN简介 KNN(K-NearestNeighbor)是机器学习入门级的分类算法,非常简单.它实现将距离近的样本点划为同一类别:KNN中的K指的是近邻个数,也就是最近的K个点 :根据它距离最近的K个 ...

  7. 机器学习经典算法之KNN

    一.前言 KNN 的英文叫 K-Nearest Neighbor,应该算是数据挖掘算法中最简单的一种. 先用一个例子体会下. /*请尊重作者劳动成果,转载请标明原文链接:*/ /* https://w ...

  8. Java经典算法四十例编程详解+程序实例

    JAVA经典算法40例 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: ...

  9. 遗传算法经典实例代码_经典算法研究系列 之 深入浅出遗传算法

    关注数学,关注AI,关注我们公众号ID:Math-AI 经典算法研究系列 遗传算法 1 初探遗传算法 Ok,先看维基百科对遗传算法所给的解释: 遗传算法是计算数学中用于解决最优化的搜索算法,是进化算法 ...

最新文章

  1. SharePoint 2013 跨网站集发布功能简介
  2. python如何进行双色球预测最准确_【原创】python基于大数据现实双色球预测
  3. halcon使用直线标定板,标定相机内参代码
  4. 《刷新》:拥抱同理心,建立成长型思维
  5. Cracked me --1--Acid_burn
  6. mysql俩个表之间关联语法_MySQL多表关联SQL语句调优
  7. 从入门到入土:Python requests代理 proxy配置 HTTP
  8. nacos动态配置数据源_Sentinel使用Nacos存储规则及同步
  9. Sentry的安装搭建与使用
  10. MyBatis工作流程及配置
  11. 自建网盘教程之:使用可道云搭建私有云网盘,无需数据库
  12. 宽带拨号上服务器无响应,宽带拨号服务器无响应(图文)
  13. 适合64位系统的c语言编辑器,wintc 32/64位软件下载
  14. 出现APK安装包解析错误问题说明
  15. 台式计算机用什么电源线,台式机电源怎么选 台式机主机电源如何选择【详解】...
  16. 计算机二级考试Excel教程m,2019年计算机二级等级考试Excel函数公式汇总
  17. ArcGIS教程:区域填充
  18. 无人机三维建模(3) 航拍实景模型
  19. 定时器0 定时器2波特率发生器 AD转换
  20. KISSY基础篇乄KISSY之IO(2)

热门文章

  1. 【英语学习】【WOTD】litmus test 释义/词源/示例
  2. Intel 64/x86_64/IA-32/x86处理器基本执行环境 (1) - 32位执行环境概述
  3. oracle 9i手动启动数据库,Oracle9iAS (之五): 手工起动,关闭系统
  4. python socket多线程并发_【Python之旅】第五篇(三):Python Socket多线程并发
  5. TypeScript,初次见面,请多指教 ?
  6. 容器技术:华为云如何帮助企业落地Kubernetes
  7. Docker入门之五数据管理
  8. 回家了,写博文继续!
  9. WCF 服务应用程序与 服务库之间的区别
  10. 我的网页设计(腾讯网页面制作编写)