机器学习中的关键距离度量及其应用

引言

在当今的数据驱动世界中,机器学习算法扮演着至关重要的角色,它们在图像分类、面部识别、在线内容审核、零售目录优化和推荐系统等多个领域发挥着重要作用。这些算法的核心在于它们能够识别和利用数据之间的相似性。而实现这一点的关键,就在于选择合适的距离度量

距离度量,简而言之,是一种衡量数据集中元素之间关系的方法。它通过距离函数来实现,这个函数为数据集中的每个元素提供了一种相互关系的度量。你可能好奇,这些距离函数究竟是什么,它们是如何工作的,又是如何决定数据中某个元素与另一个元素之间关系的?在本篇文章中,将深入探讨这些概念,并了解它们在机器学习中的应用。

距离函数的基本原理

顾我们在学校学习的勾股定理,它教会我们如何计算平面直角坐标系中两点之间的距离。这个定理,实际上,是欧几里得距离的基础,也是在机器学习中常用的一种距离函数。

image.png

以数据点A和B为例,可以通过计算它们在x轴和y轴上的差值,并应用勾股定理来求得它们之间的距离。

image.png

在机器学习领域,这种计算距离的方法被广泛应用。距离函数,本质上,是一种数学工具,它帮助我们量化数据集中任意两个元素之间的差异。

  • 如果两个元素之间的距离为零,可以认为它们是等同的;
  • 如果距离大于零,则它们有所不同;

不同的距离度量采用不同的数学公式作为其距离函数。接下来,我们将探讨这些不同的距离度量,并了解它们在机器学习建模中的作用。

常用的距离度量及其数学原理

在机器学习领域,多种距离度量被广泛使用,每一种都有其独特的数学原理和应用场景。接下来,我们将探讨一些最常见的距离度量。

闵可夫斯基距离|Minkowski Distance

闵可夫斯基距离是一种在范数向量空间中使用的度量。 它定义在满足特定条件的向量空间上,这些条件包括零向量的长度为零、标量乘法不改变向量方向以及三角不等式。这种度量因其广义性质而特别有用,可以通过调整参数p来获得不同的距离度量。

  • 零向量 - 零向量长度为零。
  • 标量乘法 - 向量的方向在乘以正数时不会改变,尽管其长度会改变。
  • 三角不等式 - 如果距离是范数,那么两点之间的计算距离始终是直线。

image.png

通过改变p的值,可以得到不同类型的距离:

  • p = 1 p = 1 p=1,得到曼哈顿距离
  • p = 2 p = 2 p=2,得到欧几里得距离
  • p = ∞ p = ∞ p=,得到切比雪夫距离

曼哈顿距离|Manhattan Distance

曼哈顿距离适用于需要在网格状路径中计算距离的场景,如城市街区或棋盘。它通过将 p p p值设为1来从闵可夫斯基距离导出。

image.png

距离 d d d将使用其笛卡尔坐标的差异的绝对值之和来计算,如下所示:

image.png

其中:

  • n n n:变量的数量
  • x i x_i xi y i y_i yi分别是向量x和y的变量,分别是二维向量空间,即 x = ( x 1 , x 2 , x 3 , . . . ) x = (x_1,x_2,x_3,...) x=(x1,x2,x3,...) y = ( y 1 , y 2 , y 3 , … ) y = (y_1,y_2,y_3,…) y=(y1,y2,y3,)
  • 距离d计算为 ( x 1 − y 1 ) + ( x 2 − y 2 ) + ( x 3 − y 3 ) + … + ( x n − y n ) (x_1-y_1) + (x_2-y_2) + (x_3-y_3)+…+(x_n-y_n) (x1y1)+(x2y2)+(x3y3)++(xnyn)

如果可视化距离计算,它看起来像下面这样:

image.png

欧几里得距离|Euclidean Distance

欧几里得距离是最常用的距离度量之一,它通过将p的值设置为2来使用闵可夫斯基距离公式计算。这种距离度量在计算平面上两点间的最短路径时非常有用。

image.png

余弦距离|Cosine Distance

余弦距离主要用于衡量文档或向量之间的相似性,尤其在自然语言处理和信息检索中。它通过计算两个向量之间的角度来衡量它们的相似度。当**向量之间的大小不重要,但方向重要时,使用此特定度量。**余弦相似性公式可以从点积方程中推导出来:

image.png

余弦值范围从-1到1,其中

  • 1表示完全相同
  • -1表示完全相反
  • 0表示正交或无关

马氏距离|Mahalanobis Distance

马氏距离用于计算多变量空间中两个数据点之间的距离。

