K近邻(K-Nearest Neighbors, KNN)算法中距离度量方式和计算公式

在K近邻(K-Nearest Neighbors, KNN)算法中,距离度量方式用于计算样本之间的相似性或距离,这是选择“邻居”的基础。常见的距离度量方式有以下几种:

1. 欧氏距离(Euclidean Distance)

欧氏距离是最常用的度量方式之一,用于计算两个样本点之间的“直线”距离。适用于连续数值型特征。

公式为:
d ( x , y ) = ∑ i = 1 n ( x i − y i ) 2 d(x, y) = \sqrt{\sum_{i=1}^{n}(x_i - y_i)^2} d(x,y)=i=1n(xiyi)2
其中, x i x_i xi y i y_i yi 分别是两个样本 x x x y y y 在第 i i i 个特征上的取值, n n n 是特征的总数。

示例
若有两个二维点 x = ( 1 , 2 ) x = (1, 2) x=(1,2) y = ( 4 , 6 ) y = (4, 6) y=(4,6),则它们的欧氏距离为:
d ( x , y ) = ( 1 − 4 ) 2 + ( 2 − 6 ) 2 = 9 + 16 = 25 = 5 d(x, y) = \sqrt{(1-4)^2 + (2-6)^2} = \sqrt{9 + 16} = \sqrt{25} = 5 d(x,y)=(14)2+(26)2 =9+16 =25 =5

2. 曼哈顿距离(Manhattan Distance)

曼哈顿距离也称为“绝对值距离”或“城市街区距离”,它度量的是两点在各个坐标轴方向上的距离总和,适合网格状布局的数据。

公式为:
d ( x , y ) = ∑ i = 1 n ∣ x i − y i ∣ d(x, y) = \sum_{i=1}^{n} |x_i - y_i| d(x,y)=i=1nxiyi

示例
对同样的点 x = ( 1 , 2 ) x = (1, 2) x=(1,2) y = ( 4 , 6 ) y = (4, 6) y=(4,6),曼哈顿距离为:
d ( x , y ) = ∣ 1 − 4 ∣ + ∣ 2 − 6 ∣ = 3 + 4 = 7 d(x, y) = |1 - 4| + |2 - 6| = 3 + 4 = 7 d(x,y)=∣14∣+∣26∣=3+4=7

3. 闵可夫斯基距离(Minkowski Distance)

闵可夫斯基距离是欧氏距离和曼哈顿距离的泛化形式,通过改变参数 p p p 可以得到不同的距离度量方式。当 p = 1 p = 1 p=1 时,得到曼哈顿距离;当 p = 2 p = 2 p=2 时,得到欧氏距离。

公式为:
d ( x , y ) = ( ∑ i = 1 n ∣ x i − y i ∣ p ) 1 / p d(x, y) = \left( \sum_{i=1}^{n} |x_i - y_i|^p \right)^{1/p} d(x,y)=(i=1nxiyip)1/p

4. 切比雪夫距离(Chebyshev Distance)

切比雪夫距离用于度量任意两个点在某一维度上的最大差值。它适用于某些需要考虑最远距离的情况。

公式为:
d ( x , y ) = max ⁡ i ∣ x i − y i ∣ d(x, y) = \max_{i} |x_i - y_i| d(x,y)=imaxxiyi

示例
同样对于 x = ( 1 , 2 ) x = (1, 2) x=(1,2) y = ( 4 , 6 ) y = (4, 6) y=(4,6),切比雪夫距离为:
d ( x , y ) = max ⁡ ( ∣ 1 − 4 ∣ , ∣ 2 − 6 ∣ ) = max ⁡ ( 3 , 4 ) = 4 d(x, y) = \max(|1 - 4|, |2 - 6|) = \max(3, 4) = 4 d(x,y)=max(∣14∣,∣26∣)=max(3,4)=4

5. 马氏距离(Mahalanobis Distance)

马氏距离是一种考虑了样本分布的距离度量,它通过协方差矩阵来衡量样本的相关性。适合用于处理有相关性的多维特征数据,常用于异常检测。

公式为:
d ( x , y ) = ( x − y ) T S − 1 ( x − y ) d(x, y) = \sqrt{(x - y)^T S^{-1} (x - y)} d(x,y)=(xy)TS1(xy)
其中, S S S 是特征的协方差矩阵, S − 1 S^{-1} S1 是协方差矩阵的逆矩阵。

