2016-08-16 112 views
1

在R中的aRules包中,我怎麼能有效地找到關閉關聯規則?即具有封閉LHS項目集的規則R aRules:查找封閉關聯規則

如果添加任何項目會減少支持,則項目集關閉。

的包提供以下采礦選項:

目標:指示關聯的開採的類型的字符串。 一個

  • 「頻繁項集」
  • 「最大頻繁項集」
  • 「閉頻繁項集」
  • 「規則」(僅適用於先驗)
  • 「hyperedgesets」(僅適用對於Apriori;參見定義關聯•超定值)

似乎沒有「封閉規則」選項。有兩個明顯的變通辦法:

  1. 礦規則和封閉項集

    rules = apriori(data, parameter=list(target="rules"))) 
    rules <- rules[is.closed(generatingItemsets(rules))] 
    

這可以說是相當緩慢的應用過濾器。例如,對於10k項目的5k交易,aPriori在10秒內生成8M規則。關閉過濾器花費了大約20分鐘,導致約3萬個關閉規則。

  • 煤礦關閉頻繁項集和關聯應用過濾器(置信度,提升等)
  • 尚未實現,但它似乎是一個周圍實現的東西很多方式簡單。如果有人知道其他的實現(其他R包或甚至R之外的東西),可以這樣做,指針會非常有幫助。例如, The SPMF library似乎已經對它的支持,想知道是否有人使用它

    +0

    SPMF庫提供了Java中封閉關聯規則挖掘的快速實現以及許多關聯規則挖掘的其他算法。你可以檢查包裝從R調用SPMF庫(https://github.com/pommedeterresautee/spmf)。 – Phil

    回答

    0

    功能ruleInduction()可用於創建 培等人定義的封閉的規則有經驗。 (2000)作爲規則X -> Y,其中XY 是關閉的頻繁項目集。從手冊頁(略增強)採取以下:

    data("Adult") 
    ## find all closed frequent itemsets 
    closed <- apriori(Adult, 
        parameter = list(target = "closed", support = 0.4)) 
    
    ## use rule induction to produce all closed association rules 
    closed_rules <- ruleInduction(closed, Adult) 
    
    ## X&Y are already closed, check that X is also closed 
    closed_rules[is.element(lhs(closed_rules), items(closed))] 
    
    ## inspect the resulting closed rules 
    summary(closed_rules) 
    inspect(head(closed_rules, by = "lift")) 
    
    0

    arules包的支持是包含在套裝的結合LHS & RHS所有項目交易的百分比。換句話說,在LHS & RHS上的項目的聯合。

    這意味着,使用參數target = 'closed frequent itemsets'apriori()通話將解決你的第一個問題,只能產生閉合項目集/ 規則基於封閉項目集。

    同樣,要回答您的問題的第二部分,在生成規則之前存在用於通過置信度和提升過濾的參數。這樣,在生成規則後,您不必過濾掉規則,並且您將得到與您正在尋找的相同的結果。

    此外,在您的apriori()調用中過濾關閉的項目集,置信度,升降等將加快清除過程。