K 近邻算法(K-Nearest Neighbor),简称 KNN 算法 简介

K 近邻算法(K-Nearest Neighbor),简称 KNN 算法

基于距离计算的方式来解决分类问题.

数学描述: 对于一个待测的样本点,我们去参考周围最近的已知样本点的分类,如果周围最近的 K 个样本点属于第一类,我们就可以把这个待测样本点归于第一类。

数学公式计算两个样本之间的距离:

  • 欧氏距离 (Euclidean Space)
  • 曼哈顿距离(Manhattan Distance)
  • 切比雪夫距离(Chebyshev Distance)
  • 可夫斯基距离(Minkowski Distance)
  • 余弦相似度(Cosine Similarity)
  • 汉明距离(Hamming Distance)
  • Jaccard相似度(Jaccard Similarity)

详细介绍可以点击查看: https://blog.csdn.net/galoiszhou/article/details/135130388

通过一个样本周围最近的 K 个样本点来进行分类.

  • K = 1 时, 最近的 1 个样本的值是什么分类, 则待测样本就是什么分类
  • K = 3 时, 最近的 3 个样本的值的分类, 那个分类的样本多, 则待测结果就是哪个分类

K 取值:

  • 当 K 越小, 越容易过拟合
  • 当 K 越大, 越容易欠拟合
  • 对于 K 的取值, 可以从 1 开始不断尝试, 对比准确率, 最后选取效果最好的 K 值.

KNN 算法的优点:

  • 简单易懂
  • 处理边界不规则数据的分类问题, 比线性分类器的效果好

KNN 算法的缺点:

  • 只适合小数据集
  • 对数据容错性偏低
    • 存在错误样本
    • 数据分布不均衡

改进:

  • 大数据集, 选择 KNN 的优化算法, 如 kd-tree
  • 数据分布不均衡, 对待测样本周围 K 个近邻数据增加权重, 距离越近, 权重越大.

KNN 算法适合场景:

  1. 规模数据集:
    • KNN 在小规模数据集上表现良好。当数据集较小且维度不高时,KNN算法能够提供较好的分类效果。
  2. 非线性数据:
    • KNN 不依赖数据的分布假设,适用于非线性数据。它对于数据中包含的复杂结构和边界的识别较为有效。
  3. 无噪声数据:
    • KNN 对于噪声较小的数据表现较好。在数据相对干净的情况下,KNN能够更准确地判定数据点的近邻。
  4. 数据集具有局部结构:
    • 如果数据集具有一定的局部结构,即相似的样本点在空间中彼此靠近,KNN 能够较好地捕捉到这种局部关系。
  5. 多类别问题:
    • KNN 对多类别问题表现较好,且对类别之间的决策边界不敏感。这使得它在处理多类别分类问题时具有一定的优势。
  6. 对计算开销较为敏感:
    • 在模型训练阶段,KNN 不需要训练过程,只需存储训练数据。这使得它对于计算开销较为敏感的场景(相对于训练开销较大的算法)非常适用。
  7. 特征维度较低:
    • KNN 在特征维度较低的情况下表现较好。随着维度的增加,KNN算法可能受到“维度灾难”影响,因为在高维空间中,距离计算变得困难,且样本稀疏性增加。
  8. 领域边界复杂但类别分布相对均匀:
    • KNN 能够较好地适应领域边界较为复杂但类别分布相对均匀的情况,因为它不会对类别分布做出明确的假设。

一些适用于KNN算法的案例

  • 图像识别和分类:
    • KNN可用于图像分类,例如手写数字识别、人脸识别等。它能够有效地捕捉图像中像素的相似性,从而进行分类。
  • 推荐系统:
    • KNN可以用于协同过滤,通过分析用户之间的相似性来为用户提供个性化的推荐。例如,为用户推荐电影、商品或音乐。
  • 医学诊断:
    • 在医学领域,KNN可以用于诊断患者疾病或根据患者的医疗历史为其提供个性化的治疗建议。
  • 欺诈检测:
    • KNN可用于检测信用卡欺诈、网络安全威胁等。通过分析异常模式,KNN可以标识出不正常的行为。
  • 自然语言处理:
    • 在文本分类、情感分析等自然语言处理任务中,KNN可以用于度量文本之间的相似性,以便进行分类或聚类。
  • 预测:
    • KNN可用于预测问题,如股票价格预测、房价预测等。通过分析相似样本的标签,可以为新样本提供预测值。
  • 无监督学习:
    • KNN还可以用于聚类问题,将相似的样本分组在一起,无监督地发现数据的内在结构。
  • 语音识别:
    • 在语音处理领域,KNN可以用于识别语音模式,例如说话人识别、语音指令识别等。
  • 人脑活动分类:
    • 在神经科学中,KNN可以用于分析和分类不同的脑电图(EEG)模式,以研究脑部活动。
  • 农业预测:
    • KNN可以用于预测农业领域的一些问题,如作物生长预测、疾病诊断等。

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

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

相关文章

Kafka集群架构原理(待完善)

kafka在zookeeper数据结构 controller选举 客户端同时往zookeeper写入, 第一个写入成功(临时节点), 成为leader, 当leader挂掉, 临时节点被移除, 监听机制监听下线,重新竞争leader, 客户端也能监听最新leader leader partition自平衡 leader不均匀时, 造成某个节点压力过大, …

SpringCloudGateway网关处拦截并修改请求

SpringCloudGateway网关处拦截并修改请求 需求背景 老系统没有引入Token的概念,之前的租户Id拼接在请求上,有的是以Get,Param传参形式;有的是以Post,Body传参的。需要在网关层拦截请求并进行请求修改后转发到对应服务。…

工业自动化的通信核心—钡铼技术R10A工业级路由器介绍

随着工业自动化的快速发展,工业通信技术也日新月异。在这个信息时代,工业通信设备的稳定性、可靠性和高效性变得尤为重要。作为工业自动化的核心部件之一,钡铼技术R10A工业级路由器以其出色的性能和卓越的功能在行业内赢得了广泛的赞誉。本文…

docker学习(十二、Redis主从容错迁移)