示例
马氏距离特别适合应用在金融领域,比如股票的价格波动,它们的波动率和协同关系会影响马氏距离的结果。

6. 余弦相似度(Cosine Similarity)

余弦相似度用于衡量两个向量之间的角度,而非距离。适用于高维度稀疏向量(如文本向量化)。它的值在 [ − 1 , 1 ] [-1, 1] [1,1] 之间,值越接近 1,说明两个向量越相似。

公式为:
Cosine Similarity = x ⋅ y ∥ x ∥ ∥ y ∥ \text{Cosine Similarity} = \frac{x \cdot y}{\|x\| \|y\|} Cosine Similarity=x∥∥yxy
其中, x ⋅ y x \cdot y xy 是两个向量的点积, ∥ x ∥ \|x\| x ∥ y ∥ \|y\| y 分别是向量的模。

7. 汉明距离(Hamming Distance)

汉明距离用于衡量两个等长字符串(或二进制向量)之间不同字符的个数,常用于二值特征或者分类问题。

公式为:
d ( x , y ) = ∑ i = 1 n 1 ( x i ≠ y i ) d(x, y) = \sum_{i=1}^{n} \mathbf{1}(x_i \neq y_i) d(x,y)=i=1n1(xi=yi)
其中 1 ( ⋅ ) \mathbf{1}(\cdot) 1() 表示指示函数,当条件为真时取 1,假时取 0。

示例
对于二进制字符串 x = 10101 x = 10101 x=10101 y = 10011 y = 10011 y=10011,它们的汉明距离为:
d ( x , y ) = 1 + 0 + 1 + 0 + 1 = 3 d(x, y) = 1 + 0 + 1 + 0 + 1 = 3 d(x,y)=1+0+1+0+1=3

8. 杰卡德距离(Jaccard Distance)

杰卡德距离用于衡量两个集合之间的相似度。它是基于集合交集和并集的比率,常用于比较文本、集合等离散数据。

杰卡德相似度的公式为:
Jaccard Similarity = ∣ A ∩ B ∣ ∣ A ∪ B ∣ \text{Jaccard Similarity} = \frac{|A \cap B|}{|A \cup B|} Jaccard Similarity=ABAB
杰卡德距离是相似度的补数:
d ( A , B ) = 1 − Jaccard Similarity d(A, B) = 1 - \text{Jaccard Similarity} d(A,B)=1Jaccard Similarity

示例
对于两个集合 A = { 1 , 2 , 3 } A = \{1, 2, 3\} A={1,2,3} B = { 2 , 3 , 4 } B = \{2, 3, 4\} B={2,3,4},它们的杰卡德相似度为:
Jaccard Similarity = ∣ { 2 , 3 } ∣ ∣ { 1 , 2 , 3 , 4 } ∣ = 2 4 = 0.5 \text{Jaccard Similarity} = \frac{|\{2, 3\}|}{|\{1, 2, 3, 4\}|} = \frac{2}{4} = 0.5 Jaccard Similarity={1,2,3,4}{2,3}=42=0.5
所以杰卡德距离为:
d ( A , B ) = 1 − 0.5 = 0.5 d(A, B) = 1 - 0.5 = 0.5 d(A,B)=10.5=0.5

9. 布雷叶距离(Bray-Curtis Distance)

布雷叶距离用于衡量两个样本之间的差异,常用于生态学和环境科学中。其值范围在 [ 0 , 1 ] [0, 1] [0,1] 之间。

公式为:
d ( x , y ) = ∑ i = 1 n ∣ x i − y i ∣ ∑ i = 1 n ∣ x i + y i ∣ d(x, y) = \frac{\sum_{i=1}^{n} |x_i - y_i|}{\sum_{i=1}^{n} |x_i + y_i|} d(x,y)=i=1nxi+yii=1nxiyi

