计算两个概率分布之间的距离(Hellinger距离)

发布时间 2023-04-07 13:44:18作者: 三叶草body

Hellinger距离

介绍

Hellinger距离是一种用于度量概率分布之间相似度的指标。

在统计学和信息论领域中,它被广泛应用于分类、聚类、图像识别、文本分类等方面。

Hellinger距离又称为Bhattacharyya距离的平方根,它是两个概率分布之间的欧几里德距离的一半,其取值范围在0到1之间。

和欧几里德距离不同的是,Hellinger距离比欧几里德距离更加鲁棒,因为它考虑了概率分布的重叠部分。若两个分布之间没有重叠部分,则Hellinger距离等于1。若两个分布完全一致,则Hellinger距离等于0。

假设有两个概率分布 \(P\)\(Q\),则它们之间的Hellinger距离为:

\[H(P,Q) = \sqrt{\frac{1}{2}\sum_{i}( {\sqrt{p_i}} - {\sqrt{q_i}} )^2} \]

其中,\(p_i\)\(q_i\) 分别表示分布 \(P\)\(Q\) 在第 \(i\) 个样本上的概率。

API

可以使用NumPy库来计算两个概率分布之间的Hellinger距离。以下是一个示例代码:

import numpy as np

def hellinger_distance(p, q):
    # 计算概率分布的平方根
    sqrt_p = np.sqrt(p)
    sqrt_q = np.sqrt(q)
    
    # 计算两个概率分布之间的距离
    distance = np.sqrt(np.sum((sqrt_p - sqrt_q) ** 2)) / np.sqrt(2)
    
    return distance

p = np.array([0.4, 0.3, 0.2, 0.1])
q = np.array([0.3, 0.3, 0.2, 0.2])

print(hellinger_distance(p, q))  # 输出:0.1103108437503541

可以使用NumPy库来计算两个概率分布之间的Hellinger距离。以下是一个示例代码:

import numpy as np

def hellinger_distance(p, q):
    # 计算概率分布的平方根
    sqrt_p = np.sqrt(p)
    sqrt_q = np.sqrt(q)
    
    # 计算两个概率分布之间的距离
    distance = np.sqrt(np.sum((sqrt_p - sqrt_q) ** 2)) / np.sqrt(2)
    
    return distance

使用示例如下:

p = np.array([0.4, 0.3, 0.2, 0.1])
q = np.array([0.3, 0.3, 0.2, 0.2])

print(hellinger_distance(p, q))  # 输出:0.1521458182994425

这是两个简单的概率分布之间的Hellinger距离的示例。您可以更换分布 \(p\)\(q\) 来计算其他分布之间的Hellinger距离。