【机器学习】计算数据之间的距离(理论+图解)

简介: 【机器学习】计算数据之间的距离(理论+图解)

简 介:下面是我在学习时候的记录并加上自己的理解。本文意在记录自己近期学习过程中的所学所得,如有错误,欢迎大家指正。

 

关键词:Python、机器学习

我们有的时候需要计算多个样本之间的距离,这在聚类分析、分类等多种应用中有很重要的地位,但是我们计算距离也会有很多种方式,常见的有欧氏距离、曼哈顿距离、余弦距离等,不同的距离度量方式也会得到不同的结果。

1.欧式距离

欧式距离就是我们常见的两点间的距离公式,我们有两个向量 X = { x 1 , x 2 , x 3 , . . . , x n } X=\{x_1,x_2,x_3,...,x_n\}X={x1,x2,x3,...,xn}Y = { y 1 , y 2 , y 3 , . . . , y n } Y=\{y_1,y_2,y_3,...,y_n\}Y={y1,y2,y3,...,yn} ,它们之间的欧式距离定义为:

d i s t { X , Y } = ( x 1 − y 1 ) 2 + ( x 2 − y 2 ) 2 + . . . + ( x n − y n ) 2 2 dist\{X,Y\}=\sqrt[2]{(x_1-y_1)^2+(x_2-y_2)^2+...+(x_n-y_n)^2}dist{X,Y}=2(x1y1)2+(x2y2)2+...+(xnyn)2

代码进行实现:

>>>from scipy.spatial import distance
>>>import numpy as np
>>>x=np.random.rand(5,3)
>>>distance.cdist(x,x,"euclidean")
array([[0.        , 0.82990217, 0.51629391, 0.99795209, 1.02249614],
       [0.82990217, 0.        , 0.56393995, 1.20075826, 0.74219282],
       [0.51629391, 0.56393995, 0.        , 0.8845384 , 0.5321388 ],
       [0.99795209, 1.20075826, 0.8845384 , 0.        , 0.84551631],
       [1.02249614, 0.74219282, 0.5321388 , 0.84551631, 0.        ]])

"eculidean"参数的意思就是采用欧式距离进行计算,发现返回的矩阵是一个对称矩阵,然后对角线的元素为0,样本数据到自身的距离为0,我们观察每一行就可以发现自身距离哪一个样本最相近、相似。

2.曼哈顿距离

曼哈顿距离与欧式距离不一样的是,它采用的是各坐标点之间的绝对值之和,它的距离定义为:

d i c t { X , Y } = ∣ x 1 − y 2 ∣ + ∣ x 2 − y 2 ∣ + . . . + ∣ x n − y n ∣ dict\{X,Y\}=|x_1-y_2|+|x_2-y_2|+...+|x_n-y_n|dict{X,Y}=x1y2+x2y2+...+xnyn

代码实现:

>>>distance.cdist(x,x,"cityblock")
array([[0.        , 1.01612564, 0.78488965, 1.43836375, 1.70427565],
       [1.01612564, 0.        , 0.81865638, 2.05881281, 1.0202692 ],
       [0.78488965, 0.81865638, 0.        , 1.28359666, 0.91938601],
       [1.43836375, 2.05881281, 1.28359666, 0.        , 1.30778372],
       [1.70427565, 1.0202692 , 0.91938601, 1.30778372, 0.        ]])

3.切比雪夫距离

切比雪夫距离是指两个点之间各个坐标数值差绝对值的最大值,距离定义为:

d i c t { X , Y } = m a x i ∣ x i − y i ∣ dict\{X,Y\}=max_i|x_i-y_i|dict{X,Y}=maxixiyi

代码实现:

>>>distance.cdist(x,x,"chebyshev")
array([[0.        , 0.8179627 , 0.41831074, 0.8843322 , 0.75547722],
       [0.8179627 , 0.        , 0.39965195, 0.78974337, 0.68897626],
       [0.41831074, 0.39965195, 0.        , 0.81146349, 0.33716647],
       [0.8843322 , 0.78974337, 0.81146349, 0.        , 0.65222775],
       [0.75547722, 0.68897626, 0.33716647, 0.65222775, 0.        ]])

4.余弦距离

