jaccard (или друг подобен) индекс на редове на data.frame в R

Надявам се, че можете да ми помогнете в проблем, върху който се разбивам.

Имам 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 като подходящ математически индекс, но той се прилага само за няколко набора. Мислех да изчисля индекса на Jaccard за всяка уникална двойка от ipc за всяка стойност appl, след което да изчисля средната стойност.

Намерих функцията 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 }

?

Проверих многократно вече отговорени въпроси по темата, но не мога да ги приложа успешно.

Благодаря


person Matteo Tubiana    schedule 16.10.2015    source източник


Отговори (1)


За обикновен жакард използвайте count (пресечна точка на двата ipc набора = общи елементи) и го разделете на count (обединение на двата набора = всички елементи на двата ipc набора)

Това дава локално решение, което означава измерване на сходството между двата дадени комплекта. Но ако искате да изчислите глобално решение, което можете да сравните всяка една ябълка с друга в глобално пространство, тогава първо трябва да съберете всички възможни ipc кодове за всеки предмет (напр. ябълка) и след това да го използвате като знаменател на горния jaccard изчисление.

По-сложен сценарий с честоти на всеки елемент също може да бъде решен чрез разглеждане на всеки ipc като хистограма и след това изчисляване на разстоянието на хистограмата чрез една от различните функции (разстояние на земен двигател ИЛИ ентропийно разстояние на Дженсън-Шанън и т.н.)

За да направите това, приемете, че и двете ipc колекции са набори от подобни елементи с честота 0 за всеки несъществуващ елемент в който и да е от комплектите

person AShojaee    schedule 07.01.2016