1>算法概述

KNN: 全名K-NearestNeighbor,K近邻算法,简单讲就是每个样本都可以用最接近的k个邻居表示,或者说共享同一个标签。KNN是一种分类(classification)算法,它输入基于实例的学习(instance-based learning),属于懒惰学习(lazy learning),也就是说没有学习过程,而是事先就已经准备好分类和特征值,可以直接对新样本进行处理分类。

如图所示,绿点为测试样本,我们需要判断它是属于红色标签还是蓝色标签(r/b)。如果k=1,r:b = 2:1,测试样本为红色;如果k=2,r:b=2:3,测试样本为蓝色; 如果k=3,r:b=6:5,测试样本为红色。很显然k的取值对样本影响重大,下文将提及k值选取。

2>算法流程

  1)计算测试数据与各个训练数据之间的距离;

  2)按照距离的递增关系进行排序;

  3)选取距离最小的K个点;

  4)确定前K个点所在类别的出现频率;

  5)返回前K个点中出现频率最高的类别作为测试数据的预测分类

3>算法实现

3.1准备数据

#scatter详解链接如下:

CSDN-专业IT技术社区-登录

数据可视化后生成的图如上,其中横轴是肿块大小,纵轴是发现时间。每个点代表不同病人的肿瘤大小和发病时间,根据颜色判断肿瘤是良性还是恶性。

现给出测试样本,判断点x = [8.90933607318, 3.365731514]属于哪种情况。

3.2计算距离

距离可以采用欧氏距离或马氏距离计算,此处采用欧几里得距离计算。

√(∑_(i=1)^n▒(x_i-y_i )^2 )

使用函数argsort对数组distances进行排序,距离由近到远,返回值为索引。

3.3选取k值

k值选取要适宜,k过大会导致模型简化而失去意义,k值过小则会将模型复杂化并产生过拟合现象。且k最好为奇数,以免出现结果相等的尴尬情况。

在实际应用中,K值一般取一个比较小的数值,例如采用交叉验证法(简单来说,就是一部分样本做训练集,一部分做测试集)来选择最优的K值。有点复杂,此处跳过。

暂且选择k值为6,找出最近的6个点,并记录他们的标签值。

3.3决策

统计所选点的标签,得到多的一个标签值是多少,即为测试点x的标签。

输出一个字典,“:”前面是数组中的值,后面是统计的数量;我们可以用most_common()方法找出预测值。

至此我们得到了测试点x的标签值为1。

4>自实现完整工程代码

5>算法优缺点

KNN的主要优点有:

  1. 理论成熟,思想简单,既可以用来做分类也可以用来做回归
  2. 天然解决多分类问题,也可用于回归问题
  3. 和朴素贝叶斯之类的算法比,对数据没有假设,准确度高,对异常点不敏感
  4. 由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合

KNN的主要缺点有:

  1. 计算量大,效率低。即使优化算法,效率也不高。
  2. 高度数据相关,样本不平衡的时候,对稀有类别的预测准确率低
  3. 相比决策树模型,KNN模型可解释性不强
  4. 维度灾难:随着维度的增加,“看似相近”的两个点之间的距离越来越大,而knn非常依赖距离

#参考链接:

机器学习的敲门砖:kNN算法(上)​mp.weixin.qq.com

机器学习-KNN算法 - 数月亮 - 博客园​www.cnblogs.com

