当前位置: 首页 > article >正文

【机器学习】K-Nearest Neighbor KNN算法原理简介及要点

KNN算法用于分类

    • 简介
    • KNN分类算法的流程
    • 距离度量
    • K值选择
    • 分类表决
      • 加权分类表决

简介

KNN的全称是K Nearest Neighbors. 这种算法可以被用来进行分类,原理是根据离特征点最近的K个点所属的类别进行分类。

KNN分类算法的流程

  • KNN算法的整体流程是我们需要将训练数据的特征点全部输入,这些特征点,假设有N维。
  • 输入需要预测的特征点,对这个特征点和之前所输入的训练数据的特征点,使用距离函数来求距离。
  • 选取K个距离最近的特征点,进行分类表决,即使用其中数量最多的分类来作为我们所求特征点的分类。

距离度量

KNN的输入的训练数据是N维特征向量,需要把我们已知的点的N维特征向量输入到模型中,进行预测时,需要将我们所需要预测的点的特征向量,计算其到已知的特征向量的距离,这个距离可以使用多种方式来进行计算,包括明氏距离曼哈顿距离欧式距离等。
曼哈顿距离是指的每一维度上的距离的加和。直观上来理解,就相当于我们看到了曼哈顿地区的地图,大楼方方正正,然后我们沿着地图上的路来行走,有直行有拐弯,而不是说直接穿越建筑使用直线上最短的路径来行走,这样得到的距离称为曼哈顿距离,也称为出租车距离。曼哈顿距离的概念在地图导航中经常被使用,因为我们在地图导航的时候不能直接穿过建筑,而是要沿着比较规则的路来行驶。
欧式距离,直观上理解,在数据为二维或三维时,就相当于在二维或三维空间中的两个点的直线距离。在更高维度的空间中,因为我们的特征向量有可能是N维的,所以涉及到这个问题。在向量为高维时,其计算方法就相当于两个向量的相应维度的差值的平方之和,最后取取平方根。这可以通俗的理解为二维,三维或更高维度的几何距离。

K值选择

第二个需要注意的问题是K值的选择。如果我们把K值选的过大,这样可能会导致欠拟合。假设我们取极端情况,K值等所有训练样本的特征点的数量。在这种情况下,任何一个需要判断分类的点,我们只需要输出所有特征向量中类别所对应数量最多的那个类别即可。当这个情况下,我们说出现了欠拟合(Underfit)
在K值过小的时候,会出现过拟合(Overfit)。在这种情况下,我们输入的任何数据,它的输出就是距离它最近的一个点的类别。在这种情况下,我们考虑的样本非常少,所以说难以得到其真正有实际意义的归属,分类容易被少量样本左右。
这里K值可以选一个奇数值,以防止出现多种类别数量相同的情况。

分类表决

计算完特征值后,对特征点的归属进行分类表决。分类表决就是说在K个距离最近的邻居中,哪个分类出现的次数最多,我们新的特征点就认为是哪个分类的,这是平均权值的分类表决。

加权分类表决

还有加权分类表决,可以给不同的特征点赋予不同的权重,然后以类别为分别计算加权分数,得到各个类别的最终分数,新的特征点就属于类别分数大的这一类

相关文章:

【机器学习】K-Nearest Neighbor KNN算法原理简介及要点

KNN算法用于分类 简介KNN分类算法的流程距离度量K值选择分类表决加权分类表决 简介 KNN的全称是K Nearest Neighbors. 这种算法可以被用来进行分类,原理是根据离特征点最近的K个点所属的类别进行分类。 KNN分类算法的流程 KNN算法的整体流程是我们需要将训练数据…...

ARM嵌入式学习--第十三天(I2C)

I2C --介绍 I2C(Inter-intergrated Circuit 集成电路)总线是Philips公司在八十年代初推出的一种串行、半双工的总线,主要用于近距离、低速的芯片之间的通信;I2C总线有俩根双向的信号线,一根数据线SDA用于收发数据&…...

error: externally-managed-environment

当你执行 pip3 install ipykernel 时遇到 error: externally-managed-environment 错误,这是因为从 Python 3.11 开始,为了避免破坏系统级 Python 环境,引入了外部管理环境(externally - managed environment)的概念&a…...

使用PyCharm进行Django项目开发环境搭建

如果在PyCharm中创建Django项目 1. 打开PyCharm,选择新建项目 2.左侧选择Django,并设置项目名称 3.查看项目解释器初始配置 4.新建应用程序 执行以下操作之一: 转到工具| 运行manage.py任务或按CtrlAltR 在打开的manage.pystartapp控制台…...

移动机器人规划控制入门与实践:基于navigation2 学习笔记(一)

课程实践: (1)手写A*代码并且调试,总结优缺点 (2)基于Gazebo仿真,完成给定机器人在给定地图中的导航调试 (3)使用Groot设计自己的导航行为树 掌握一门技术 规划控制概述 常见移动机器人...

