文章目录

  • KNN(K nearest neighbors)
    • K值的选择和影响
      • k取值偏小
      • k取值偏大
    • 样本点距离的计算方式
      • 闵可夫斯基距离
      • 曼哈顿距离
      • 欧几里得距离
      • 切比雪夫距离
      • 余弦距离
    • 决策函数的选择
      • 用于分类的多票表决法
      • 用于回归的平均值法
    • KNN算法的优缺点

KNN(K nearest neighbors)

  • 简介
    K近邻 (k-Nearest Neighbors, KNN) 算法是一种分类与回归算法,是机器学习算法中最基础、最简单的算法之一, 1968年由 Cover和 Hart 提出, 应用场景有字符识别文本分类图像识别等领域。

  • 算法的核心思想
    一个样本与数据集中的k个样本最相似, 如果这k个样本中的大多数属于某一个类别, 则该样本也属于这个类别,具体来说即每个样本都可以用它最接近的k个邻居来代表

如下图,如果 K = 1,未知数据(绿色的问号点)被小圈中的红色方块”决策“为class2 ;如果 K = 2 , 未知数据就会被大圈里的蓝色三角形”决策“为class1(理由是,有3个蓝色三角,大于红色方块的数目)。

  • 算法执行的步骤
  1. 构造训练样本集,样本集中每一数据都有一个标签;
  2. 输入没有标签的数据,根据每一个维度的特征,从样本集选出k的最靠近的邻居;
  3. 用这k个邻居去投票得出未知数据的标签。

  • 学习特点
    K近邻算法是监督学习,训练样本集中的每一个数据都有确定的已知的标签。
    K近邻法不具有显式的学习过程,事实上,它是懒惰学习(lazy learning)的著名代表,此类学习技术在训练阶段仅仅是把样本保存起来,训练时间开销为零,待收到测试样本后再进行处理。

  • KNN算法的三要素
    距离待预测点的邻居的个数K;
    样本点之间距离的计算方式;
    决策函数的选择;

下面分点依次对着KNN的三要素进行介绍。

K值的选择和影响

K是K近邻算法中的唯一一个超参数

在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果。

记样本数据集的容量为n;
K的选取一般来源于经验,一般选取一个较小的大于1的奇数,一般在(1,n)(1,\sqrt n)(1,n​)。

  1. n较小时,n取(1,10)(1,10)(1,10)中的奇数;
  2. n较大时,n取(1,n/2)(1,\sqrt n/2)(1,n​/2)中的奇数;

简单介绍一下,k值过小或过大的对预测结果的影响。

k取值偏小

k取值偏小时,预测结果对近邻点的周围的实例及其敏感,容易受到噪声点的干扰,导致过拟合

不妨取k的一个极小值来分析,比如k=1k = 1k=1,那么绿色三角形原本属于红色方块的类别,但却由于一个最邻近的噪声点呗误判为蓝色方块类型

k取值偏大

k取值偏大时,相当于用较大邻域中的训练实例进行预测,模型鲁棒性比较好,其优点是可以减少学习的估计误差,但会导致欠拟合,因为离测试点很远的实例也会影响到预测结果,这就违背了KNN算法的基本思想 —— 用邻居数据点的去决策出未知点的类别。

如下图,有于K值取值太大,所以即使离三角形很远的点也被纳入的考虑范围,所以导致预测结果是真。

样本点距离的计算方式

在上述阐述中,经常需要衡量实例点之间的距离,而特征空间中的两个实例点的距离是两个实例点相似程度的反映

不同的距离计算方式,有不同的几何意义,所以对结果的评价的也不近相同。
下面介绍几个数学上常用的距离计算。

假设有两个mmm维的向量: x=[x1,x2,…xi,…,xm]x = [x_1,x_2,…x_i,…,x_m]x=[x1​,x2​,…xi​,…,xm​]

闵可夫斯基距离

严格来说闵氏距离并不是某种特定的距离,而是距离的一个定义:
p是参数
Lp=(∑i=1m∣xi−yi∣p)1pL_p = (\sum_{i=1}^m |x_i - y_i |^{p} )^{{\tfrac{1}{p}}}Lp​=(i=1∑m​∣xi​−yi​∣p)p1​

曼哈顿距离

L1=(∑i=1m∣xi−yi∣)L_1 = (\sum_{i=1}^m |x_i - y_i | )^{}L1​=(i=1∑m​∣xi​−yi​∣)

欧几里得距离

欧式距离是最常用在KNN算法距离计算中的。
它反映的是m维空间的点与点(向量与向量)之间的距离。
L2=(∑i=1m∣xi−yi∣2)12L_2 = (\sum_{i=1}^m |x_i - y_i |^{2} )^{{\tfrac{1}{2}}}L2​=(i=1∑m​∣xi​−yi​∣2)21​

切比雪夫距离

