計算兩個概率分佈之間的距離(Hellinger距離)

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距離。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章