常用六个距离公式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

记录一下常用的距离公式

一、欧式距离

欧式距离最简单的理解就是两点间的直线距离了,就算是多维空间,也是一样的。
对于点A(x1,y1),B(x2,y2),A和B的欧式距离为:

                            d=√[(x1-x2)^2 + (y1-y2)^2]

二、余弦距离

余弦距离是求两个向量的夹角余弦值,在自然语言处理的句子相似度匹配经常使用。
对于向量A(x1,y1),B(x2,y2),A和B的余弦距离为:

            d=(x1*x2+y1*y2)/[√(x1^2 + y1^2) * √(x2^2 + y2^2)]

三、曼哈顿距离

曼哈顿距离是街道距离,也是国际象棋的方格距离,以前见过求国际象棋的后,从某一点到另一点的最短距离,相当于坐标系方向的距离和。
对于坐标系上的点A(x1,y1),B(x2,y2),A和B的欧式距离为:

                        d=|x1-x2|+|y1-y2|

四、切比雪夫距离

这个。。。我没用过这个距离,不知道用在什么地方,单纯记下来而已。
对于点A(x1,y1),B(x2,y2),A和B的切比雪夫距离为:

                        d=max(|x1-x2|,|y1-y2|)

对于多维向量,A(a1,a2,…,an)和B(b1,b2,…,bn):

                        d=max(|ai-bi|)  i=1...n

更专业的表达方式,可以去看专业的博客,我不懂,就不乱说了。

五、闵可夫斯基距离

对于点A(x1,y1),B(x2,y2),A和B的闵可夫斯基距离为:

             d=[(x1-x2)^p + (y1-y2)^p ]^(1/p)

(1/p)这个是开p次方,应该能看懂吧。
当p=1时,闵可夫斯基距离等于曼哈顿距离
当p=2时,闵可夫斯基距离等于欧式距离
当p=无穷时,闵可夫斯基距离等于切比雪夫距离
所以,闵可夫斯基距离要来干嘛的。。。。。。见识少的我又写不了了。
(我写文章才发现,不能用双等于,会变黄色)

六、汉明距离(编辑距离)

这个嘛,毕业生的校招面试笔试,经常遇到。就是求字符串s1变成字符串s2的最少步骤,在自然语言处理中,也可以比较两个句子的相似程度。
从字符串s1变成s2可用的步骤:
1、插入一个字符
2、替换一个字符
3、删除一个字符
算法原理也很简单,把两个字符串编成二维数组a[size(s1),size(s2)],初始值为0;

 a[i,j]=min(a[i-1][j],a[i][j-1],a[i-1][j-1])+(s1[i]=s2[j]?0:1)

总结

常用到的距离公式就几个,每个领域设计的距离公式可能都不同,我也没有见过太多,那些我根本用不到的就没有记录,更多的公式可以去看专业一点的文章,多维向量下的公式,我也没写,因为公式太难打了。。。。。想了解的可以多看看别人的文章。

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 马式距离(Mahalanobis Distance)是一种用于测量两个样本之间的相似度的方法。它考虑了样本之间的协方差矩阵,使得距离的计算更准确。 要在MATLAB中实现马式距离公式,可以按照以下步骤进行: 1. 确定样本的维度和数量,假设有n个样本,每个样本有m个特征。 2. 创建一个n×m的矩阵 X,其中每一行代表一个样本,每一列代表一个特征。 3. 计算协方差矩阵S = cov(X)。 4. 计算协方差矩阵的逆矩阵inv_S = inv(S)。 5. 对于每对样本i和j,计算它们之间的马式距离D(i,j) = sqrt((X(i,:) - X(j,:)) * inv_S * (X(i,:) - X(j,:))')。 下面是MATLAB代码的示例实现: ``` % 假设有2个样本,每个样本有3个特征 X = [1 2 3; 4 5 6]; % 计算协方差矩阵 S = cov(X); % 计算协方差矩阵的逆矩阵 inv_S = inv(S); % 计算马式距离 D = sqrt((X(1,:) - X(2,:)) * inv_S * (X(1,:) - X(2,:))'); disp(D); ``` 以上代码将输出两个样本之间的马式距离。 需要注意的是,对于高维的数据,协方差矩阵可能是奇异的(非满秩),这会导致计算逆矩阵时出现问题。在这种情况下,可以通过使用奇异值分解等方法来解决。 ### 回答2: 马氏距离是一种用于度量两个样本集合之间的距离的方法,可以用于判断样本之间的相关性。在MATLAB中,可以按照以下步骤实现马氏距离的计算: 1. 设定样本数据集X,其中每一行表示一个样本,每一列表示一个特征。 2. 计算样本数据集X的协方差矩阵S,可以使用cov函数来实现,其中S的大小为特征数×特征数。 ``` S = cov(X); ``` 3. 计算协方差矩阵S的逆矩阵invS。 ``` invS = inv(S); ``` 4. 设定样本数据集Y,其中每一行表示一个目标样本,每一列表示一个特征。 5. 计算Y中每个样本与X中样本之间的马氏距离,可以使用pdist2函数来实现。 ``` mahalanobis_d = pdist2(X, Y, 'mahalanobis', invS); ``` 这里的'mahalanobis'表示使用马氏距离计算,invS为协方差矩阵S的逆矩阵。 以上就是用MATLAB实现马氏距离的步骤,通过计算样本数据集Y与样本数据集X之间的马氏距离,可以得到它们之间的相关性信息。 ### 回答3: 马式(Mahalanobis)距离是一种常用距离度量方法,可以用于表示样本点与样本集之间的相似性。它考虑了各个特征之间的相关性,与欧氏距离不同,它将特征空间进行了变换,使得各个特征之间的相关性降低,然后再计算样本点在新的特征空间中的欧氏距离。 在MATLAB中,可以通过以下步骤实现马式距离的计算: 1. 计算样本集的协方差矩阵covMatrix: covMatrix = cov(dataSet); 2. 对协方差矩阵进行求逆操作invCovMatrix: invCovMatrix = inv(covMatrix); 3. 计算样本点与样本集的均值的差diffMatrix: diffMatrix = bsxfun(@minus, dataSet, mean(dataSet)); 4. 将diffMatrix与invCovMatrix相乘,得到马式距离的平方值mahalanobisDist2: mahalanobisDist2 = sum((diffMatrix * invCovMatrix) .* diffMatrix, 2); 注意,上述代码中的dataSet是一个矩阵,其中每一行代表一个样本点,每一列代表一个特征。mean(dataSet)计算各个特征的均值。使用bsxfun函数可以方便地进行矩阵的相减操作。 最终,mahalanobisDist2即为样本点与样本集之间的马式距离的平方值。如果需要得到马式距离的实际值,只需对mahalanobisDist2进行开方操作即可。 以上就是马式距离公式在MATLAB中的实现方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值