由极限知识可以证明,当ppp趋向于无穷大时,闵氏距离等于两个向量各特征维度差值的最大值
L∞=max⁡i=1m(∣xi−yi∣)L_\infty = \max_{i=1}^{m}(|x_i-y_i|) L∞​=i=1maxm​(∣xi​−yi​∣)

余弦距离

上述三种距离体现的是数值上的绝对差异,而余弦距离体现方向上的相对差异
两个向量之间的余弦公式为:
similarity=cos(θ)=∑i=1mxi∗yi∑xi2∑yi2similarity = cos(\theta) = \frac{\sum_{i=1}^m x_i*y_i}{\sqrt{\sum x_i^{2}} \sqrt{\sum y_i^{2}} }similarity=cos(θ)=∑xi2​​∑yi2​​∑i=1m​xi​∗yi​​

那么 余弦距离为:
distance=1−similaritydistance = 1 - similaritydistance=1−similarity
显然,distance∈[0,2]distance \in [0,2]distance∈[0,2]。

这个距离越小,说明两个向量在方向上差别越小,反之,方向差异性大。

决策函数的选择

用于分类的多票表决法

记输入训练集为T={(x1⃗,y1),…,((xi⃗,yi)),…,(xn⃗,yn)}T = \{ ( \vec{x_1},y_1) ,…,(( \vec{x_i},y_i) ),…,( \vec{x_n},y_n) \}T={(x1​​,y1​),…,((xi​​,yi​)),…,(xn​​,yn​)}
其中 xi=[xi1,xi2,…,xim]∈Rmx_i = [x_{i1},x_{i2},…,x_{im}] \in R^mxi​=[xi1​,xi2​,…,xim​]∈Rm为mmm维向量,
yi∈{t1,t2,...}y_i \in \{t_1,t_2,... \}yi​∈{t1​,t2​,...}为第iii个向量的标签。

分类任务中可使用投票法,即选择这k个实例中出现最多的标记类别作为预测结果;
根据多票表决法,确定测试实例的标签为:

c0=arg max⁡∑xk∈NK(x)I(c,yk),c∈Nk(y)c_0 = \argmax \sum_{x_k \in N_K(x)} I(c,y_k),c \in N_k(y)c0​=argmaxxk​∈NK​(x)∑​I(c,yk​),c∈Nk​(y)

上述的多数投票法,可能有如下缺陷。
最终因为蓝色方块的数目大于红色三角形的数量,所以,未知点被决策为蓝色方块,
但是很直观的发现,其实它属于红色圆形的可能性更大,因为距离更近一些。

如果仅仅按照 k 个邻居的占多数的决定最终的投票的结果,似乎有失公平,从生活经验出发,应该让与自己亲密的人、熟悉自己的朋友对自己的评价的权重的大一点,熟悉程度差一点的人的评价的权重小一点。

于是,可以使用加权多票表决法,这个时候,每一个邻居在“投票”的时候都要乘上一个权重,因为距离越远,权重越小,所以不妨让权重系数等于距离的倒数

于是,产生预测标签的公式变为
c0=arg max⁡∑xk∈NK(x)I(c,yk)∗dist(x⃗,t⃗),c∈Nk(y)c_0 = \argmax \sum_{x_k \in N_K(x)} I(c,y_k) * dist(\vec x,\vec t ),c \in N_k(y)c0​=argmaxxk​∈NK​(x)∑​I(c,yk​)∗dist(x,t),c∈Nk​(y)
其中,dist为计算两个向量距离的函数,t⃗\vec tt为未知类别的数据点。

用于回归的平均值法

另外,KNN算法不仅用于分类,也可用于回归 —— 回归与分类的根本区别在于输出空间是否为一个度量空间

所以,如果数据向量的对应的标签(类别)也可以进行量化衡量的话,
那么采用平均值法加权平均值法就可以得出测试点的预测值。

平均值:y0=∑ikyiky_0 = \frac{\sum_i^{k} y_i}{k}y0​=k∑ik​yi​​
加权平均值:y0=∑ikyi∗dist(x⃗,t⃗)ky_0 = \frac{\sum_i^{k} y_i*dist(\vec x,\vec t)}{k}y0​=k∑ik​yi​∗dist(x,t)​

KNN算法的优缺点

  • 优点
  1. 算法本身简单、易于理解和实现
  2. 精度较高、对异常值不敏感
  3. 适用于大样本自动分类
  4. 需要参数估计很少,只有一个邻居个数 kkk
  5. 惰性学习,学习阶段仅仅是保存数据而已
  • 缺点
  1. 计算时间复杂度高
  2. 内存开销大,训练数据停驻在内存中
  3. 输出可解释性不强

