[英]How to calculate KL Divergence between two batches of distributions in Pytroch?
[英]Calculate KL Divergence between two gamma distribution list
我有兩個清單。 兩者都包括標准化百分比:
我希望將這兩個列表擬合為伽馬分布,然后計算返回的兩個列表以獲取KL值。
我已經有能力去吉隆坡了。
這是我用來計算伽瑪的函數:
def gamma_random_sample(data_list):
mean = np.mean(data_list)
var = np.var(data_list)
g_alpha = mean * mean / var
g_beta = mean / var
for i in range(len(data_list)):
yield random.gammavariate(g_alpha, 1/g_beta)
將兩個列表放入伽瑪分布:
actual_grs = [i for i in f.gamma_random_sample(actual_population_distribution)]
sample_grs = [i for i in f.gamma_random_sample(sample_population_distribution)]
這是我用來計算KL的代碼:
kl = np.sum(scipy.special.kl_div(actual_grs, sample_grs))
上面的代碼不會產生任何錯誤。
但是我懷疑我對伽瑪所做的方法是錯誤的,因為要獲取均值和方差的np.mean/var
。
實際上,該數字不同於:
mean, var, skew, kurt = gamma.stats(fit_alpha, loc = fit_loc, scale = fit_beta, moments = 'mvsk')
如果我用這種方式。
通過使用“ mean, var, skew, kurt = gamma.stats(fit_alpha, loc = fit_loc, scale = fit_beta, moments = 'mvsk')
”,我將得到一個大於1的KL值,因此這兩種方式均無效得到正確的KL。
我想念什么?
請參閱此堆棧溢出文章: https : //stats.stackexchange.com/questions/280459/estimating-gamma-distribution-parameters-using-sample-mean-and-std
我不明白您要做什么:
actual_grs = [i for i in f.gamma_random_sample(actual_population_distribution)]
sample_grs = [i for i in f.gamma_random_sample(sample_population_distribution)]
看起來您不適合gamma分布,看起來像您正在使用Moment of Moment估計器來獲取gamma分布的參數,然后為您的實際(樣本)的每個元素繪制一個隨機數)_population_distribution列表給出了列表的分布統計信息。
眾所周知,伽瑪分布很難擬合。 我希望您的實際數據列表更長-4個數據點幾乎不足以估計兩個參數的分布。 在獲得數百個或更多元素之前,估算是一種垃圾,請在MLE估算器上查看此文檔,以獲取gamma分布的fisher信息: https : //www.math.arizona.edu/~jwatkins/O3_mle .pdf 。
我也不知道您要如何處理kl差異。 您的實際總體已經標准化為1,樣本分布也已標准化。 您可以將這些元素直接插入KL散度中以獲得離散分數-使用代碼執行的操作是使用定義的伽瑪函數將伽瑪噪聲拉伸並添加到原始列表值中。 在原始人口數據的伽馬破壞之后,您與KL散度的偏差可能更大。
對不起,我只是看不到您要在這里完成的工作。 如果要猜測您的初衷,我想說您的問題是,您需要數百個數據點來保證與任何伽瑪擬合程序的融合。
編輯:我只是想補充一下關於KL分歧。 如果您打算用KL散度對適合的伽瑪分布進行評分,最好使用分析解決方案,其中兩個伽瑪分布的比例和形狀參數是您的兩個輸入。 除非對100,000個隨機樣本進行采樣並將其直方圖划分為1,000個左右,然后對直方圖進行歸一化,否則隨機采樣嘈雜的數據點將無濟於事-我只是將這些數字舍棄掉,但您將想要近似一個連續的分布盡可能地好,這將是困難的,因為伽馬分布的尾巴很長。 本文檔提供了針對通用發行版的分析解決方案: https : //arxiv.org/pdf/1401.6853.pdf 。 只需將第三個參數設置為1並進行簡化,然后編寫函數即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.