文章目录 一、容错切换迁移挂一个master节点6381,查看集群信息主节点挂一个,对应从节点切换为主节点,数据获取测试恢复挂的主节点,主从关系变化 二、小思考 docker搭建Redis集群相关知识: docker学习(九、分…

C# SQLite基础工具类

目录 1、安装System.Data.SQLite工具包 2、创建数据库 3、数据库的连接与断开 4、执行一条SQL语句 5、批量执行sql语句 6、返回首行首列值 7、执行sql语句返回datatable 1、安装System.Data.SQLite工具包 2、创建数据库 /// <summary> /// 数据库路径 …

FAQ:Operator Overloading篇

文章目录 1、What’s the deal with operator overloading? &#xff08;运算符重载是怎么回事?&#xff09;2、What are the benefits of operator overloading?&#xff08;运算符重载有什么好处&#xff1f;&#xff09;3、What are some examples of operator overloadi…

Github2023-12-22开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2023-12-22统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目4TypeScript项目2非开发语言项目2C项目1C项目1HTML项目1Dart项目1 Tailwind CSS&#xff1a;快速U…

main函数获取传入的参数

文章目录 代码获取到参数转整型 代码 #include <stdio.h> #include <stdlib.h> #include <getopt.h> #include <stdint.h>static uint8_t optstr[] "?:i:o:v:h:"; static struct option long_options[] {{"input", required_…

c# opencv 提取图片文字,如读取身份证号

在C#中使用OpenCV读取身份证号码并不是一个直接的任务&#xff0c;因为OpenCV主要是一个用于图像处理和计算机视觉的库&#xff0c;它并不直接支持文本识别功能。然而&#xff0c;你可以结合其他OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xf…

spark-thrift-server 报错 Wrong FS

文章目录 [toc]具体报错实际原因查看 hive 元数据修改 spark-thrift-server 配置修改 hive 元数据 具体报错 spark-thrift-server 执行删表语句&#xff0c;出现如下报错 Error: org.apache.hive.service.cli.HiveSQLException: Error running query: org.apache.spark.sql.Ana…

kibana-7.15.2 一分钟下载、安装、部署 linux

文章目录 一、下载安装部署 1. 下载2. 解压3. 修改配置 二、kibana 启动 2.1. 创建kibana 用户2.2. 赋予权限2.3. 切换用户2.4. kibana启动2.5. 监控服务2.6. 监控服务2.7. kibana停止2.8. 效果图 三、kibana 启动2 3.1. 浏览器访问3.2. 效果图 一、下载安装部署 https:…

HTML美化网页

使用CSS3美化的原因 用css美化页面文本,使页面漂亮、美观、吸引用户 可以更好的突出页面的主题内容,使用户第一眼可以看到页面主要内容 具有良好的用户体验 <span>标签 作用 能让某几个文字或者某个词语凸显出来 有效的传递页面信息用css美化页面文本&#xff0c;使页面漂…

面试题:JVM 对锁都进行了哪些优化?

文章目录 锁优化自旋锁和自适应自旋锁消除锁粗化逃逸分析方法逃逸线程逃逸通过逃逸分析&#xff0c;编译器对代码的优化 锁优化 jvm 在加锁的过程中&#xff0c;会采用自旋、自适应、锁消除、锁粗化等优化手段来提升代码执行效率。 自旋锁和自适应自旋 现在大多的处理器都是…

易点易动设备管理系统:解决企业设备管理难题的利器

在现代企业中&#xff0c;设备管理是一个至关重要的环节。无论是制造业、物流业还是服务业&#xff0c;设备的高效管理对于企业的运营和竞争力都至关重要。然而&#xff0c;许多企业在设备管理方面面临着各种挑战。为了解决这些难题&#xff0c;易点易动设备管理系统应运而生。…

C语言数组与指针的关系,使用指针访问数组元素方法

数组与指针 如果您阅读过上一章节“C语言数组返回值”中的内容&#xff0c;那么您是否会产生一个疑问&#xff0c;C语言的函数要返回一个数组&#xff0c;为什么要将函数的返回值类型指定为指针的类型&#xff1f;换句话说&#xff0c;C语言中数组和指针到底是什么关系呢&…

[vue]Echart使用手册

[vue]Echart使用手册 使用环境Echart的使用Echart所有组件和图表类型Echart 使用方法 使用环境 之前是在JQuery阶段使用Echart&#xff0c;直接引入Echart的js文件即可&#xff0c;现在是在vue中使用,不仅仅时echarts包&#xff0c;还需要安装vue-echarts&#xff1a; "…

Pycharm解释器的配置: System Intgerpreter 、Pipenv Environment、Virtualenv Environment

文章目录 前提1. 环境准备2. 了解虚拟环境 一、进入Interpreter设置页二、添加Interpreter1. 方式一2. 方式二 三、 System Interpreter四、 Pipenv Environment前提条件&#xff1a;详细步骤1&#xff09; 选择pipenv2&#xff09; 设置Base Interpreter3&#xff09; 设置Pip…

程序员福利:好用的第三方api接口

空号检测&#xff1a;通过手机号码查询其在网活跃度&#xff0c;返回包括空号、停机等状态。手机在网状态&#xff1a;支持传入三大运营商的号码&#xff0c;查询手机号在网状态&#xff0c;返回在网等多种状态。反欺诈&#xff08;羊毛盾&#xff09;&#xff1a;反机器欺诈&a…

计算机网络个人小结

不同层的数据报的名称 应用层: data TCP层: segment IP 层: packet MAC层: frame MTU vs MSS: MTU&#xff1a;一个网络包的最大长度&#xff0c;以太网中一般为 1500 字节。 https://www.xiaolincoding.com/network/1_base/how_os_deal_network_package.html#linux-%E7%BD%91…

Centos9(Stream)配置Let‘s Encrypt (免费https证书)

1. 安装snap&#xff0c;用来安装certbot&#xff1a; sudo dnf install epel-release sudo dnf upgrade sudo yum install snapd sudo systemctl enable --now snapd.socket sudo ln -s /var/lib/snapd/snap /snap snap install core snap refresh core 2. 安装 certbot命令…