Можно ли импортировать разреженную матрицу, чтобы сделать правило ассоциации в R?

Я никогда не использовал R, но теперь мне нужно импортировать разреженную матрицу для выполнения правила ассоциации в R

Мои данные импорта представляют собой разреженную матрицу, подобную этой:

i j x
1 2 3 1
2 3 5 1
3 3 1 1
4 2 5 1
. . . .
. . . .
200000000. . .

размер разреженной матрицы составляет 200000000 X 3, матрица - 200000 X 100000 (большие данные?)

Я хочу использовать эти данные для создания правил ассоциации в R,
Is use 'Package arules' itemMatrix-class & tidLists-class () ? или другие?

А как делать?

Мне это нравится, но не работает:

channel <- odbcConnect("test")
data<-sqlQuery(channel,"select i,j,x from table") # it's work 
(args <- data.frame(data))                    # it's work ,print sparse matrix
#    i j x
#1   2 3 1
#2   3 5 1
#3   3 1 1 
#3   2 5 1 
# ....
(Aa <- do.call(sparseMatrix, args))           # it's work ,print sparse Matrix of class "dgCMatrix"
# 200000 X 100000 sparse Matrix of class "dgCMatrix"
#      1 2 3 4 5....
# [1,] . . . . .
# [2,] . . | . |
# [3,] | . . . |
# ....
rules <- apriori(Aa)                          # it's not work 

Error in as(data, "transactions") : 
no method or default for coercing “dgCMatrix” to “transactions”

Можно ли использовать разреженную матрицу в априорной функции?
Может быть, я использую неправильный пакет?
Нужны ли мне разреженная матрица-> матрица-> правило ассоциации?
или разреженная матрица -> правило ассоциации?


person user2340340    schedule 01.05.2013    source источник
comment
это не работает но что еще? Можете ли вы предоставить сообщение об ошибке?   -  person flodel    schedule 02.05.2013
comment
Ошибка в as (данные, транзакции): отсутствует метод или значение по умолчанию для приведения «dgCMatrix» к «транзакциям».   -  person user2340340    schedule 02.05.2013


Ответы (2)


import i, j:

library(RODBC)
library(arulse)
channel <- odbcConnect("DB", uid="XXXX", pwd="XXXX")
data<-sqlQuery(channel,"select distinct i as TID,j as item from table")
trans <- as(split(data[,"item"], data[,"TID"]), "transactions") # add this
rules <- apriori(trans)
person user2340340    schedule 03.05.2013
comment
Операция разделения невероятно медленная и кажется неэффективной. Поскольку объект транзакций внутренне является разреженной матрицей, кажется, что должен быть простой способ преобразовать объект Matrix в объект транзакции. - person Zach; 20.11.2013

Внутри arules раньше использовал dgcMatrix, но переключился на более эффективный ngcMatrix (бинарный). Если мы перейдем к этому, мы классные.

library(tidyverse)
library(arules)

data = data.frame(ID = sample(LETTERS[1:3], 20, T), item = sample(letters[1:5], 20, T), stringsAsFactors = F)

data %>%
  unique %>%
  xtabs(~ item + ID, data = ., sparse = T) ->
  m

head(m)
#> 3 x 5 sparse Matrix of class "dgCMatrix"
#>   a b c d e
#> A . 1 1 1 1
#> B 1 . 1 1 1
#> C . 1 1 1 .

apriori(m)
#> Error in as(data, "transactions"): no method or default for coercing "dgCMatrix" to "transactions"

Это ожидаемая ошибка, но если мы конвертируем в другую разреженную матрицу (довольно быстро) -

m1 <- as(m, "ngCMatrix")

apriori(m1)
#> Apriori
#> 
#> Parameter specification:
#>  confidence minval smax arem  aval originalSupport maxtime support minlen
#>         0.8    0.1    1 none FALSE            TRUE       5     0.1      1
#>  maxlen target   ext
#>      10  rules FALSE
#> 
#> Algorithmic control:
#>  filter tree heap memopt load sort verbose
#>     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
#> 
#> Absolute minimum support count: 0 
#> 
#> set item appearances ...[0 item(s)] done [0.00s].
#> set transactions ...[3 item(s), 5 transaction(s)] done [0.00s].
#> sorting and recoding items ... [3 item(s)] done [0.00s].
#> creating transaction tree ... done [0.00s].
#> checking subsets of size 1 2 3 done [0.00s].
#> writing ... [4 rule(s)] done [0.00s].
#> creating S4 object  ... done [0.00s].
#> set of 4 rules

Все работает.

person Michael Griffiths    schedule 17.10.2016