根据维基百科的定义

马氏距离是点P和分布D之间距离的度量。测量的想法是,P距离D的平均值有多少个标准差。

使用马氏距离的好处是,它考虑了协方差,这有助于测量两个不同数据对象之间的强度/相似性。观察值与均值之间的距离可以按以下方式计算

image.png

其中 S S S是协方差度量,使用协方差的逆来获得方差归一化的距离方程。

距离度量在机器学习中的应用

在本节中,将通过具体的分类和聚类示例,探索距离度量在机器学习建模中的关键作用。将从快速介绍监督和非监督学习算法开始,然后深入探讨它们在实际应用中的使用。

分类-K-最近邻(KNN)

KNN是一种非概率监督学习算法,它通过计算数据点之间的距离来识别相似性。这种方法不需要预测数据点的概率,而是直接进行硬分类。

鸢尾花数据集示例

以著名的鸢尾花数据集为例,该数据集包含三个类别的花卉特征。可以使用KNN算法来预测未知类别的新数据点。

image.png

在上面的图像中,黑色正方形是一个测试数据点。现在,需要找出这个测试数据点属于哪个类别,借助KNN算法的帮助。准备数据集,创建机器学习模型,以及预测测试数据的类别。在实际应用中,通常使用scikit-learn库中的KNN分类器,它简化了模型的创建和训练过程。例如,可以使用欧几里得距离作为距离度量,这是一种在平面上计算两点间距离的简单方法。

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score# 加载数据集
df = pd.read_csv('https://raw.githubusercontent.com/SharmaNatasha/Machine-Learning-using-Python/master/Datasets/IRIS.csv')
x = df.iloc[:,1:4]
y = df.iloc[:,4]
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=0)

在KNN中,选择一个常数K,代表要考虑的最近邻的数量。然后,计算测试数据点与训练集中每个数据点的距离,并选择K个最近的数据点。这些最近邻的多数类别将成为测试数据点的预测类别

image.png

# 创建KNN模型
KNN_Classifier = KNeighborsClassifier(n_neighbors=6, p=2, metric='minkowski')# 训练模型
KNN_Classifier.fit(x_train, y_train)# 预测测试数据
pred_test = KNN_Classifier.predict(x_test)

在上述代码示例中,使用了闵可夫斯基距离度量,其中参数 p p p被设定为2,这实际上对应于欧几里得距离。欧几里得距离是KNN算法中最常用的距离度量,特别是在处理二维或三维数据时。

在KNN分类过程中,一旦确定了最近的邻居,就可以通过统计这些邻居中每个类别的投票数来决定测试数据点的类别。

image.png

在上面的图像中,可以观察到测试数据点被正确分类为类别1,这是基于其最近的邻居中占多数的类别。

这个小例子清楚地展示了距离度量在KNN算法中的核心作用。选择合适的距离度量对于KNN分类器的性能至关重要,因为它直接影响我们找到的最近邻居的质量。不同的距离度量可能会导致不同的分类结果,因此在实际应用中,选择最合适的度量是提高模型性能的关键步骤。

聚类-K-means

在分类算法中,我们通常已知数据点的类别,这使得预测变得相对直接。然而,在聚类算法中,没有预先标记的类别信息,必须依赖数据自身的结构来发现模式。在这种情况下,距离度量成为了至关重要的工具。

K-means算法是一种无监督学习方法,它通过迭代地调整质心来将数据点分组到最近的质心所代表的聚类中。在K-means中,通常使用欧几里得距离来衡量数据点之间的相似性。

image.png
在鸢尾花数据集的例子中,首先随机选择三个质心,然后根据每个数据点与这些质心的欧几里得距离,将它们分配到最近的质心所代表的聚类中。

import numpy as np
import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt# 加载数据集
df = pd.read_csv('https://raw.githubusercontent.com/SharmaNatasha/Machine-Learning-using-Python/master/Datasets/IRIS.csv')
x = df.iloc[:,1:4].values# 创建KMeans模型
KMeans_Cluster = KMeans(n_clusters = 3)
y_class = KMeans_Cluster.fit_predict(x)

通过重复这个过程,直到质心的位置不再显著改变,可以得到清晰的聚类结构。

image.png

从上面的示例中可以看出,即使在没有预先标记类别的情况下,K-means算法也能够有效地将鸢尾花数据集分为三个不同的类别。这个过程展示了距离度量在发现数据内在结构中的关键作用。

自然语言处理-信息检索