余弦距离是通过测量两个向量的夹角来进行度量两个向量之间的相似性,余弦距离定义为:

d i s t { X , Y } = X ∗ Y ∑ x i 2 2 ∗ ∑ y i 2 2 dist\{X,Y\}=\frac{X*Y}{\sqrt[2]{\sum{x_i^2}}*\sqrt[2]{\sum{y_i^2}}}dist{X,Y}=2xi22yi2XY

代码实现:

>>>distance.cdist(x,x,"cosine")
array([[0.00000000e+00, 2.25503928e-01, 1.02124613e-01, 6.42061802e-01,
        3.51046034e-01],
       [2.25503928e-01, 0.00000000e+00, 9.70318929e-02, 5.84748128e-01,
        1.57888440e-01],
       [1.02124613e-01, 9.70318929e-02, 1.11022302e-16, 3.40537163e-01,
        8.29298244e-02],
       [6.42061802e-01, 5.84748128e-01, 3.40537163e-01, 1.11022302e-16,
        1.61000466e-01],
       [3.51046034e-01, 1.57888440e-01, 8.29298244e-02, 1.61000466e-01,
        0.00000000e+00]])

5.相关系数距离

相关系数距离是根据相关性来定义的,距离定义为:

d i s t { X , Y } = ( x − x ‾ ) ∗ ( y − y ‾ ) ∑ x i − X ‾ 2 ∗ ∑ y i − Y ‾ 2 dist\{X,Y\}=\frac{(x-\overline{x})*(y-\overline{y})}{\sqrt[2]{\sum{x_i-\overline{X}}}*\sqrt[2]{\sum{y_i-\overline{Y}}}}dist{X,Y}=2xiX2yiY(xx)(yy)

代码实现:

>>>distance.cdist(x,x,"correlation")
array([[1.11022302e-16, 5.86032316e-01, 2.53864969e-02, 1.67676504e+00,
        1.87869710e+00],
       [5.86032316e-01, 1.11022302e-16, 3.92732690e-01, 1.95031467e+00,
        9.29197448e-01],
       [2.53864969e-02, 3.92732690e-01, 0.00000000e+00, 1.82441490e+00,
        1.74950760e+00],
       [1.67676504e+00, 1.95031467e+00, 1.82441490e+00, 0.00000000e+00,
        7.56775041e-01],
       [1.87869710e+00, 9.29197448e-01, 1.74950760e+00, 7.56775041e-01,
        0.00000000e+00]])

6.马氏距离

马氏距离表示数据的协方差距离,是一种计算两个未知样本集的相似度的有效方法,距离定义:

d i s t { X , Y } = ( X − Y ) T ∑ − 1 ( X − Y ) 2 dist\{X,Y\}=\sqrt[2]{(X-Y)^T\sum^{-1}(X-Y)}dist{X,Y}=2(XY)T1(XY)

代码实现:

>>>distance.cdist(x,x,"mahalanobis")
array([[0.        , 2.8248868 , 1.60369019, 2.74503908, 2.99946609],
       [2.8248868 , 0.        , 2.58322883, 2.99330483, 2.80400815],
       [1.60369019, 2.58322883, 0.        , 2.6914824 , 1.51050662],
       [2.74503908, 2.99330483, 2.6914824 , 0.        , 2.71938256],
       [2.99946609, 2.80400815, 1.51050662, 2.71938256, 0.        ]])


