算法基础:k最近邻算法

2023-11-17

本博客所有内容均整理自《算法图解》,欢迎讨论交流~

了解过机器学习这个概念,一定知道有一种名为k最近邻的算法,简称KNN。

对于k最近邻算法的定义,百度百科是这样给出的:K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

通俗来说,就是近朱者赤,近墨者黑的道理。在有标签的监督学习中,k最近邻一般用于分类,即根据与某一个特征点离得最近的k个点的分类来决定该点的分类,一般是少数服从多数的决策;而在无标签的无监督学习中,k最近邻一般用于聚类,即将某点及与其离得最近的k个点聚到同一个类别中。不过话是这么说,一般对于无监督学习,人们通常使用的是K-Means算法,即k均值算法。


1、分类问题

对于KNN算法的应用,我们首先来看一个例子。

对于下面的这个水果,我们如何判断它具体是哪一个品种呢?

 

当然,理论上来说,我们必须根据生活经验才能做出判断,我们知道,类似于图中水果的形状和色泽的水果有橙子和柚子,同时我知道,柚子通常比橙子更大,更红。

所以我的脑子里有了如下所示的图表:

 

所以根据这个图表,以及上图中的水果又大又红的特点,我判断该水果很可能是柚子!

这并不难,但是下面这样的水果呢?

 

这个水果的大小和色泽都趋近于平庸,不大不小,不红不橙。

那么问题来了,我们如何判断这个水果的品种呢?

试想一下生活中的经验,对于一个陌生人,我们如何判断这个人的职业呢?我们一般会根据这个人的朋友来判断,如果这个人的朋友都是什么科学家啊工程师啊之类的,我们就认为这个人很可能是一个科研工作者;而如果这个人的朋友大多是什么记者啊播音员啊导演啊之类的,我们就认为这个人很可能是一个新闻传媒工作者。

这是自然而然的事情,但是这个自然而然的判断思路,其实就是k最近邻算法。

我们回到上面的问题,要判断图中水果的品种,我们就来看它的“朋友”,当然,这里我们把它的“朋友”称为“邻居”。

我们来看看离它最近的三个邻居:

 

如图所示,在离它最近的三个邻居中,有两个是橙子,有一个是柚子,所以根据投票法(其实就是少数服从多数)的决策,我们认为这个水果是一个橙

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法基础:k最近邻算法 的相关文章

  • QT 串口发送接收(带发送缓冲区)

    QT 串口发送接收 带发送缓冲区 串口代码更改 这里记录一下 接收因为是类似于中断的方式 接收一次处理一次 就没做接收缓冲区 与主板通讯模式为主从模式 串口发送函数用时钟轮询该函数 文章目录 QT 串口发送接收 带发送缓冲区 变量定义 串口

