机器学习算法-K近邻算法-KNN

1. K近邻算法是什么?

定义:

K近邻是一种基于实例的懒惰学习(Lazy Learning)算法,用于分类和回归任务

  • 核心思想:“物以类聚”——通过计算样本间的距离,找到目标点的最近K个邻居,根据邻居的多数类别(分类)或平均值(回归)进行预测。

  • 非参数模型:不假设数据分布,直接依赖数据本身的结构。


2. 核心原理

工作流程
  1. 计算距离:使用欧氏距离、曼哈顿距离等衡量样本间相似度

  2. 选择K值:确定参与投票的邻居数量(如K=3)。

  3. 投票或平均:

    1. 分类:统计K个邻居中多数类别作为预测结果。

    2. 回归:取K个邻居目标值的平均值。

关键参数
  • K值:

    • K过小 → 对噪声敏感,容易过拟合。

    • K过大 → 忽略局部特征,可能欠拟合。

  • 距离度量:

    • 欧氏距离(默认):适用于连续特征。

    • 曼哈顿距离:对异常值更鲁棒。

    • 余弦相似度:适合文本或高维稀疏数据。

数据预处理
  • 标准化/归一化:消除不同特征量纲的影响(如年龄范围0-100 vs 收入范围0-1e6)。

  • 处理缺失值:填充或删除缺失样本。


3. 实际生产中的例子

案例1:推荐系统(相似用户推荐)
  • 场景:视频平台根据用户观看记录推荐内容。

  • 实现:

    • 将用户表示为特征向量(如观看类型、时长、评分)。

    • 找到与目标用户最接近的K个用户,推荐他们喜欢的视频。

  • 优点:简单直观,适合冷启动问题

案例2:医疗诊断(疾病分类)
  • 场景:根据患者症状判断疾病类型。

  • 特征:体温、血压、化验指标、病史编码。

  • 输出:疾病类别(如流感、肺炎)。

  • 应用:辅助医生快速匹配相似病例。

案例3:金融风控(欺诈检测)
  • 场景:识别信用卡异常交易。

  • 特征:交易金额、时间、地点、商户类型。

  • 输出:正常(0)或欺诈(1)。

  • 应用:标记与历史欺诈交易最相似的K笔交易。

案例4:图像分类(简单图像识别)
  • 场景:手写数字识别(如MNIST数据集)。

  • 实现:

    • 将图像像素展开为特征向量。

    • 计算测试图像与训练集中所有图像的欧氏距离,取最近K个邻居的多数类别。

  • 局限:计算成本高,适合小规模数据。


4. 生产中的优化方法

降低计算复杂度
  • KD树或球树:空间数据结构,加速近邻搜索(适合低维数据)。

  • 近似最近邻(ANN):如Facebook的FAISS库,用哈希或量化技术牺牲精度换速度(适合高维大数据)。

处理类别不平衡
  • 加权投票:根据邻居距离赋予不同权重(近邻投票权重更大)。

  • 调整K值:增加K以包含更多潜在少数类样本。

特征选择与降维
  • 使用PCA或LDA减少特征维度,缓解“维度灾难”(高维下距离区分度下降)。


5. 优缺点

优点
  • ✅ 简单易懂,无需训练过程(“懒惰学习”)。

  • ✅ 对数据分布无假设,适应复杂模式。

  • ✅ 天然支持多分类和回归任务。

缺点
  • ❌ 计算成本高(需存储全部数据,预测时实时计算)。

  • 对高维数据和大规模数据性能差(维度灾难)

  • ❌ 对噪声和不相关特征敏感。


6. 代码工具示例(Python)


7. 与逻辑回归的对比

​​维度​​​​K近邻​​​​逻辑回归​​
​​模型类型​​非参数,基于实例参数,基于概率模型
​​训练速度​​无需训练(惰性学习)需迭代优化参数
​​预测速度​​慢(需计算所有样本距离)快(直接计算加权和)
​​可解释性​​低(依赖局部邻居)高(权重反映特征重要性)
​​适用场景​​小数据、低维、非线性关系大数据、线性或近似线性关系

