我希望你能帮我解决一个让我心烦意乱的问题。
我有一个包含三列的data.frame:appl
,cod
,ipc
。
此数据集具有多个具有相同appl
的行,每行对应于一个cod
,其与一个ipc
相关联。后者可以是一个或多个值的列表。 appl
和cod
是整数值。
一个例子
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 }
我多次检查过已经回答过有关该主题的问题,但我无法成功应用它们。
由于
答案 0 :(得分:0)
对于一个简单的jaccard使用计数(两个ipc集的交集=公共元素)并将其除以count(两个集合的联合=两个ipc集的所有元素)
这给出了局部解决方案,这意味着测量两个给定集合之间的相似性。但是如果你想计算一个全局解决方案,你可以将每个苹果与全球空间中的另一个苹果进行比较,那么你应该首先为每个主题收集所有可能的ipc代码(例如苹果),然后将其用作上述jaccard的分母计算
通过将每个ipc视为直方图然后通过不同函数之一(地球移动距离或Jensen-Shannon熵距离等)计算直方图距离,可以解决每个项目上具有频率的更复杂场景
为此,假设两个ipc集合都是类似项目的集合,其中任何一个集合上的每个非现有项目的频率为0