R中data.frame行的jaccard(或任何相似性)索引

时间:2015-10-16 09:59:00

标签: r similarity

我希望你能帮我解决一个让我心烦意乱的问题。

我有一个包含三列的data.frame:applcodipc。 此数据集具有多个具有相同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指数是一个合适的数学指标,但仅适用于几组。我想为每个ipc值计算每个唯一appl对的Jaccard索引,然后计算平均值。

我在两组之间找到了Jaccard索引计算的set_similarity函数。

但是,我不知道如何实际实施这一策略 - 或其他任何策略。

如何正确实现

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

我多次检查过已经回答过有关该主题的问题,但我无法成功应用它们。

由于

1 个答案:

答案 0 :(得分:0)

对于一个简单的jaccard使用计数(两个ipc集的交集=公共元素)并将其除以count(两个集合的联合=两个ipc集的所有元素)

这给出了局部解决方案,这意味着测量两个给定集合之间的相似性。但是如果你想计算一个全局解决方案,你可以将每个苹果与全球空间中的另一个苹果进行比较,那么你应该首先为每个主题收集所有可能的ipc代码(例如苹果),然后将其用作上述jaccard的分母计算

通过将每个ipc视为直方图然后通过不同函数之一(地球移动距离或Jensen-Shannon熵距离等)计算直方图距离,可以解决每个项目上具有频率的更复杂场景

为此,假设两个ipc集合都是类似项目的集合,其中任何一个集合上的每个非现有项目的频率为0