8. 适用场景总结

  • 推荐使用KNN:

    • 数据量较小且特征维度低(如数百样本、几十维度)。

    • 需要快速验证简单模型(如原型验证阶段)。

    • 数据存在复杂局部模式且无需全局解释。

  • 避免使用:

    • 数据量极大(百万级以上)或特征维度极高(如文本、图像)。

    • 实时性要求高(如高频交易系统)。


一句话总结

K近邻是“近朱者赤”的直观算法,凭借简单性和无假设特性,在小规模、低维场景中表现优异,但计算成本限制了其在大数据中的应用。

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

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

相关文章

基于vue框架的法律知识咨询普及系统gwuv7(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能:用户,知识类型,律师,律师推荐,法律知识,新闻类型,法律新闻,咨询律师 开题报告内容 基于Vue框架的法律知识咨询普及系统开题报告 一、研究背景与意义 随着法治社会建设的深入推进,公众对法律知识的需求呈现爆发式增长。然而…

Netty 揭秘CompositeByteBuf:零拷贝优化核心技术

CompositeByteBuf 类 核心设计目标​​ ​​虚拟缓冲区​​:将多个 ByteBuf 合并为单一逻辑视图,减少数据复制。​​零拷贝优化​​:通过组合而非复制提升性能。​​引用计数管理​​:统一管理底层 ByteBuf 的生命周期。 核心成…

用css实现文字字体颜色渐变

用css实现文字字体颜色渐变 background-clip 是CSS3中新增的属性,可以用于指定背景图片或颜色的绘制范围。利用 background-clip 属性实现文字颜色从左到右、从绿到白的渐变效果: 代码如下: .gradient-color {background-image: linear-gr…

SpringBatch处理数据性能优化

SpringBatch的Step默认使用同步方式批量处理数据,也可以通过配置将读数改为同步,处理和写入改为异步方式。 1、同步处理Step SpringBatch的Step一般由ItemReader、ItemProcessor和ItemWriter组成,其中ItemProcessor是可选的。他的设计思路的…

【机器学习深度学习】前馈神经网络(单隐藏层)

目录 一、什么是前馈神经网络? 二、数学表达式是什么? 三、为什么需要“非线性函数”? 四、NumPy 实现前馈神经网络代码示例 五、 运行结果 六、代码解析 6.1 初始化部分 6.2 前向传播 6.3 计算损失(Loss) 6…

设计模式系列(08):创建型模式 - 原型模式

系列导读:完成创建型模式的学习,我们来看最后一个创建型模式——原型模式。它通过复制已有对象来创建新对象,是一种独特的创建方式。 解决什么问题:通过复制现有对象来创建新对象,而不是重新实例化。适用于对象创建成本…

区块链到底是什么?

区块链本质上是一种去中心化的分布式账本技术,具有以下核心特点: - 去中心化:没有中央管理机构,数据由网络中的多个节点共同维护,比如比特币网络中各个节点都保存着完整账本。 - 分布式存储:数据不是存在一…

系统架构设计师论文分享-论ATAM的使用

我的软考历程 摘要 2023年2月,我司通过了研发纱线MES系统的立项,该系统为国内纱线工厂提供SAAS服务,旨在提高纱线工厂的数字化和智能化水平。我在本项目中担任系统架构设计师,负责整个项目的架构设计工作。本文结合我在该项目中…

vue-28(服务器端渲染(SSR)简介及其优势)

服务器端渲染(SSR)简介及其优势 服务器端渲染(SSR)是现代网络应用的关键技术,特别是使用 Vue.js 等框架构建的应用。它通过在服务器上渲染初始应用状态来弥补传统单页应用(SPA)的局限性&#x…

工业电子 | 什么是SerDes,为何工业和汽车应用需要它?

重点内容速览: 1. 什么是SerDes? 2. ADI:私有协议的GMSL将向公有协议转变 3. TI:工业和汽车有两套SerDes解决方案 4. Microchip:推出通用协议SerDes芯片 5. 罗姆:主要针对汽车领域 6. 国产SerDes芯…

大事件项目记录4-用户接口开发-更新用户基本信息

4)更新用户基本信息。 UserController.java: UserMapper.java: Update("update user set nickname #{nickname},email #{email},update_time #{updateTime} where id #{id}")void update(User user); UserServiceInterface…

Transformer结构--输入编码(BPE,PE)

在Transformer结构中,输入编码是模型处理文本数据的关键步骤,其中**BPE(Byte Pair Encoding,字节对编码)和PE(Positional Encoding,位置编码)**是两种重要的编码方式,它们…

Confluence-测试用例设计指导方法

测试经验知识库 典型的测试场景验证点各个项目有价值的经验和测试点 测试经验知识库 - 草稿测试用例执行量化指导建议 何时需要进行全量测试和如何定义和执行测试用例量的一些建议和标准 端对端(E2E)测试用例设计指导方案 在测试行业中,端到端…

浅析JVM

一、JVM运行流程 如图: JVM由四个部分构成: 1.类加载器 加载类文件到内存2.运行时数据区 写的程序需要加载到这里才能运行3.执行引擎 负责解释命令,提交操作系统执行4.本地接口 融合不同编程语言为java所用,如Java程序驱动打印…

多个 Job 并发运行时共享配置文件导致上下文污染,固化 Jenkins Job 上下文

基于 context.py 固化 Jenkins Job 上下文的完整方案,适用于你当前的工作流(Python Jenkins Pipeline),解决: 多个 Job 并发运行时共享配置文件导致上下文污染;读取环境变量或 JSON 文件时被其他 Job 修改…

简木易支付系统 功能齐全,对接接口超多

简木易支付系统,作为一款引领行业潮流的卓越支付解决方案,依托先进的 PHP MySQL 技术架构精心打造。在开发过程中,它巧妙运用了功能强大的 ThinkPHP8 框架,完美融合前端主流技术 Vue、Element 以及 Layuiadmin,共同铸…

【软考高项论文】信息系统项目的人力资源管理

摘要 本文围绕信息系统项目的人力资源管理展开论述。以我在2024年参与的为大型国有企业构建供应链管理系统项目为例,阐述了项目人力资源管理的主要流程,包括规划、组建、建设和管理团队四个过程,以及所运用的工具和理论。同时,分…

【EI会议征稿】东北大学主办第三届机器视觉、图像处理与影像技术国际会议(MVIPIT 2025)

一、会议信息 大会官网:www.mvipit.org 官方邮箱:mvipit163.com 会议地点:辽宁沈阳 主办单位:东北大学 会议时间:2025 年 9 月 27 日-9 月 29 日 二、征稿主题 集中但不限于“机器视觉、图像处理与影像技术”等其…

从零开始的云计算生活——第二十三天,稍作休息,Tomcat

目录 一.故事背景 二.Tomcat概述 1、Tomcat介绍 2、Tomcat历史 二、Tomcat原理分析 1、Http工作原理 2、Tomcat整体架构 3、Coyote连接器架构 4、Catalina容器架构 5、Jasper处理流程 6、JSP编译过程 7、Tomcat启动流程 8、Tomcat请求处理流程 三、Tomcat安装与配…

几种基于Doherty结构的GAN氮化镓功放设计方法介绍

功率放大器是现代无线通信系统中最重要的组件之一。理想情况下,它们能够以高线性度和高效率提供高输出功率。但通常在这三个关键的功率放大器性能参数之间需要进行权衡取舍,而且具有最高输出功率和线性度的放大器往往会牺牲效率。 在支持宽带宽和高数据…