示例
对于两个样本 x = ( 1 , 2 ) x = (1, 2) x=(1,2) y = ( 3 , 4 ) y = (3, 4) y=(3,4),它们的布雷叶距离为:
d ( x , y ) = ∣ 1 − 3 ∣ + ∣ 2 − 4 ∣ ∣ 1 + 3 ∣ + ∣ 2 + 4 ∣ = 2 + 2 4 + 6 = 4 10 = 0.4 d(x, y) = \frac{|1 - 3| + |2 - 4|}{|1 + 3| + |2 + 4|} = \frac{2 + 2}{4 + 6} = \frac{4}{10} = 0.4 d(x,y)=∣1+3∣+∣2+4∣∣13∣+∣24∣=4+62+2=104=0.4

10. 马氏重合距离(Mahalanobis–Ovchinnikov Distance)

这是马氏距离的扩展,考虑了不同类别的重合性。它广泛用于带有类标签的样本分类问题中。

11. 地球移动距离(Earth Mover’s Distance, EMD)

地球移动距离用于度量两个分布之间的最小“代价”,通过计算将一个分布转化为另一个分布的最小工作量,常用于图像处理和计算机视觉中。

公式通过求解最优传输问题(Optimal Transport Problem)得出。

12. 动态时间规整距离(Dynamic Time Warping, DTW)

DTW 距离用于衡量两个时间序列之间的相似性,允许时间序列进行非线性对齐。广泛用于语音识别和时间序列分析。

13. Canberra距离

Canberra距离在比较两个向量时,通过标准化元素间的差异,能够更好地处理小值和大值。

公式为:
d ( x , y ) = ∑ i = 1 n ∣ x i − y i ∣ ∣ x i ∣ + ∣ y i ∣ d(x, y) = \sum_{i=1}^{n} \frac{|x_i - y_i|}{|x_i| + |y_i|} d(x,y)=i=1nxi+yixiyi

14. 加权距离(Weighted Distance)

有时候为了体现某些特征对距离计算的重要性,可以给每个特征赋予不同的权重。加权欧氏距离的公式为:
d ( x , y ) = ∑ i = 1 n w i ( x i − y i ) 2 d(x, y) = \sqrt{\sum_{i=1}^{n} w_i (x_i - y_i)^2} d(x,y)=i=1nwi(xiyi)2
其中 w i w_i wi 是第 i i i 个特征的权重。


这些距离度量方法适用于不同的数据类型和问题场景。可以根据具体的应用选择合适的度量方式。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【React】react项目中的redux使用

