Apriori / Market Basket Analysis - ограничить анализ для наборов товаров определенной длины - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь добывать частые наборы предметов в наборе данных, в котором есть наборы товаров, которые часто продаются вместе.


пример наборов товаров:

A,B,C,D,E
A,B 
B,E
A,B     
B,C    
B,C,E    
A,C,F,G    
D,H,    
I,J,K,L    
A,J,K     
L,C,F
C,B

Я использую либоаприори функции eclat для получения наборов элементов

rules <- apriori(tr, parameter = list(supp=0.01, conf=0.5,target="frequent itemsets")

Можно ли как-нибудь ограничить эти наборы элементов для генерации только на основе транзакций, которые имеют определенную длину (порядок), скажем, только длятранзакции с 2 предметами или 3 предметами и т. д. ..?

Так, например, когда я хочу добыть наборы с длиной 2 для частых наборов, я должен видеть только

     count
A,B  2 and not 3 because {A,B,C,D,E} doesn't qualify
B,E  1
B,C  2
D,H  1

1 Ответ

0 голосов
/ 01 октября 2019

Если я вас правильно понял, вы хотите создавать транзакции и подгруппировать их, чтобы сохранить только те транзакции, которые содержат ровно 2 элемента. Вот как вы это делаете:

library('arules')

trans_list <- list(
  c('A', 'B', 'C', 'D', 'E'),
  c('A', 'B'), 
  c('B', 'E'),
  c('A', 'B'),     
  c('B', 'C'), 
  c('B', 'C', 'E'),    
  c('A', 'C', 'F', 'G'),    
  c('D', 'H'),
  c('I', 'J', 'K', 'L'),    
  c('A', 'J', 'K'),
  c('L', 'C', 'F'),
  c('C', 'B')
)

Создание транзакций из списка

trans <- as(trans_list, "transactions")
trans
#> transactions in sparse format with
#>  12 transactions (rows) and
#>  12 items (columns)

inspect(head(trans))
#>     items      
#> [1] {A,B,C,D,E}
#> [2] {A,B}      
#> [3] {B,E}      
#> [4] {A,B}      
#> [5] {B,C}      
#> [6] {B,C,E}

Выбор только транзакций размером 2 элемента

trans_2 <- subset(trans, size(trans) == 2)
trans_2
#> transactions in sparse format with
#>  6 transactions (rows) and
#>  12 items (columns)

inspect(head(trans_2))
#>     items
#> [1] {A,B}
#> [2] {B,E}
#> [3] {A,B}
#> [4] {B,C}
#> [5] {D,H}
#> [6] {B,C}

Частые шахтынаборы

itemsets <- apriori(trans_2, parameter = list(supp=0.01, conf=0.5,target="frequent itemsets"))
#> Apriori
#> 
#> Parameter specification:
#>  confidence minval smax arem  aval originalSupport maxtime support minlen
#>          NA    0.1    1 none FALSE            TRUE       5    0.01      1
#>  maxlen            target   ext
#>      10 frequent itemsets 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 ...[6 item(s), 6 transaction(s)] done [0.00s].
#> sorting and recoding items ... [6 item(s)] done [0.00s].
#> creating transaction tree ... done [0.00s].
#> checking subsets of size 1 2 done [0.00s].
#> writing ... [10 set(s)] done [0.00s].
#> creating S4 object  ... done [0.00s].

inspect(itemsets)
#>      items support   count
#> [1]  {E}   0.1666667 1    
#> [2]  {D}   0.1666667 1    
#> [3]  {H}   0.1666667 1    
#> [4]  {A}   0.3333333 2    
#> [5]  {C}   0.3333333 2    
#> [6]  {B}   0.8333333 5    
#> [7]  {B,E} 0.1666667 1    
#> [8]  {D,H} 0.1666667 1    
#> [9]  {A,B} 0.3333333 2    
#> [10] {B,C} 0.3333333 2
...