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

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值选取。

f0074ffd263e0daf26fd26b699801a9b.png

2>算法流程

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

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

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

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

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

3>算法实现

3.1准备数据

0b0190ed5f2d62a47f6bc1056230ec82.png

#scatter详解链接如下:

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

a5df3d2bb95efbff8ac99a49d784d899.png

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

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

3.2计算距离

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

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

e36d7bdadb69a1232d239572258326d1.png

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

03fe15d020d4a84cb2e3f22dcc4e602c.png

3.3选取k值

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

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

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

62b821bebf39e82ff128ce4ddfb940a6.png

3.3决策

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

386cc42e811de8dcf9c0a17fa661c076.png

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

40b528d9a66a1ba2e0c1284e2ed2b335.png

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

4>自实现完整工程代码

d4169cacbb0f5498fa6b61590c452d22.png

5>算法优缺点

KNN的主要优点有:

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

KNN的主要缺点有:

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

#参考链接:

机器学习的敲门砖:kNN算法(上)​mp.weixin.qq.com
0f10161a4fc5b18b7030802841b07551.png
机器学习-KNN算法 - 数月亮 - 博客园​www.cnblogs.com
e0be3d748b16297219efc7e6da1dd8ea.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/422252.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(535):多列布局2

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>css多列布局</title><style>.parent{co…

刚装了fedora 17,装机必备,解决视频格式和中文输入法。

今天把ubuntu 12.04换成了fedora 17&#xff0c;喜欢gnome3的感觉&#xff0c;呵呵。为了刺激英语学习&#xff0c;特意选择的英文。结果就是没了中文输入法。。。。我的电脑是64位的&#xff0c;32位的同学变通下。 中文输入法&#xff1a; $ sudo yum install sunpinyin.i686…

前端学习(536):多列布局3列得间距

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>css多列布局</title><style>.parent{co…

Silverlight 5 Features

原文下载地址Improved media support Low Latency Audio Playback: Use the SoundEffect API to trigger low-latencysound Variable Speed Playback: allows video to be played at different speedsand supports fast-forward and rewind. At up to twice th…

scp会覆盖同名文件吗_你会Hypermesh一键式完成几何文件到求解文件的输出吗?

前不久&#xff0c;我在仿真秀APP更新了2篇Hypermesh二次开发的文章&#xff0c;介绍了《Hypermesh二次开发之电子产品跌落全流程开发讲解》和《前处理软件Hypermesh二次开发如何从入门到精通》&#xff1b;同步推出了《Hypermesh 二次开发高级培训11讲》线上视频课程&#xff…

前端学习(537):多列布局4横跨多列

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>css多列布局</title><style>.parent,.p…

JSONP 跨域共享信息

定义来源&#xff1a;http://zh.wikipedia.org/wiki/JSONP JSONP&#xff08;JSON with Padding&#xff09;是资料格式 JSON 的一种“使用模式”&#xff0c;可以让网页从别的网域要资料。另一个解决这个问题的新方法是跨来源资源共享。 由于同源策略&#xff0c;一般来说位于…

crontab 每周五_crontab定时任务 每隔一周的周五执行

定时任务每隔一周的周五执行 * * * * 05 /bin/bash -c (($(date +\%s) / 86400 \% 14)) && your-script 测试是否成功执行命令 写入定时任务 crontab -e 01 04 * * 05 /bin/bash -c (($(date +\%s) / 86400 \% 14)) && /bin/date +\%F_\%w >>/tmp/date.l…

jdbc各种数据库的连接说明

-------------------------------oracle--------------------------------驱动&#xff1a;oracle.jdbc.driver.OracleDriver URL&#xff1a;jdbc:oracle:thin:<machine_name><:port>:dbname 注&#xff1a;machine_name&#xff1a;数据库所在的机器的名称&#…

linux mysql 端口配置文件_linux虚拟机中各服务端口及配置文件路径

查询端口状况命令&#xff1a; netstat -an| grep 端口号查询服务状态(服务是否开启)命令&#xff1a;systemctl status 服务名开启服务命令&#xff1a;systemctl start 服务名1. ssh服务&#xff1a;端口 &#xff1a;22 配置文件路径&#xff1a;/etc/ssh/ssh.con…

前端学习(539):全屏布局得实现

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>全屏布局</title><style>html,body{mar…

【翻译】Pro.Silverlight.5.in.CSharp.4th.Edition - 第三章 布局 03

目录&#xff1a;点击这里 上一篇&#xff1a;【翻译】Pro.Silverlight.5.in.CSharp.4th.Edition - 第三章 布局 02 使用Canvas基于坐标布局 到目前为止我们还剩下Canvas没有学习到。Canvas可以让我们使用精确坐标给元素设置位置。对于设计一个以数据为主导的窗体和标准对话框来…

mysql mvcc 隔离级别_关于 Mysql 四种隔离级别中 Lock 和 MVCC 的关系

读写锁共享锁(share lock)&#xff5c; 读锁(read lock)读锁是共享的&#xff0c;或者说是相互不阻塞的。多个客户在同一时刻可以同时读取同一个资源&#xff0c;而互不干扰SELECT ... LOCK IN SHARE MODE排他锁(exclusive lock)&#xff5c; 写锁(write locl)写锁则是具有排他…

python三级联动菜单_VUE+element三级联动或树形菜单获取最后一项,并加入到表格中...

如下图,要实现的功能如下,勾选三级联动的材料,勾选最后一级的材料,把勾选的材料信息动态添加到下面表格中1 data数据return {options:[], // 三级联动 数据optionsObj : {} //{id: item} 材料id键值对clList: [], // 选中的材料}2 从后台获取三级联动数据getDataTrees(){this.s…

开博声明

首先想说的是博客园的博客一键搬家功能真不错&#xff0c;很方便的把CSDN上的旧博文搬家过来了&#xff0c;虽然只有区区几篇&#xff0c;但是敝帚自珍嘛。 在这里开博的原因有几个方面&#xff0c;一是随着工作年限的增加&#xff0c;越来越感觉到平时积累的重要性&#xff0c…

前端学习(542):node得环境搭建

进入官网下载 node.js 建立一个文件夹 直接下一步&#xff0c;下一步 安装完成以后 winr 安装完成 建立一个js文件 找到路径 运行

python语言是非跨平台语言吗_python是跨平台的语言吗

Python是跨平台的&#xff0c;免费开源的一门计算机编程语言。是一种面向对象的动态类型语言&#xff0c;最初被设计用于编写自动化脚本(shell)&#xff0c;随着版本的不断更新和语言新功能的添加&#xff0c;越来越多被用于独立的、大型项目的开发。支持常见的主流平台&#x…