通俗解释帮助你理解马氏距离含代码

通俗解释帮助你理解马氏距离含代码


读懂这篇文章需要有一定的统计学知识, 至少知道总体与样本, 协方差的计算方法

马氏距离定义

设, 某个总体有m维的指标(feature)
那我们要考虑某一个样本X=(x1,x2,…,xm)与总体的距离. 也就是看这个样本和我们手上的总体距离(看看这个样本多少程度上属于我们手上的数据).

举个例子, 你手上有一堆人的身体数据:体重, 身高, 腿长, 视力. 一共4个维度, 对应上面的m. 这堆数据就是上面的总体.

现在, 又来了一组数据, 这组数据就是我们说的样本, 这个样本X也有4个维度, 具体数值是(500, 300, 100, 5.0), 那么, 马氏距离就是用来判断, 你手头这个新的样本X, 到底和之前你手上的总体数据差多远. 那我们明眼人一看, 就知道, 这个距离应该比较远了. 因为哪有人体重500kg, 身高300cm的.

就是这个意思.

计算公式

大家都可以查到的公式

公式含义(在)

x是一个样本 m*1
μ是总体的均值向量, 里面包含了每个特征的均值(身高体重什么的) m*1
Σ是总体m个特征协方差矩阵 m*m

计算中的坑

使用np.cov()计算, 要注意,接受的参数形式是和本文一样的的, 每一行代表一个特征

代码

import math

def m_dist(data,new_data):
    data = np.array(data)#  总体
    data_mean = np.array(data.mean(axis=0))#  求总体均值向量
    cov = np.cov(data.T) #  转置一下, 满足行标签为特征
    cov_rev = np.linalg.inv(cov)#  ∑求逆矩阵
    diff = new_data-data_mean#  求差
    res = math.sqrt(np.dot(diff,cov_rev).dot(diff.T))#  最后根据公式组合在一起
    return res
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值