机器学习入门 —— 超级详细的KNN算法学习笔记、KNN算法的三要素、KNN算法的优缺点相关推荐

  1. 超级详细的Python程序设计学习笔记,适合Python二级备考和自学Python的小白(me too)

    超级详细的Python学习笔记,适合Python二级备考和自学Python的小白(me too). 写作不易,喜欢的话点个赞吧

  2. Node.js (上)(超级详细的node.js学习笔记 !!!)

    目录 一.初识Node.js与内置模块 1.之前知识回顾(为Node.js理解做铺垫) 1.1浏览器中的js的组成部分 1.2 为什么js可以在浏览器中被执行 1.3 为什么浏览器可以操作Bom和Do ...

  3. 【算法学习笔记001】捷联惯导算法心得

    1.四个概念:"地理"坐标系."机体"坐标系.他们之间换算公式.换算公式用的系数. 地理坐标系:东.北.天,以下简称地理.在这个坐标系里有重力永远是(0,0,1 ...

  4. 机器学习knn算法学习笔记使用sklearn库 ,莺尾花实例

    ** 机器学习knn算法学习笔记使用sklearn库 ,莺尾花实例. 具体knn算法是怎样的我这里就不再详细论述.在这里我注意总结我使用knn算法进行一个分类的分析 ** 分析过程 1.前期准备 引入 ...

  5. 机器学习篇01:在线学习的支持向量机算法学习笔记

    在线学习的支持向量机算法学习笔记 oisvm算法实现说明 oisvm算法实现说明 % 本程序是用于实现基于在线学习的调制信号识别的程序 % % % 第一步:调制信号的生成 % 首先是7个信号:2ASK ...

  6. 《算法图解》学习笔记(十):K 最近邻算法(附代码)

    欢迎关注WX公众号:[程序员管小亮] python学习之路 - 从入门到精通到大师 文章目录 欢迎关注WX公众号:[程序员管小亮] [python学习之路 - 从入门到精通到大师](https://b ...

  7. 基于MVS的三维重建算法学习笔记(二)— 立体视觉的几何基础总结

    基于MVS的三维重建算法学习笔记(二)- 立体视觉的几何基础总结 声明 概述 1. 常见三维数据类型 2. 三维形状的几种表达形式 3. 三维空间刚体运动 4. 李群和李代数 5. 相机标定 6. 非 ...

  8. Python最优化算法学习笔记(Gurobi)

    微信公众号:数学建模与人工智能 github地址:https://github.com/QInzhengk/Math-Model-and-Machine-Learning Python最优化算法学习笔 ...

  9. 【JVM学习笔记】内存回收与内存回收算法 就哪些地方需要回收、什么时候回收、如何回收三个问题进行分析和说明

    目录 一.相关名词解释 垃圾收集常用名词 二.哪些地方需要回收 本地方法栈.虚拟机栈.程序计数器 方法区 Java堆 三.什么时候回收 1. 内存能否被回收 内存中的引用类型 引用计数算法 可达性分析 ...

最新文章

  1. excel中最常用的30个函数_最常用日期函数汇总excel函数大全收藏篇
  2. Python语言编程基础
  3. C六:define宏定义
  4. 完美/兼容版添加事件以及删除事件
  5. 点钞机语音怎么打开_原来微信语音一样能转发? 居然还有人不知道
  6. Liststring绑定到DataGridView控件
  7. Corn Fields——POJ3254状态压缩Dp
  8. N划分成若干个奇正整数之和的分法有多少种---动态规划
  9. 关于滑动窗口的小小小tip
  10. about command : wget
  11. 成功之道——永远的知识
  12. 在苹果Mac中如何不用鼠标刪除文件?
  13. ceph纠删码性能测试
  14. Qt交互界面设计探索
  15. 关于深圳商事登记招商ukey签名无效
  16. 互联网日报 | 4月5日 星期一 | 华为首款台式显示器登陆海外;腾讯视频VIP会员4月10日起涨价;我国民宿房源超300万套...
  17. 漫谈程序员系列:请区别对待女程序员
  18. 亲自动手搭建微服务框架和测试环境-1-背景
  19. 电脑服务器显示过期,win10系统提示你的设备存在过期风险怎么办_网站服务器运行维护,win10...
  20. 用ThoughtWorks.QRCode生成二维码时出现“索引超出了数组界限”的错误

热门文章

  1. Audio音频系统 —AudioFlinger(1)
  2. 【MAPBOX基础功能】28、mapbox地图基础工具 -获取当前地图中心点
  3. LINUX查看系统、资源、磁盘和分区、网络、进程、用户
  4. App Inventor 2 语音交互机器人Robot,使用讯飞语音识别引擎
  5. 关于安全支付的几个tips
  6. .rar .zip格式压缩原理
  7. zabbix监控华为路由器
  8. 微信小程序 wxParse使用
  9. 大学计算机word实践,大学计算机实践教程实验报告2010版
  10. 数据库安全保护、权限授予