簡體   English   中英

在R中,如何計算兩個字符串向量之間的KL距離?

[英]In R, how to calculate KL Distance between two vectors of strings?

如果我有兩個字符串向量,例如:

> 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)需要長度相同的向量。

下面將產生一個數據幀,其中每一列都有一個列,每個向量字符串的分布情況:

library(dplyr)

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)

BothDist <- full_join(as.data.frame(dist1),as.data.frame(dist2), by = c("list1" = "list2")) 
BothDist[is.na(BothDist)] <- 0

BothDist

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM