Arules kullanarak yeni veriler için uygun kurallar bulma


11

İlişkilendirme kuralları için madencilik işlemlerinde R (ve arules paketini) kullanıyorum. Yapmak istediğim kuralları oluşturmak ve daha sonra yeni verilere uygulamak.

Örneğin, biri kurallı olan birçok kuralım olduğunu varsayalım {Beer=YES} -> {Diapers=YES}.

Sonra kayıtlardan birinin bira satın aldım ama çocuk bezi değil yeni işlem verileri var. LHS'nin karşılandığı, ancak henüz RHS'nin olmadığı bir kuralı nasıl tanımlayabilirim?

R örneği:

install.packages("arules")
library(arules)

data("Groceries")
**#generate Rules omitting second record**

rules <- apriori(Groceries[-2],parameter = list(supp = 0.05, conf = 0.2,target = "rules"))

Oluşturulan kurallar:

> inspect(rules)
  lhs                   rhs                   support confidence     lift
1 {}                 => {whole milk}       0.25554200  0.2555420 1.000000
2 {yogurt}           => {whole milk}       0.05603010  0.4018964 1.572722
3 {whole milk}       => {yogurt}           0.05603010  0.2192598 1.572722
4 {rolls/buns}       => {whole milk}       0.05664023  0.3079049 1.204909
5 {whole milk}       => {rolls/buns}       0.05664023  0.2216474 1.204909
6 {other vegetables} => {whole milk}       0.07484238  0.3867578 1.513480
7 {whole milk}       => {other vegetables} 0.07484238  0.2928770 1.513480

İkinci işlem, bu müşteriyi gösterir, çünkü yoğurtları vardır, ancak tam süt değil, belki de süt için bir kupon gönderilmelidir. "Kurallar" daki uygulanabilir kurallar yeni işlemler için nasıl bulunabilir?

> LIST(Groceries[2])
[[1]]
[1] "tropical fruit" "yogurt"         "coffee" 

Yanıtlar:


19

Anahtar, aynı paketteki is.subset işlevidir

İşte kod ...

basket <- Groceries[2]
# find all rules, where the lhs is a subset of the current basket
rulesMatchLHS <- is.subset(rules@lhs,basket)
# and the rhs is NOT a subset of the current basket (so that some items are left as potential recommendation)
suitableRules <-  rulesMatchLHS & !(is.subset(rules@rhs,basket))

# here they are
inspect(rules[suitableRules])

# now extract the matching rhs ...
recommendations <- strsplit(LIST(rules[suitableRules]@rhs)[[1]],split=" ")
recommendations <- lapply(recommendations,function(x){paste(x,collapse=" ")})
recommendations <- as.character(recommendations)

# ... and remove all items which are already in the basket
recommendations <- recommendations[!sapply(recommendations,function(x){basket %in% x})]

print(recommendations)

ve üretilen çıktı ...

> inspect(rules[suitableRules])
  lhs         rhs            support confidence     lift
1 {}       => {whole milk} 0.2555420  0.2555420 1.000000
2 {yogurt} => {whole milk} 0.0560301  0.4018964 1.572722

> print(recommendations)
[1] "whole milk"

Steffen - muhteşem! Çok teşekkürler, bu işlevi görmedim. Birkaç maçın ne zaman kolay olacağını hangi kurala uyduğunu belirlemek için bu sıralamayı asansörle (veya başka bir önlemle) görebiliyordum.
B_Miner

Bunun oldukça eski olduğunun farkındayım, ama umarım birisi cevap verir. Doğrudan koymak istersem ne olur basket <- "tropical fruit" "yogurt" "coffee"?
HonzaB

@HonzaB, bence onu doğru türe atmanız gerekiyor, ala:as(list(basket), "itemMatrix")
Harlan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.