TCP服务器与客户端搭建

一、思维导图 二、给代码添加链表 【server.c】 #include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #include <fcntl.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <string.…...

flutter Selector 使用

在 Flutter 中&#xff0c;Selector 是 provider 包中的一个组件&#xff0c;用于在状态管理中高效地选择和监听特定部分的状态变化。Selector 可以帮助你避免不必要的重建&#xff0c;只在你关心的数据发生变化时才重建 widget。 基本用法 Selector 的基本用法如下&#xff…...

deepseek来讲lua

Lua 是一种轻量级、高效、可嵌入的脚本语言&#xff0c;广泛应用于游戏开发、嵌入式系统、Web 服务器等领域。以下是 Lua 的主要特点和一些基本概念&#xff1a; 1. 特点 轻量级&#xff1a;Lua 的核心非常小&#xff0c;适合嵌入到其他应用程序中。高效&#xff1a;Lua 的执…...

【大数据技术】本机DataGrip远程连接虚拟机MySQL/Hive

本机DataGrip远程连接虚拟机MySQL/Hive datagrip-2024.3.4VMware Workstation Pro 16CentOS-Stream-10-latest-x86_64-dvd1.iso写在前面 本文主要介绍如何使用本机的DataGrip连接虚拟机的MySQL数据库和Hive数据库,提高编程效率。 安装DataGrip 请按照以下步骤安装DataGrip软…...

【C++篇】C++11新特性总结1

目录 1&#xff0c;C11的发展历史 2&#xff0c;列表初始化 2.1C98传统的{} 2.2&#xff0c;C11中的{} 2.3&#xff0c;C11中的std::initializer_list 3&#xff0c;右值引用和移动语义 3.1&#xff0c;左值和右值 3.2&#xff0c;左值引用和右值引用 3.3&#xff0c;…...

redis之RDB持久化过程

redis的rdb持久化过程 流程图就想表达两点&#xff1a; 1.主进程会fork一个子进程&#xff0c;子进程共享主进程内存数据(fork其实是复制页表)&#xff0c;子进程读取数据并写到新的rdb文件&#xff0c;最后替换旧的rdb文件。 2.在持久化过程中主进程接收到用户写操作&#x…...

操作系统—进程与线程

补充知识 PSW程序状态字寄存器PC程序计数器&#xff1a;存放下一条指令的地址IR指令寄存器&#xff1a;存放当前正在执行的指令通用寄存器&#xff1a;存放其他一些必要信息 进程 进程&#xff1a;进程是进程实体的运行过程&#xff0c;是系统进行资源分配和调度的一个独立单位…...

CV(11)-图像分割

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 图像分割 语义分割不需要区分具体的个体&#xff0c;实例分割需要 反卷积/转置卷积&#xff1a; 它并不是正向卷积的完全逆过程。反卷积是一种特殊的正向卷积&#xff0c;先按照一定的比例通过补0 来扩大输入图像的尺寸&…...

【STM32系列】利用MATLAB配合ARM-DSP库设计FIR数字滤波器(保姆级教程)

ps.源码放在最后面 设计IIR数字滤波器可以看这里&#xff1a;利用MATLAB配合ARM-DSP库设计IIR数字滤波器&#xff08;保姆级教程&#xff09; 前言 本篇文章将介绍如何利用MATLAB与STM32的ARM-DSP库相结合&#xff0c;简明易懂地实现FIR低通滤波器的设计与应用。文章重点不在…...

STM32上部署AI的两个实用软件——Nanoedge AI Studio和STM32Cube AI

1 引言 STM32 微控制器在嵌入式领域应用广泛&#xff0c;因为它性能不错、功耗低&#xff0c;还有丰富的外设&#xff0c;像工业控制、智能家居、物联网这些场景都能看到它的身影。与此同时&#xff0c;人工智能技术发展迅速&#xff0c;也逐渐融入各个行业。 把 AI 部署到 STM…...

Next.js简介:现代 Web 开发的强大框架(ChatGPT-4o回答)

prompt: 你是一位专业的技术博客撰稿人&#xff0c;你将写一篇关于介绍next.js这个开发框架的技术博文&#xff0c;语言是中文&#xff0c;风格专业严谨&#xff0c;用词自然、引人入胜且饶有趣味 在现代 Web 开发的世界中&#xff0c;选择合适的框架可以显著提升开发效率和应用…...

Kubernetes与Deepseek

人工智能&#xff08;AI&#xff09;与云计算的融合正在加速&#xff0c;而 Kubernetes&#xff08;K8s&#xff09; 正在成为 AI 发展的基础设施之一。作为一匹 AI 领域的黑马&#xff0c;Deepseek 需要依靠强大的计算资源和高效的管理工具来训练和部署其大规模 AI 模型&#…...

qt+gstreamer快速创建一个流媒体播放器

