правила asotiation, как мне преобразовать данные для fpgrowth - PullRequest
1 голос
/ 20 июня 2020

У меня есть такие данные

set.seed(123)
#fake data
dat <- list()
for(i in 1:1000) dat[[i]] <- LETTERS[sample(20)] [1:sample(10)[1]]
head(dat)

.

[[1]]
[1] "M" "L" "N" "H" "F" "P" "D"

[[2]]
[1] "F" "J" "C" "A" "G" "R" "M" "O" "S"

[[3]]
[1] "Q" "C" "E" "O" "P" "D"

[[4]]
[1] "K" "C" "P" "J" "N" "O" "B" "F" "Q"

[[5]]
[1] "K" "Q" "C"

[[6]]
[1] "M" "S" "A" "O" "E" "Q"

Мне нужно найти все ассоциации с "L"

Я использовал априори из arules package

library(arules)
rules <- apriori(data = dat, 
                 parameter = list(supp = 0.01, 
                                  conf = 0.01), 
                  appearance = list(rhs="L")
                 )
rules

И работает отлично, но в какой-то момент для меня оказалось слишком медленно. Я решил попробовать fpgrowth из rCBA package

library(rCBA)
dat2 <- as(dat,"transactions")

rules <- rCBA::fpgrowth(dat2, support=0.01, 
                        confidence=0.01,
                        consequent="L")

, но получаю сообщение об ошибке

2020-06-20 08:09:35 rCBA: initialized
2020-06-20 08:09:36 rCBA: data 1000x20
     took: 1.21  s
����. 20, 2020 8:09:36 �� cz.jkuchar.rcba.fpg.FPGrowth run
INFO: FPG: start
java.lang.NullPointerException
Error in dimnames(x) <- dn : 
  length of 'dimnames' [2] not equal to array extent
    at java.base/java.lang.String.<init>(String.java:254)
    at cz.jkuchar.rcba.rules.Tuple.getCopy(Tuple.java:41)
    at cz.jkuchar.rcba.fpg.FPGrowth.insert(FPGrowth.java:304)
    at cz.jkuchar.rcba.fpg.FPGrowth.lambda$buildTree$0(FPGrowth.java:62)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1510)
    at cz.jkuchar.rcba.fpg.FPGrowth.buildTree(FPGrowth.java:59)
    at cz.jkuchar.rcba.fpg.FPGrowth.run(FPGrowth.java:125)
    at cz.jkuchar.rcba.fpg.FPGrowth.run(FPGrowth.java:99)
    at cz.jkuchar.rcba.r.RPruning.fpgrowth(RPruning.java:204)

, а пример из rCBA package у меня работает нормально .. Я понимаю что мне нужно преобразовать мои данные по-другому, но я не знаю как .. Спасибо вам

UPD ======= за == MarBlo ========= ====== дайте пожалуйста более полный ответ, не понимаю как им пользоваться

dat[[1]]
[1] "M" "L" "N" "H" "F" "P" "D"

.

DAT2 <- do.call(rbind.data.frame,dat)

DAT2[1,]
 c..M....F....Q....K....K....M....O....E....O....N..
1                                                   M
  c..L....J....C....C....Q....S....D....I....H....O..
1                                                   L
  c..N....C....E....P....C....A....O....T....J....L..
1                                                   N
  c..H....A....O....J....K....O....D....G....B....F..
1                                                   H
  c..F....G....P....N....Q....E....O....C....R....M..
1                                                   F
  c..P....R....D....O....C....Q....D....Q....L....S..
1                                                   P
  c..D....M....Q....B....K....M....O....R....C....G..
1                                                   D
  c..M....O....C....F....Q....S....D....A....T....C..
1                                                   M
  c..L....S....E....Q....C....A....O....K....O....T..
1                                                   L
  c..N....F....O....K....K....O....D....P....H....K..
1                                                   N
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...