在信息检索领域,我们经常处理的是未结构化的文本数据,如文章、网站、电子邮件、社交媒体帖子等。为了有效地检索这些数据,通常会使用自然语言处理(NLP)技术将文本转换为可以进行比较和分析的向量形式。

在NLP中,余弦相似度是一种常用的距离度量,它用于衡量两个向量之间的角度相似性。当向量之间的夹角越小,它们的余弦相似度越高,表示它们在语义上越相似。

为了理解余弦相似度的应用,可以通过一个简单的例子来演示:

  1. 为语料库和查询创建向量形式
import math
import numpy as np
import pandas as pd
import matplotlib.pyplot as pyplot
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.feature_extraction.text import TfidfVectorizervectorizer = TfidfVectorizer()
corpus = ['the brown fox jumped over the brown dog','the quick brown fox','the brown brown dog','the fox ate the dog'
]query = ["brown"]
X = vectorizer.fit_transform(corpus)
Y = vectorizer.transform(query)

在这个例子中,首先使用TfidfVectorizer将语料库中的文本转换为向量,然后对查询文本进行同样的处理。

  1. 检查相似性,即查找语料库中的哪个文档与我们的查询相关
cosine_similarity(Y, X.toarray())
Results:
array([[0.54267123, 0.44181486, 0.84003859, 0.        ]])

通过计算余弦相似度,可以看到,除了第四个文档外,其他三个文档都与查询“brown”有一定的相似性。这表明这些文档中包含了查询词“brown”,而第四个文档则没有。

余弦相似度在信息检索中的应用非常广泛,特别是在搜索引擎、文本分类和情感分析等领域。它帮助我们在大量文本数据中快速找到与特定查询最相关的信息。

结论

本文深入探讨了机器学习中常用的距离和相似度度量,包括闵可夫斯基距离、曼哈顿距离、欧几里得距离、余弦距离和马氏距离。不仅了解了这些度量的数学原理,还探讨了它们在分类、聚类和信息检索等实际应用中的作用。

通过这些介绍,希望为初学者提供了一个关于距离度量在机器学习领域中应用的清晰框架,从而帮助更好地理解和应用这些概念。

参考

  • Cosine Similarity- Sklearn, TDS article, Wikipedia, Example
  • Distance_Metrics_MM
  • Distance Metrics- Math.net, Wiki
  • Minkowski Distance Metric- Wiki, Blog, Famous Metrics
  • importance-of-distance-metrics-in-machine-learning

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

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

相关文章

ShardingSphere 内核工作原理

文章目录 内核工作原理配置管控SQL Parser: SQL解析引擎SQL Router- SQL 路由引擎SQL Rewriter : SQL 优化引擎SQL Executor : SQL执行引擎Result Merger: 结果归并 内核工作原理 ShardingSphere的整体架构图是这样的: 配置管控 在进入Shar…

MySQL事务,锁,MVCC总结

mysql中最重要的就是事务,其四大特性让我们维持了数据的平衡,一致。那么事务究竟是什么,与什么相关,他的使用步骤,以及使用过程中我们会遇到什么问题呢?下面我们一起学习交流! 1.MySQL的存储引擎&#xff…

SPIFFS与LittleFS的对gz文件格式的区别

SPIFFS 只能安装在Arduino上。LittleFS支持Arduino IDE和VScode的 PlatformIO。 SPIFFS serveStatic: server.serveStatic("/", SPIFFS, "/") 负责提供 SPIFFS 文件系统中的文件。您可以在 SPIFFS 上放置 .gz 文件,并该方法将自动处理它们。 …

git cz代码提交规范,适用于node14以上

