2015-10-16 90 views
0

我希望你能幫我解決一個我正在崩潰的問題。在R中的data.frame的行上的jaccard(或任何相似性)索引

我有一個data.frame有三列:appl,cod,ipc。 此數據集有多個行,具有相同的appl,每行對應於一個cod,它與一個ipc相關聯。後者可能是一個或多個值的列表。 applcod是整數值。 一個例子

row appl cod   ipc 

11 | 1206 | 3857183 | 16 
12 | 1220 | 1063002 | 29 
13 | 1299 | 46437  | c("26", "31", "33") 
14 | 1317 | 685895 | c("10", "13", "14", "16") 
15 | 1317 | 790606 | c("10", "13", "14", "16") 

我需要一些還告訴我,爲appl每個值,是多麼相似的ipc列表的組成。 我發現Jaccard指數是一個合適的數學指標,但僅適用於幾組數據。我想爲每個的每個唯一對計算Jaccard指數,然後計算每個平均值。

我發現set_similarity函數用於兩組之間的Jaccard指數計算。

但是,我不知道如何實際執行這個策略 - 或者其他任何。

如何實現正確的像

for (each `appl`) 
{ put all `ipc` in a list, 
take all possible unique combinations, 
apply `set_similarity` on them, 
take the average } 

我查了很多次,已經回答了關於該主題的問題,但是我不能成功應用它們。

由於

回答

0

對於一個簡單的Jaccard使用計數(兩個IPC組交集=共同的要素),並通過計數除以它(這兩組聯合=兩者IPC集合中的所有元素)

這給出了一個局部解,這意味着兩個給定集合之間的度量相似度。但是如果你想計算一個全局解決方案,你可以在全球空間中比較每一個蘋果與另一個蘋果,那麼你應該首先收集每個主題(如蘋果)的所有可能的ipc代碼,然後用它作爲上述jaccard的分母計算。

一個更復雜的場景,每個項目的頻率也可以通過考慮每個ipc作爲直方圖,然後通過不同功能之一(地球移動器距離或Jensen-Shannon熵距離等)計算直方圖距離來解決。

要這樣做,假設兩個ipc集合都是類似項目的集合,其集合中的每個非現有項目上的0頻率集合