2014-09-23 57 views
3

我用arules :: apriori用二進制矩陣,並且只想創建在RHS上有一個特定列的規則。這是在文檔中指定的,但似乎不起作用。很容易事後過濾它,但是我首先浪費了大量的計算時間來計算所有的規則。用arules/apriori過濾rhs不起作用

例子:

library(arules) 
data = data.frame(matrix(rbinom(10000,1, 0.6), nrow=1000)) 
for(i in 1:ncol(data)) data[,i] = as.factor(data[,i]) 
dsRules = as(data, "transactions") 
rules = apriori(dsRules, 
    parameter=list(support = 0.1, minlen = 3, maxlen = 3, target= "rules", confidence = 0.7), 
    appearance = list(rhs = c("X1=1"))) 

規則現在包含3378條規則

rules.sub = subset(rules, subset = (rhs %pin% "X1=1")) 

rules.sub包含172條規則

在我的實際數據,我從數以百萬計結果的去〜4000這是巨大的差異。

回答

2

原來我讀錯了文檔。如果其他人偶然發現此問題:

rhs的文檔是字符向量給出了只能出現在規則/項目集相應位置的項目標籤。所以我的代碼是說項X1只能出現在rhs中,而不是rhs只能包含X1。

要解決這個問題,您可以指定所有其他元素是在LHS如

keep = names(data) 
keep = keep[-1] #remove 1st feature 
keepnames = c(paste0(keep, "=1"), paste0(keep, "=0")) 
rules = apriori(dsRules, 
parameter=list(support = 0.1, minlen = 3, maxlen = 3, target= "rules", confidence = 0.7), 
appearance = list(lhs = keepnames)) 
4

Nsfy,有做這更簡單的方法。您需要添加default='lhs',如appearance=list(rhs='X1=1',default='lhs')。這將限制rhs只有X1=1

+0

謝謝,這將需要100年,我想出來 – 2015-05-23 15:31:19