目录 1 前言 2 playbin3 3 videooverlay 4 关键代码 5 运行示例 1 前言 最近因为工作需求&#xff0c;要实现一个桌面流媒体播放器来支持常见的流媒体协议&#xff0c;经过调研发现使用gstreamer配合一些桌面级的gui应用开发工具如qt可以进行快速实现&#xff0c;在此进…...

RAID独立硬盘冗余阵列

目录 一、RAID基本功能 二、RAID常见级别 三、实现方式 1、软件磁盘阵列 2、硬件磁盘阵列 四、热备盘 RAID&#xff08;Redundant Array of Independent Disks&#xff09;是一种通过将多个硬盘组合成一个逻辑单元来提升存储性能、冗余性或两者兼具的技术。 一、RAID基本…...

DeepSeek V2报告阅读

概况 MoE架构&#xff0c;236B参数&#xff0c;每个token激活参数21B&#xff0c;支持128K上下文。采用了包括多头潜在注意力&#xff08;MLA&#xff09;和DeepSeekMoE在内的创新架构。MLA通过将KV缓存显著压缩成潜在向量来保证高效的推理&#xff0c;而DeepSeekMoE通过稀疏计…...

超详细UE4(虚幻4)第一人称射击(FPS)游戏制作教程

超详细UE4(虚幻4)第一人称射击(FPS)游戏制作教程 引言 在游戏开发领域,第一人称射击(FPS)游戏一直是最受欢迎的类型之一。从经典的《反恐精英》(CS)到现代的《使命召唤》(Call of Duty),FPS游戏凭借其紧张刺激的游戏体验和高度沉浸感,吸引了无数玩家。如果你是一…...

【开发电商系统的技术选型】

开发电商系统的技术选型是一个复杂而细致的过程&#xff0c;涉及到多个方面和层面的考量。以下是一份详细的技术选型指南&#xff1a; 前端技术 基础技术 HTML5/CSS3/JavaScript&#xff1a;这是构建现代网页应用的基础。HTML5提供了丰富的语义元素&#xff0c;便于搜索引擎优…...

JAVA异步的TCP 通讯-服务端

一、服务端代码示例 import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.AsynchronousServerSocketChannel; import java.nio.channels.AsynchronousSocketChannel; import java.nio.channels.Completion…...

零基础Vue入门6——Vue router

本节重点&#xff1a; 路由定义路由跳转 前面几节学习的都是单页面的功能&#xff08;都在专栏里面https://blog.csdn.net/zhanggongzichu/category_12883540.html&#xff09;&#xff0c;涉及到项目研发都是有很多页面的&#xff0c;这里就需要用到路由&#xff08;vue route…...

关于JS继承的七种方式和理解

1.原型链继承 function Fun1() {this.name parentthis.play [1, 2, 3] } function Fun2() {this.type child }Fun2.prototype new Fun1()let s1 new Fun2() let s2 new Fun2() s1.play.push(4) console.log(s1.play, s2.play) // [1, 2, 3, 4] [1, 2, 3, 4]可以看到两个…...

Elasticsearch的使用场景、数据量级及选择原因?为什么没有用Hbase?

目录 Elasticsearch 的使用场景、数据量级及选择原因 1. Elasticsearch 的使用场景 2. 数据量级 3. 选择 Elasticsearch 的原因 4. 为什么选择 Elasticsearch 而不是 HBase 5. 数据量级对比 6. 总结 Elasticsearch 的使用场景、数据量级及选择原因 1. Elasticsearch 的…...

Oracle迁移到MySQL

Oracle迁移到MySQL业务需要全面改造适配&#xff0c;数据库对象和业务SQL语法需要一对一映射分析如何改写&#xff0c;根据业务使用实际情况评估改造适配成本较高。 目前&#xff0c;已有数据库产品能力缺少自动化迁移工具&#xff0c;需要依赖生态产品能力&#xff0c;比如云和…...

.Net Core笔记知识点(跨域、缓存)

设置前端跨域配置示例&#xff1a; builder.Services.AddCors(option > {option.AddDefaultPolicy(policy > {policy.WithOrigins(originUrls).AllowAnyMethod().AllowAnyHeader().AllowCredentials();});});var app builder.Build();app.UseCors(); 【客户端缓存】接…...

【Vue】在Vue3中使用Echarts的示例 两种方法

文章目录 方法一template渲染部分js部分方法一实现效果 方法二template部分js or ts部分方法二实现效果 贴个地址~ Apache ECharts官网地址 Apache ECharts示例地址 官网有的时候示例显示不出来&#xff0c;属于正常现象&#xff0c;多进几次就行 开始使用前&#xff0c;记得先…...

每日Attention学习18——Grouped Attention Gate

模块出处 [ICLR 25 Submission] [link] UltraLightUNet: Rethinking U-shaped Network with Multi-kernel Lightweight Convolutions for Medical Image Segmentation 模块名称 Grouped Attention Gate (GAG) 模块作用 轻量特征融合 模块结构 模块特点 特征融合前使用Group…...