如果我有一個字符串2個載體,如:在R中,如何計算KL的兩個向量之間的距離?
> list1 = c("cat", "dog", "cat", "rabbit", "dog", "cat")
> list2 = c("dog", "rabbit", "dog", "mouse", "dog", "rabbit", "cat")
我可以得到每個分佈。例如:
> dist1 = table(list1)/length(list1)
> dist2 = table(list2)/length(list2)
> dist1; dist2
list1
cat dog rabbit
0.5000000 0.3333333 0.1666667
list2
cat dog mouse rabbit
0.1428571 0.4285714 0.1428571 0.2857143
如何計算這兩個分佈之間的KL距離? (使用dist2作爲基線。)
我見過的KL函數(例如kl.dist)需要相同長度的向量。
該措施(的Kullback-Leibler距離),用於離散分佈使用商的對數對於每對概率。無論你如何看待它(因爲列表1中的鼠標概率爲零),你可能需要零對數記錄或除零對數記錄,這兩者在這裏都是無用的。對於要計算的距離,所有概率必須爲非零。 – Gladwell
實際上,只有基本分佈(dist2在這裏)需要非零。如果p爲0,則p * log(p/q)定義爲零。這就是爲什麼我使用dist2作爲基準。無論如何,我仍然對如何計算KL距離感興趣。 – kf913
爲什麼不只是讓你的分佈長度相等,並將缺省值的分佈設置爲0? –