手推公式--马氏距离

  • 距离公式
  • 马氏距离
  • 按欧氏距离计算:
  • 按马氏距离计算:


距离公式

距离 用于评价点与点远近关系的数值。常用的距离公式有欧式距离曼哈顿距离马氏距离余弦距离等。采用不同的公式计算的远近关系的数值会有所不同。这些不同也体现了不同距离公式的运用场景的不同。

马氏距离

最近遇到一些问题,主要是一些特征单位不统一,传统的欧氏距离不能很好反应它们之间远近关系了,于是希望找到一种消除单位影响的距离评价方法,于是马氏距离出来了:

例子:(例子取自 )

如果我们以厘米为单位来测量人的身高,以克(g)为单位测量人的体重。每个人被表示为一个两维向量,如一个人身高173cm,体重50000g,表示为(173,50000),根据身高体重的信息来判断体型的相似程度。

我们已知小明(160,60000);小王(160,59000);小李(170,60000)。

马氏距离python建模实现 马氏距离计算实例_协方差矩阵

按欧氏距离计算:

马氏距离python建模实现 马氏距离计算实例_欧氏距离_02

注:
这里可以看出距离公式的一些必要条件
1.同一性:小明-小明的距离=0
2.对称性:小明-小王=小王-小明
3.直递性:小明-小王 <= 小明-小李 + 小王-小李
4.非负性
值得注意的是:计算出数值越小说明在**该公式(模型)**中距离近

问题
通过欧氏距离计算小明-小李距离最近,但我们发现该计算完全没有考虑单位的影响,常识告诉我们在评价人这个场景里身高的数值cm远小于体重g,这意味着身高的权重降低了很多。未解决这一问题马氏距离出来了

按马氏距离计算:

1.计算均值

计算身高、体重的均值为

马氏距离python建模实现 马氏距离计算实例_马氏距离_03

2.计算样本与均值的差值

马氏距离python建模实现 马氏距离计算实例_欧氏距离_04

3.计算差值的协方差矩阵

马氏距离python建模实现 马氏距离计算实例_欧氏距离_05


4.计算差值的协方差矩阵的逆

马氏距离python建模实现 马氏距离计算实例_马氏距离python建模实现_06


5.计算马氏距离

马氏距离python建模实现 马氏距离计算实例_马氏距离python建模实现_07


3×2 2×2 2×3 三个矩阵相乘最后为3×3

马氏距离python建模实现 马氏距离计算实例_距离计算_08


最后发现距离都是2。。。(需要开方)

注:

这里也可以看到马氏距离服从距离的必要条件

值得注意的是:
1.当协方差矩阵为单位矩阵时,马氏距离就是欧式距离
2.马氏距离通过协方差矩阵的逆计算消除单位的作用
3.比较奇特的是小王-小李距离也是2,这一点我也没太理解,欢迎各位补充。。。