在统计中,巴氏距离(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)










