नए डेटा के लिए उपयुक्त नियम खोजना


11

मैं एसोसिएशन नियमों के लिए खनन लेनदेन के लिए आर (और आरूल्स पैकेज) का उपयोग कर रहा हूं। मैं जो करना चाहता हूं वह नियमों का निर्माण करना है और फिर उन्हें नए डेटा पर लागू करना है।

उदाहरण के लिए, मान लें कि मेरे कई नियम हैं, जिनमें से एक विहित है {Beer=YES} -> {Diapers=YES}

फिर मेरे पास नए ट्रांजेक्शनल डेटा हैं जहां एक रिकॉर्ड ने बीयर खरीदी है लेकिन डायपर नहीं। मैं एक नियम की पहचान कैसे कर सकता हूं जहां एलएचएस मिलता है, लेकिन अभी तक आरएचएस नहीं है?

आर उदाहरण:

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"))

उत्पन्न नियम हैं:

> 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

दूसरा लेन-देन इस ग्राहक को दिखाता है, क्योंकि उनके पास दही है, लेकिन पूरे दूध नहीं शायद दूध के लिए एक कूपन भेजा जाना चाहिए। नए लेनदेन के लिए "नियम" में कोई भी लागू नियम कैसे हो सकता है?

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

जवाबों:


19

कुंजी एक ही पैकेज में is.ububset-function है

यहाँ कोड है ...

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)

और उत्पन्न उत्पादन ...

> 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"

स्टीफन - शानदार! बहुत बहुत धन्यवाद, मैंने वह फंक्शन नहीं देखा। मैं उस रैंकिंग को लिफ्ट (या अन्य माप) द्वारा देख सकता था कि यह निर्धारित करने के लिए कि कौन सा नियम रखना है जब कई मैच काफी आसान होंगे।
B_Miner

मुझे पता है कि यह बहुत पुराना है, लेकिन उम्मीद है कि कोई जवाब दे। अगर मैं सीधे डालना चाहता हूँ तो क्या होगा basket <- "tropical fruit" "yogurt" "coffee"?
होनज़ाब

@ होंजा, मुझे लगता है कि आपको इसे सही प्रकार से कास्ट करने की आवश्यकता होगी, अला:as(list(basket), "itemMatrix")
हरलान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.