1. store目录结构设计 2. react组件中使用store中的数据——useSelector 3. react组件中修改store中的数据——useDispatch 4. 示例 react-basic\src\store\moduels\counterStore.js import { createSlice } from reduxjs/toolkitconst counterStore createSlice({name: cou…

LeetCode讲解篇之15. 三数之和

文章目录 题目描述题解思路题解代码 题目描述 题解思路 这道题如果我们直接使用三层循环暴力搜索,时间复杂度是O(n3),大概率会超时 那还有更优解吗,答案是绝对的,查询搜索想要优化,就要思考如何进行排除法加速搜索过…

OIDC6-OIDC 授权流程类型

OpenID Connect(OIDC)支持三种主要的授权流程(Authorization Flow),分别是授权码流程(Authorization Code Flow)、隐式流程(Implicit Flow)和混合流程(Hybrid…

OpenCV视频I/O(6)检查视频捕获对象是否已成功打开的函数isOpened()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 如果视频捕获已经初始化,则返回 true。 如果之前调用 VideoCapture 构造函数或 VideoCapture::open() 成功,则该方法返回…

File systems

inode descriptor 文件系统中核心的数据结构就是inode和file descriptor。后者主要与用户进程进行交互。 inode,这是代表一个文件的对象,并且它不依赖于文件名。实际上,inode是通过自身的编号来进行区分的,这里的编号就是个整数…

游戏厅计时器ps5计算时间的软件 佳易王电玩计时计费管理系统操作教程

一、前言 游戏厅计时器ps5计算时间的软件 佳易王电玩计时计费管理系统操作教程 软件为绿色免安装版,解压即可使用。 二、软件程序教程 计时的时候,点击 开始计时按钮 开台后可设置定时语音提醒的时间 时间设置好后,点击 开启提醒 即可 三、…

C++远端开发环境安装(centos7)

使用VMWare安装centos7 启用网卡设备 修改文件/etc/sysconfig/network-scripts/ifcfg-ens33中的ONBOOTyes 重启网络服务 systemctl restart network 配置yum仓库 直接将如下内容覆盖原有的/etc/yum.repos.d/CentOS-Base.repo文件 清理yum缓存 yum clean all 刷新yum y…

深度学习常见术语介绍

文章目录 数据集(Dataset)特征(Feature)标签(Label)训练集(Training Set)测试集(Test Set)验证集(Validation Set)模型(Mo…

急!现在转大模型还来得及吗?零基础入门到精通,收藏这一篇就够了

大模型的出现,让行内和行外大多数人都感到非常焦虑。 行外很多人想了解却感到无从下手,行内很多人苦于没有硬件条件无法尝试。想转大模型方向,相关的招聘虽然层出不穷,但一般都要求有大模型经验。而更多的人,则一直处…

黑马程序员pink前端查漏补缺笔记,耗时6天,针对必要案例进行练习

HTML 1)插件 自动闭合标签,修改开标签时闭标签跟着变(微信开发者工具没有这个功能) 主题 保存格式化 浏览器打开 实时刷新,不用按浏览器的刷新按钮 win←/→ 快速分屏 2)初始结构标签 文档类型声明标签…

社交电商团购平台构建策略与用户体验设计思路

一、电商拼团系统开发思路 1、需求分析: 深入理解业务需求:与商家深入沟通,明确其业务目标和需求,包括拼团模式的具体要求(如参与人数、时间限制、价格策略等)、用户参与限制、商品管理、订单处理、支付流…

828华为云征文|部署敏捷项目管理系统工具 ZenTao

828华为云征文|部署敏捷项目管理系统工具 ZenTao 一、Flexus云服务器X实例介绍二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置2.4 Docker 环境搭建 三、Flexus云服务器X实例部署 ZenTao3.1 ZenTao 介绍3.2 ZenTao 部署3.3 ZenTao 使用 四、总…

P1303 A*B Problem Python题解

A*B Problem 题目背景 高精度乘法模板题。 题目描述 给出两个非负整数,求它们的乘积。 输入格式 输入共两行,每行一个非负整数。 输出格式 输出一个非负整数表示乘积。 样例 #1 样例输入 #1 1 2样例输出 #1 2提示 每个非负整数不超过 1 0…

万字面试题大模型面试,最全八股和答案

自ChatGPT开启大模型时代以来,大模型正迎来飞速发展,现在从事大模型开发相关工作可谓是处在时代的风口。那么大模型面试需要哪些技能和技巧呢,本文详细整理了全套的面试问题及答案,希望对大家有所帮助! 目录 大模型&a…

平衡二叉搜索树插入的实现

前言 因为二叉搜索树在插入的时候最坏的情况可能会变成一条单一链表,从而使查找或者插入的时候消耗大量的时间。所以为了解决这一情况诞生了平衡二叉搜索树,其作用是为了减少二叉搜索树的整体高度,从而使查找插入删除的效率提高。 一、平衡二…

Sublime Text4的下载安装以及汉化

sublime官网:https://www.sublimetext.com/ 按照指示一步步操作即可 汉化操作: 等一会就会弹出搜索框, 帮助菜单这里可以切换语言,

【C++报错已解决】std::bad_alloc

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

react项目中接入(集成)prettier

目的 让我们的代码不管经过多少人的改动,始终都会保持同样的编写格式,保证多人开发时,大家使用的按键格式都是一样的 prettier官网 安装 固定版本安装 --save-exact 记录该软件包的精确版本号(官方推荐的安装方式) npm i -D --save-exact…

常见组件详解(六):torch.nn.AvgPool2d()、torch.nn.AdaptiveAvgPool2d()

文章目录 一、torch.nn.AvgPool2d():二维平均池化1.1参数介绍1.2代码案例 二、torch.nn.AdaptiveAvgPool2d():自适应平均池化2.1参数介绍2.2代码案例2.3使用场景 一、torch.nn.AvgPool2d():二维平均池化 1.1参数介绍 torch.nn.AvgPool2d( k…

第T2周:TensorFlow实现彩色图片分类(CIFAR10数据集),并实现自己的真实图片分类

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 目标: 加载CIFAR-10数据集进行训练,然后能够对彩色图片进行分类 具体实现: (一)环境: 语…