Python 马氏距离求取函数详解
作者:苏苏与阿言 发布时间:2023-08-27 01:28:58
标签:Python,马氏距离,取函数
马氏距离区别于欧式距离,如百度知道中所言:
马氏距离(Mahalanobis distance)是由印度统计学家马哈拉诺比斯(P. C. Mahalanobis)提出的,表示点与一个分布之间的距离。它是一种有效的计算两个未知样本集的相似度的方法。与 欧氏距离不同的是,它考虑到各种特性之间的联系(例如:一条关于身高的信息会带来一条关于体重的信息,因为两者是有关联的),并且是尺度无关的(scale-invariant),即独立于测量尺度。对于一个均值为μ, 协方差矩阵为Σ的多变量向量,其马氏距离为sqrt( (x-μ)'Σ^(-1)(x-μ) )。
因此,对于马氏距离最终的定义式为:
上代码,将马氏距离求取式,封装为Python函数,拷贝即可使用:
from numpy import *
import numpy
def get_mahalanobis(x, i, j):
xT = x.T # 求转置
D = numpy.cov(xT) # 求协方差矩阵
invD = numpy.linalg.inv(D) # 协方差逆矩阵
assert 0 <= i < x.shape[0], "点 1 索引超出样本范围。"
assert -1 <= j < x.shape[0], "点 2 索引超出样本范围。"
x_A = x[i]
x_B = x.mean(axis=0) if j == -1 else x[j]
tp = x_A - x_B
return numpy.sqrt(dot(dot(tp, invD), tp.T))
使用方式如下:
if __name__ == '__main__':
# 初始化数据点集,或者从其它地方加载
x = numpy.array([[3, 4], [5, 6], [2, 2], [8, 4]])
# 求第0个点到均值之间的马氏距离(j为-1时代表均值)
print(get_mahalanobis(x, 0, -1))
# 求第0个点到第1个点之间的马氏距离
print(get_mahalanobis(x, 0, 1))
# 求第2个点到第3个点之间的马氏距离(索引从0开始算起)
print(get_mahalanobis(x, 2, 3))
运行结果贴图
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
来源:https://blog.csdn.net/weixin_40901068/article/details/115671198
0
投稿
猜你喜欢
- 效果展示:程序简介1.使用pygame模组2.在material目录下有一些素材3.吃豆人的游戏主体4.吃豆人怪物的AI(未使用深度学习)主
- 作者:AngelGavin 出处:CSDNInternet Explorer 5.0 对 XML 提供哪个级别的支持?Inter
- 0x00 前言大家对HTTP代理应该都非常熟悉,它在很多方面都有着极为广泛的应用。HTTP代理分为正向代理和反向代理两种,后者一般用于将防火
- 这里推荐使用OTK脚本安装Oracle,会大大提高安装Oracle的成功系数。DescriptionoraToolKit is the Sw
- Python具有基本的文本文件读写功能。Python的标准库提供有更丰富的读写功能。文本文件的读写主要通过open()所构建的文件对象来实现
- 本文实例为大家分享了PHP实现统计代码行数小工具,供大家参考,具体内容如下为了方面统计编程代码行数,做了一个小工具。自动统计指定目录以及目录
- 1、图片防盗链在一些大型网站中,比如百度贴吧,该站点的图片采用了防盗链的规则,以至于使用下面代码会发生错误。简单代码:<!DOCTYP
- 本文实例为大家分享了python实现单线程多任务非阻塞TCP服务端的具体代码,供大家参考,具体内容如下# coding:utf-8from
- 首先,eval模式和train模式得到不同的结果是正常的。我的模型中,eval模式和train模式不同之处在于Batch Normaliza
- 方法一:简单,得不到参数,只有一个虚拟路径 代码如下:GetUrl =request("url") 例如:http://
- 现在做的一个小项目需要用到python的相关知识,但是因为太久没用一些东西都忘掉了,因此在本篇博客中记录一下python的函数和类的基础知识
- 这里首先给出来我很早之前写的一篇博客,Python实现去除列表中重复元素的方法小结【4种方法】,感兴趣的话可以去看看,今天是在实践过程中又积
- 1.腾讯企业邮箱SMTP服务器地址:smtp.exmail.qq.com,ssl端口为:4652.确保腾讯企业邮箱中开启了SMTP服务:3.
- 最近在使用Python的过程中,发现网上很少提到在使用post方式时,怎么传一个数组作为参数的示例,此处根据自己的实践经验,给出相关示例:单
- 不同于以往为大家介绍的函数使用,我们利用pivot函数可以实现的方式,就是用来重塑数据使用的,在python的使用上并不常见,但是如果需要利
- 以前经常吃公司旁边的食堂,人多,排队。夏天的时候,我们总要找一个靠窗口通风好的地方坐,没有空调只有风扇,风扇很多,开关都集中在一个地方,应该
- CSS换肤技术一直是一个比较热门的话题,通过给HTML文档不同的CSS样式应用,实现完全不同或风格迥异的页面效果。这样的技术一直为大家所津津
- 声明定位元素:position属性值设置除默认值static以外的元素,包括relative,absolute,fixed。平台:win/I
- 本文实例讲述了python使用cPickle模块序列化的方法,分享给大家供大家参考。具体方法如下:import cPickledata1 =
- 原来的程序是使用sqlite这个嵌入式数据库作为Remit(code name)的数据源的,因为NHibernate支持这个,然而有一点不好