目录
相关文章
|
15天前
|
机器学习/深度学习 数据采集 监控
探索机器学习:从数据到决策
【9月更文挑战第18天】在这篇文章中,我们将一起踏上一段激动人心的旅程,穿越机器学习的世界。我们将探讨如何通过收集和处理数据,利用算法的力量来预测未来的趋势,并做出更加明智的决策。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和思考方式。
|
18天前
|
机器学习/深度学习 数据采集 算法
利用未标记数据的半监督学习在模型训练中的效果评估
本文将介绍三种适用于不同类型数据和任务的半监督学习方法。我们还将在一个实际数据集上评估这些方法的性能,并与仅使用标记数据的基准进行比较。
30 8
|
2月前
|
监控 数据安全/隐私保护 异构计算
借助PAI-EAS一键部署ChatGLM,并应用LangChain集成外部数据
【8月更文挑战第8天】借助PAI-EAS一键部署ChatGLM,并应用LangChain集成外部数据
63 1
|
2月前
|
数据采集 机器学习/深度学习 算法
"揭秘数据质量自动化的秘密武器:机器学习模型如何精准捕捉数据中的‘隐形陷阱’,让你的数据分析无懈可击?"
【8月更文挑战第20天】随着大数据成为核心资源,数据质量直接影响机器学习模型的准确性和效果。传统的人工审查方法效率低且易错。本文介绍如何运用机器学习自动化评估数据质量,解决缺失值、异常值等问题,提升模型训练效率和预测准确性。通过Python和scikit-learn示例展示了异常值检测的过程,最后强调在自动化评估的同时结合人工审查的重要性。
56 2
|
2月前
|
机器学习/深度学习 JSON API
【Python奇迹】FastAPI框架大显神通:一键部署机器学习模型,让数据预测飞跃至Web舞台,震撼开启智能服务新纪元!
【8月更文挑战第16天】在数据驱动的时代,高效部署机器学习模型至关重要。FastAPI凭借其高性能与灵活性,成为搭建模型API的理想选择。本文详述了从环境准备、模型训练到使用FastAPI部署的全过程。首先,确保安装了Python及相关库(fastapi、uvicorn、scikit-learn)。接着,以线性回归为例,构建了一个预测房价的模型。通过定义FastAPI端点,实现了基于房屋大小预测价格的功能,并介绍了如何运行服务器及测试API。最终,用户可通过HTTP请求获取预测结果,极大地提升了模型的实用性和集成性。
136 1
|
2月前
|
缓存 开发者 测试技术
跨平台应用开发必备秘籍:运用 Uno Platform 打造高性能与优雅设计兼备的多平台应用,全面解析从代码共享到最佳实践的每一个细节
【8月更文挑战第31天】Uno Platform 是一种强大的工具,允许开发者使用 C# 和 XAML 构建跨平台应用。本文探讨了 Uno Platform 中实现跨平台应用的最佳实践,包括代码共享、平台特定功能、性能优化及测试等方面。通过共享代码、采用 MVVM 模式、使用条件编译指令以及优化性能,开发者可以高效构建高质量应用。Uno Platform 支持多种测试方法,确保应用在各平台上的稳定性和可靠性。这使得 Uno Platform 成为个人项目和企业应用的理想选择。
37 0
|
2月前
|
机器学习/深度学习 缓存 TensorFlow
TensorFlow 数据管道优化超重要!掌握这些关键技巧,大幅提升模型训练效率!
【8月更文挑战第31天】在机器学习领域,高效的数据处理对构建优秀模型至关重要。TensorFlow作为深度学习框架,其数据管道优化能显著提升模型训练效率。数据管道如同模型生命线,负责将原始数据转化为可理解形式。低效的数据管道会限制模型性能,即便模型架构先进。优化方法包括:合理利用数据加载与预处理功能,使用`tf.data.Dataset` API并行读取文件;使用`tf.image`进行图像数据增强;缓存数据避免重复读取,使用`cache`和`prefetch`方法提高效率。通过这些方法,可以大幅提升数据管道效率,加快模型训练速度。
34 0
|
2月前
|
机器学习/深度学习 SQL 数据采集
"解锁机器学习数据预处理新姿势!SQL,你的数据金矿挖掘神器,从清洗到转换,再到特征工程,一网打尽,让数据纯净如金,模型性能飙升!"
【8月更文挑战第31天】在机器学习项目中,数据质量至关重要,而SQL作为数据预处理的强大工具,助力数据科学家高效清洗、转换和分析数据。通过去除重复记录、处理缺失值和异常值,SQL确保数据纯净;利用数据类型转换和字符串操作,SQL重塑数据结构;通过复杂查询生成新特征,SQL提升模型性能。掌握SQL,就如同拥有了开启数据金矿的钥匙,为机器学习项目奠定坚实基础。
27 0
|
2月前
|
机器学习/深度学习 数据可视化 搜索推荐
【python机器学习】python电商数据K-Means聚类分析可视化(源码+数据集+报告)【独一无二】
【python机器学习】python电商数据K-Means聚类分析可视化(源码+数据集+报告)【独一无二】
下一篇
无影云桌面