knn k的选取_KNN - 初窥K近邻算法相关推荐

  1. js算法初窥06(算法模式03-函数式编程)

    在解释什么是函数式编程之前,我们先要说下什么是命令式编程,它们都属于编程范式的一种.命令式编程其实就是一块一块的代码,其中包括了我们要执行的逻辑或者判断或者一些运算.也就是按部就班的一步一步完成我们所 ...

  2. 【机器学习】K近邻算法(K-NearestNeighbors , KNN)详解 + Java代码实现

    文章目录 一.KNN 基本介绍 二.KNN 核心思想 三.KNN 算法流程 四.KNN 优缺点 五.Java 代码实现 KNN 六.KNN 改进策略 一.KNN 基本介绍 邻近算法,或者说K最邻近(K ...

  3. 基于k近邻算法的干豆品种分类

    摘 要 近年来,干豆由于其较高的营养价值和良好的口感越来越受到人们的欢迎.其种类繁多且易于种植,是世界食用作物中产量最高的一种.干豆品种分类对干豆培育方向.产量需求和品质改良具有重要意义.本文以k近邻 ...

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

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

  5. knn k的选取_经典算法(四):KNN

    一.算法概述 KNN也称为K近邻或最近邻(nearest neighbor),从字面来理解就是根据测试样本相对最近(属性相对最近)的K个训练样本的类别来决定该测试样本的类别(少数服从多数).KNN是一 ...

  6. KNN最优k的选取【学习曲线】

    怎样选择一个最佳的 k呢? 在这里我们要使用机器学习中的神器:参数学习曲线. 参数学习曲线是一条以不同的参数取值为横坐标,不同参数取值下的模型结果为纵坐标的曲线 # 1. 导入所需要的模块和库 imp ...

  7. knn中k的选取策略

    K值较小,则模型复杂度较高,容易发生过拟合,学习的估计误差会增大,预测结果对近邻的实例点非常敏感. K值较大可以减少学习的估计误差,但是学习的近似误差会增大,与输入实例较远的训练实例也会对预测起作用, ...

  8. 一文搞懂K近邻算法(KNN),附带多个实现案例

    简介:本文作者为 CSDN 博客作者董安勇,江苏泰州人,现就读于昆明理工大学电子与通信工程专业硕士,目前主要学习机器学习,深度学习以及大数据,主要使用python.Java编程语言.平时喜欢看书,打篮 ...

  9. K近邻算法(KNN)原理小结

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 目录 1. KNN算法原理 2. KNN算法三要素 3. KNN算 ...

最新文章

  1. 《卓有成效的程序员》----读书笔记二
  2. eclipse导出jar包
  3. tensorflow 笔记 16:tf.pad
  4. 求二叉树中结点个数代码java_求二叉树中第K层结点的个数
  5. linux 建立交叉编译环境变量,ARM-Linux-gcc-4.4.3交叉编译环境终于搭建
  6. java - 菲波拉契数列 兔子个数
  7. 再谈谈ADO.NET Data Service
  8. cpu(s)和%CPU的的区别
  9. hutool实战(带你掌握里面的各种工具)目录
  10. 24点计算机游戏规则,24点游戏规则和解题方法
  11. 邓俊辉 数据结构 习题4-18 Fermat-Lagrange定理代码实现
  12. excel股票今日走势计算机,有没有可以在excel上自动显示股票实时数据的方法
  13. 图像渲染测试软件,Arnold渲染器之aiImage(ai图像)着色器介绍及渲染测试
  14. excel手机版_微软开发于手机端的办公软件!
  15. python opencv图片拼接、特征点匹配
  16. indexedDB使用
  17. 服务器定时执行js脚本
  18. 程序员避免中年危机的2个方向
  19. 神经网络与深度学习笔记 (五)深层神经网络
  20. 大话微服务:Spring Cloud gateway+OAuth2 实现单点登录和权限控制(二) OAuth2.0 四种模式的通俗理解

热门文章

  1. 第一百一十二期:96秒100亿!如何抗住双11高并发流量?
  2. java学习(123):treeset排序集合
  3. python package安装包_安装Python包(第三方库)
  4. css 两行字变成一行,如何通过CSS将两行文本更改为一行?
  5. mos 控制交流_电机控制器母线电容的设计选型
  6. 中boxplot函数的参数设置_如何在Python中生成图形和图表
  7. python 收发邮件_python发送各类邮件的主要基本方法
  8. Guitar Por如何演奏刮弦
  9. 接口测试实例(jmeter)
  10. jdk1.7 String switch的实现