机器学习中的数学——距离定义(二十七):巴氏距离(Bhattacharyya Distance)

在统计中,巴氏距离(Bhattacharyya Distance)测量两个离散或连续概率分布的相似性。它与衡量两个统计样品或种群之间的重叠量的巴氏系数密切相关。巴氏距离和巴氏系数以20世纪30年代曾在印度统计研究所工作的一个统计学家A. Bhattacharya命名。同时,巴氏系数可以被用来确定两个样本被认为相对接近的,它是用来测量中的类分类的可分离性。

首先,我们先定义离散和连续情况下的巴氏系数:
离散值: B C ( p , q ) = ∑ p ( x ) q ( x ) 连续值: B C ( p , q ) = ∫ p ( x ) q ( x ) d x \begin{aligned} &\text{离散值:}BC(p, q)=\sum\sqrt{p(x)q(x)}\\ &\text{连续值:}BC(p, q)=\int\sqrt{p(x)q(x)}\text{d}x \end{aligned} ​离散值:BC(p,q)=∑p(x)q(x) ​连续值:BC(p,q)=∫p(x)q(x) ​dx​

在得到了巴氏系数后巴氏距离被定义为:
D B ( p , q ) = − ln ⁡ ( B C ( p , q ) ) D_B(p, q)=-\ln(BC(p, q)) DB​(p,q)=−ln(BC(p,q))

从公式可以看出,巴氏系数 B C ( p , q ) BC(p, q) BC(p,q)可以海林格距离联系起来,此时海林格距离可以被定义为:
H ( p , q ) = 1 − B C ( p , q ) H(p, q)=\sqrt{1-BC(p,q)} H(p,q)=1−BC(p,q)

接下来,我们来看一下求 B C ( p , q ) BC(p, q) BC(p,q)的Python实现以及求出 B C ( p , q ) BC(p, q) BC(p,q)后求解海林格距离和巴氏距离的Python实现:

def BC(p,q):
    import numpy as np
    p = np.array(p)
    q = np.array(q)
    return np.sum(np.sqrt(p * q))
    
def HellingerDistance(p, q):
    import numpy as np
    bc = BC(p,q)
    return np.sqrt(1 - bc)
    
def BhattacharyyaDistance(p, q):
    import numpy as np
    bc = BC(p,q)
    return np.log(bc)
上一篇:Blinn-Phong 光照模型 Demo (Python)


下一篇:左手右手一个(不是)从左逆右逆广义逆到求解线性方程组的最小二乘解