2017-08-03 100 views
0

我有一組事務包含來自兩個類(A和B)的項目,並且我希望生成封閉關聯規則,其中前提條件僅包含來自A類的項目以及來自B類的後續項目例如,我尋找形式的規則:R arules:生成關聯關係。有外觀限制的規則

  • {A1} => {B2}
  • {A2,A3} => {B1}
  • {A3,A1} => {B3}

我可以很容易地獨立完成其中任何一項,但是無法用這兩個約束來生成規則。

rules <- apriori(
    trans, 
    parameter = list(minlen=2, maxlen=4), 
    appearance = list(lhs = class_A, rhs = class_B, default='none') 
) 

上面的代碼生成的規則符合外觀約束,但沒有關閉。我一直無法找到apriori的參數來生成封閉規則。

我能夠使用以下代碼生成封閉規則,但在傳遞ruleInduction外觀參數時失敗。

closed_is <- apriori(
    trans, 
    parameter = list(minlen=2, maxlen=4, target="closed frequent itemsets"), 
) 

closed_rules <- ruleInduction(
    closed_is, 
    transactions = trans 
) 

我試圖使用subset產生接近規則後應用所需的LHS/RHS類約束,但一直未果。例如,

target_lhs_rules <- subset(closed_rules, subset = lhs %in% as.character(class_A)) 

給所有的從A級至少有一個項目的規則,但不是唯一的A級。因爲在A級的所有項目

target_lhs_rules <- subset(closed_rules, subset = lhs %ain% as.character(class_A)) 

結果中沒有規則,不會出現在任何規則中。

當然arules包涵蓋了這種情況,但我一直沒能找到辦法。任何幫助克服這一點將不勝感激!

回答

0

%ain%不是正確的操作符,因爲如您所說,它要求所有項目都位於項目集中。你需要下面的代碼:

setGeneric("%oin%", 
    function(x, table) standardGeneric("%oin%")) 

setMethod("%oin%", signature(x = "itemMatrix", table = "character"), 
    function(x, table) { 
    pos <- match(table, itemLabels(x)) 
    if (any(is.na(pos))) 
     stop("table contains an unknown item label") 
    size(x[, -pos]) == 0 
    } 
) 

%oin%返回true,只要套裝包含table指定的項目。我將把這段代碼添加到下一個版本的arules中。