跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++AI算法

KNN 算法:距离度量选择与数据维度归一化

KNN 算法依赖距离度量进行预测,常用欧式、曼哈顿等距离公式。在多特征场景下,若特征量纲差异大(如身高与鞋码),未归一化会导致大数值特征主导结果,引发分类错误。通过除以极差等方式进行归一化,可确保各特征权重平等,提升模型准确性。

MqEngine发布于 2026/3/24更新于 2026/5/2316 浏览
KNN 算法:距离度量选择与数据维度归一化

k 近邻(K-Nearest Neighbors,简称 KNN)是一种经典的监督学习算法,广泛应用于分类和回归任务。在工程实践中,例如使用 OpenCV 时,可以通过 cv.ml.KNearest_create() 来调用相关接口。

距离度量的选择

KNN 的核心在于计算样本间的距离,并按递增次序排序。常用的距离度量包括以下几种:

L∞距离(切比雪夫距离) ![x_{i}=(x_{i}^{(1)},x_{i}^{(2)},\cdots,x_{i}^{(n)})^{34m\mathrm{T}} L_{\infty}(x_{i},x_{j})=\max_{l}\mid x_{i}^{(l)}-x_{j}^{(l)}\mid

曼哈顿距离(L1 范数) L_{1}(x_{i},x_{j})=\sum_{l=1}^{n}|x_{i}^{(l)}-x_{j}^{(l)}|

Lp 距离 L_{p}(x_{i},x_{j})=(\sum_{l=1}^{n}\mid x_{i}^{(l)}-x_{j}^{(l)}\mid^{p})^{\frac{1}{p}}

欧式距离(L2 范数) L_{2}(x_{i},x_{j})=(\sum_{l=1}^{n}|x_{i}^{(l)}-x_{j}^{(l)}|^{2})^{\frac{1}{2}}

数据维度归一化

当特征处于不同量纲或数量级差异较大时,直接计算距离往往会导致偏差。假设样本特征为 {(x_{i1},x_{i2},\ldots,x_{in})}_{i=1}^m,通常的做法是取每一维度的最大值减最小值:

M_j=\max_{i=1,\ldots,m}x_{ij}-\min_{i=1,\ldots,m}x_{ij}

随后在计算距离时,将每个坐标轴除以相应的 M_j 进行归一化:

d((y_1,\ldots,y_n),(z_1,\ldots,z_n))=\sqrt{\sum_{j=1}^n\left(\frac{y_j}{M_j}-\frac{z_j}{M_j}\right)^2}

为什么要做归一化?

在多特征场景下,如果忽略量纲差异,数值大的特征会主导距离计算,导致小数值特征被'淹没'。

举个实际的例子:用身高 (cm) 和脚码判断性别。假设有 5 个训练样本:

  • A [(179,42),男]
  • B [(178,43),男]
  • C [(165,36),女]
  • D [(177,42),男]
  • E [(160,35),女]

这里第一维(身高)的数值范围约为 20,而第二维(脚码)仅为 8 左右。如果不归一化,身高特征的权重天然远大于脚码。我们拿测试样本 F[(167,43),男] 来试一下,取 k=3,计算欧式距离:

\begin{gathered} AF=\sqrt{(167-179)^2+(43-42)^2}=\sqrt{145} \ BF=\sqrt{(167-178)^2+(43-43)^2}=\sqrt{121} \ CF=\sqrt{(167-165)^2+(43-36)^2}=\sqrt{53} \ DF=\sqrt{(167-177)^2+(43-42)^2}=\sqrt{101} \ EF=\sqrt{(167-160)^2+(43-35)^2}=\sqrt{103} \end{gathered}

结果显示最近的三个样本是 C、D、E。其中 C、E 为女性,D 为男性,多数投票结果为'女性'。

但这显然是错的。现实中女性穿 43 码鞋的概率远低于男性。问题出在哪?正是量纲差异导致身高权重大得离谱,掩盖了脚码这一关键特征。所以,在计算前必须让每个特征站在同一起跑线上,这就是归一化的意义所在。

目录

  1. 距离度量的选择
  2. 数据维度归一化
  3. 为什么要做归一化?
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Flutter 跨平台时间处理实战:time_machine 库在 OpenHarmony 上的适配与优化
  • 本地知识库部署:FastGPT 与 Dify 对接 Ollama 指南
  • C++ 网络编程实战:基于 TCP 协议的简易计算器
  • Python 处理 JSON 如何保持字段顺序?底层机制解析
  • LIO-SAM 在 ROS2 Ubuntu22 Humble 下的部署指南
  • 反无人机智能指控系统架构与关键技术思考
  • Ubuntu 系统下 Python 连接 KingbaseES 数据库实现增删改查
  • 连接管理模块和服务器模块设计
  • 采样过程源码解析:从 logits 到 token 的采样策略
  • WebGIS 实战:WKT 转 GeoJSON 技巧与 Leaflet 集成
  • macOS 终端工具实战:MobaXterm 替代方案与组合建议
  • Windows Git 安装与配置全流程指南
  • 2026 年 3 月 18 日人工智能产业动态:算力、智能体与生态
  • OpenClaw AI 编程上下文 Token 限制分析与扩容方案
  • C++ GESP 三级认证手册:计算机基础与算法
  • AI Agent 辅助工具:Superpowers 框架使用与原理分析
  • Windows 系统下 Python 环境变量设置指南
  • Git 入门指南:版本控制基础与协作流程
  • 大模型入门学习教程:从基础到工程化实践
  • SkyWalking 实现 Kafka 与 RabbitMQ 消息链路追踪实战

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online