1.效果 3. 在项目中如何添加 3.1 安装(只提供npm安装方式)全局安装 commitizen npm i -D commitlint commitlint/config-conventional commitizen cz-git 3.2 配置模版 在项目的根目录下配置添加文件 commitlint.config.js 并写入如下代码 /** type {import(cz-git).UserCo…

C# 类型转换

隐式(implicit)类型转换 1.不丢失精度的转换 2.显示(explicit)类型的转换 有可能丢失精度的转换 使用convert转换 ToString方法:将数值类型转换成字符串型

PDF密码移除技巧: 五大 PDF 密码移除器

如果您想解密或删除 PDF 密码,该怎么办?PDF 是一种经常用于商业的格式,您可以在培训、教育和商业场合使用它。添加这些 PDF 文件的密码可以保护您的安全和隐私。因此,有很多 PDF 都用密码加密,当您想要查看这些 PDF 时…

吃透张宇1000题和660题,能保底100分吗?

暑假已经过一半了,很多人都在埋头做题,如果你选择的是1000题660题 一定要好好看这篇笔记! 因为很多人做题做到现在,有点迷茫 主要的迷茫点有三个: 1、为什么1000题和660题也都做不少了,遇到新题&#x…

RS485 芯片SN65HVD72DR导致的死机问题调试

最近再一次栽倒在这颗RS485 芯片上了,硬件说这和芯片功耗有点高,要控下电源, 结果10次有9次程序死机! 先上图,请各位高手看看,这电路有问题没有? 为什么我会说是RS485 芯片导致的死机?因为 只要…

ai自动配音工具

AI拟音大师,给你的无声视频添加生动而且同步的音效 😝文件夹是一种基于文本的视频到音频生成框架,可以生成高质量的音频,在语义上相关,并与输入视频时间同步。 下载地址:https://pan.quark.cn/s/5a2be1cc5551

被工信部认可的开源软件治理解决方案

近日,工信部网络安全产业发展中心正式发布了“2023年信息技术应用创新解决方案”,开源网安凭借“基于SCA技术开源软件治理解决方案”顺利入选,成为经工信部认可的优秀解决方案,这是开源网安连续两届荣获此荣誉。 工业和信息化部网…

基于强化学习的Deep-Qlearning网络玩cartpole游戏

1、环境准备,gym的版本为0.26.2 2、编写网络代码 # 导入必要的库 import gym import torch import torch.nn as nn import torch.optim as optim import numpy as np from collections import deque import random# 定义DQN网络 class DQN(nn.Module):def __init__…

基于web的购物网站的设计与实现(系统源码+lw+部署文档+讲解等)

文字目录: 目录 详细视频演示 系统实现界面 1.1系统开发环境以及运行环境 1.1.1系统开发环境 1.1.2系统运行环境 1.2系统功能实现 1.3管理员模块实现 2 技术介绍 2.1 thinkphp5介绍 2.2 MySQL数据库 2.3 B/S结构 4.1系统结构设计 4.2系统功能结构设计…

如何挑选理想的报表工具?从入门到专业,测评十大热门工具的优缺点

报表能够用表格和图表等格式动态显示数据,因此衍生出相应的报表工具,已经有20年以上的发展历史了,期间报表工具不断随着需求的改变而更新迭代,今天博主就来推荐十款实用的报表工具,祝你轻松解决烦人的中国式复杂报表。…

【MySQL进阶】MySQL主从复制

目录 MySQL主从复制 概念 主从形式 一主多从 多主一从 双主复制 主从级联复制 主从复制原理 三个线程 两个日志文件 主从复制的主要工作模式 异步复制 半同步复制 全同步复制 MySQL主从复制 概念 MySQL主从复制是一种数据分布机制,允许从一个数据库服…

32.x86游戏实战-使用物品call

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 工具下载: 链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

【TDH社区版大事件】图分析、全文检索、小文件治理、数据开发工具通通都有!

星环科技大数据基础平台TDH社区版,在保留了商业版核心技术优势的基础上最大程度地降低了用户使用大数据技术的门槛与成本,具有更轻量、更简单、更易用等特性。 此次TDH社区开发版、社区版、社区订阅版均发布了新版本,带来新的产品组件和新的…

前端学鸿蒙有必要么?

在当今科技飞速发展的时代,前端开发领域也在不断演进和变革。那么,对于前端开发者来说,学习鸿蒙是否有必要呢? 一、前端学鸿蒙的必要性分析 1、鸿蒙开发简介 鸿蒙操作系统(HarmonyOS)是一个面向全场景的分布式操作系统,它不仅支持…

SX_c语言字符带空格字符串读写_9

改项目的时候又发现c语言读字符串的一些细节这里做补充其中%[^\n]可以读取带空格的字符串 #include <stdio.h>int main(){char cmd;scanf("%c", &cmd);char time[32] {0};scanf("%s", time);printf("%c\n", cmd);printf("%s&quo…

在IoT中的TCP增强

本文内容节选自一篇系统性文献综述&#xff08;Systematic Literature Review, SLR&#xff09;&#xff0c;标题为“TCP Performance Enhancement in IoT and MANET”&#xff0c;由 Sultana Parween 和 Syed Zeeshan Hussain 撰写&#xff0c;发表在《International Journal …

MySQL --- 内置函数介绍

目录 一、日期函数 二、字符串函数 三、数学函数 四、 其他函数 一、日期函数 current_date()当前日期current_time()当前时间current_timestamp()当前时间戳date(datetime)返回datetime的日期部分date_add(date&#xff0c;interval d_value_type) 在date中添加时间/日期…