随机推荐

  • cuda编译错误

    error LNK2019 无法解析的外部符号 cudaDeviceSynchronize error LNK2019 无法解析的外部符号 cudaConfigureCall error LNK2019 无法解析的外部符号 cudaSetu
  • Qt5中.ui图形界面添加背景图片实操

    为了图形界面能看得下去 还是要添加一些图片之类的 基于之前的文章基于pyqt5简单搭建 ui图形界面 的界面框架来给界面简单添加一个背景图 1 电脑开始中找到 Qt Designer打开 2 弹出窗口点击 打开 有基础框架的 ui文件 所以
  • openstack镜像的管理与使用

    1 创建项目和用户 1 1 创建项目和用户 用SSH工具连接控制节点 这里是10 10 83 3 使用admin用户权限 执行如下命令 root admin openrc 1 2创建一个test项目 openstack project cr
  • python真的很骚可惜你不会

    python基本语法 博客主页 微笑的段嘉许博客主页 欢迎关注 点赞 收藏 留言 本文由微笑的段嘉许原创 51CTO首发时间 2023年1月日30 坚持和努力一定能换来诗与远方 作者水平很有限 如果发现错误 一定要及时告知作者哦 感谢感谢
  • asp.net core abp 视频教程1

    B站视频教程 abp视频教程1 本次视频主要讲解abp模板工程的下载及运行 践行费曼学习法
  • 数字IC手撕代码-兆易创新笔试真题

    前言 本专栏旨在记录高频笔面试手撕代码题 以备数字前端秋招 本专栏所有文章提供原理分析 代码及波形 所有代码均经过本人验证 目录如下 1 数字IC手撕代码 分频器 任意偶数分频 2 数字IC手撕代码 分频器 任意奇数分频 3 数字IC手撕代
  • elementUI table宽度自适应fit

    fit true 或者直接为 fit 转载于 https www cnblogs com panax p 11239664 html
  • 零基础入门语义分割-Task3 语义分割模型发展

    零基础入门语义分割 Task3 语义分割模型发展 3 语义分割模型发展 3 1 学习目标 3 2 FCN 3 3 SegNet 3 4 Unet 3 5 DeepLab 3 6 RefineNet 3 7 PSPNet 3 8 基于全卷积的
  • Transformer--Attention is All You Need (推荐--非常详细)

    文章目录 前言 对Transformer的直观认识 论文地址 模型提出的背景 或者动机 本论文模型 Tranformer Model Architecture Encoder residual connection 残差连接 Layer N
  • 机器人操作系统ROS

    锋影 email 174176320 qq com 如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额0 1元起步 多少随意 ROS已经发布八周年了 在国外科研机构中非常受欢迎 目前 以美国西南研究院为首的几位大佬
  • 全连接层(Fully Connected Layer)

    一 概述 全连接层的每一个结点都与上一层的所有结点相连 用来把前边提取到的特征综合起来 由于其全相连的特性 一般全连接层的参数也是最多的 在卷积神经网络的最后 往往会出现一两层全连接层 全连接一般会把卷积输出的二维特征图转化成一维的一个向量
  • 金山WPS笔试题总结

    第一题 分别输出什么 var arr arr a 1 console log arr length 0 arr 2 2 console log arr length 3 arr length 0 console log arr a 1 这题
  • Mac安装protobuf 流程

    1 brew安装protobuf 1 安装brew ruby e curl fsSL https raw githubusercontent com Homebrew install master install 2 使用brew安装pro
  • 【超详细】记录从零开始学mmdetection(一)

    一 环境配置 本专题是为了记录学习mmdetection的过程 包括mmdetection的配置 代码的讲解 如何使用mmdetection训练自己的数据集 本节只记录第一部分 环境配置过程 本专题主要是在Linux下配置的 因为mmdet
  • Vue3.0开发之整合vue-admin-template模板

    起源 vue admin template模板算是一个比较好的前端开发模板 不过作者好像没有出vue3 0版本的 所以刚好自己在学习vue3 0 就想到开发一个vue3 0的模板 当然大部分代码都是参照vue admin template模
  • Threejs入门教程

    一 本地搭建Threejs官方文档网站 1 官网地址 Github https github com mrdoob three js 我们可以直接下载压缩包并解压或使用 git clone
  • python批量提取视频帧

    python批量提取视频帧 python批量提取视频帧 两种提取方式 按帧数提取 每个视频提取固定帧数 若所取帧数超过视频总帧数 则截取视频所有帧 按时间间隔提取 每个time提取一帧 1 使用示例 python video set py
  • 平衡小车设计_4_PID实现

    平衡小车设计 4 PID实现 参考平衡之家的算法实现 首先明确三个环的PID都是位置式PID 1 角度环 PD g tPidA actual roll g tPidA err g tPidA actual g tPidA set g tPi
  • Ubuntu20.04 搭建repo + gitlab的代码管理系统

    Ubuntu20 04 搭建repo gitlab的代码管理系统 1 为什么要用gitlab GitLab 是一个用于仓库管理系统的开源项目 使用Git作为代码管理工具 并在此基础上搭建起来的Web服务 安装方法是参考GitLab在GitH
  • 算法基础:k最近邻算法

    本博客所有内容均整理自 算法图解 欢迎讨论交流 了解过机器学习这个概念 一定知道有一种名为k最近邻的算法 简称KNN 对于k最近邻算法的定义 百度百科是这样给出的 K最近邻 k Nearest Neighbor KNN 分类算法 是一个理论