【问题标题】:How to sort association rules by lhs or rhs in R如何在 R 中按 lhs 或 rhs 对关联规则进行排序
【发布时间】:2016-11-17 14:15:23
【问题描述】:

我有一套来自先验算法的规则。按提升度、信心或支持度对它们进行排序很容易:

rules.sorted = sort(rules, by="lift")

但是假设我有一些规则,其中包含一些不同的 rhs 元素。 我想查看按这些 rhs 元素排序的规则(按字母顺序)。有没有办法做到这一点?

即来自:

    lhs       rhs support   confidence lift    
1   {A}    => {B} 0.3919252 0.9431280  1.930940
2   {B}    => {A} 0.3919252 0.8024194  1.930940
3   {E,C}  => {A} 0.3535204 0.7995546  1.924047
4   {F,I}  => {F} 0.3924175 0.9005650  1.868281
5   {H}    => {G} 0.4194978 0.9659864  1.864941
6   {C,D}  => {A} 0.3653373 0.7141482  1.718525

到这里:

    lhs       rhs support   confidence lift    

2   {B}    => {A} 0.3919252 0.8024194  1.930940
3   {E,C}  => {A} 0.3535204 0.7995546  1.924047
6   {C,D}  => {A} 0.3653373 0.7141482  1.718525
1   {A}    => {B} 0.3919252 0.9431280  1.930940
4   {F,I}  => {F} 0.3924175 0.9005650  1.868281
5   {H}    => {G} 0.4194978 0.9659864  1.864941

这是我使用的规则示例:

library(arules)
download.file("http://archive.ics.uci.edu/ml/machine-learning-databases/mushroom/agaricus-lepiota.data", "mush.data");
dataset = read.table("mush.data", header = F, sep=",", na.strings= "*")
tr <- as(dataset, "transactions")
param  = new("APparameter", "confidence" = 0.9, "support" = 0.7, "minlen"= 2L, "maxlen" = 2L, "target" = "rules") 
rules <-apriori(tr,param)
dput(rules)

【问题讨论】:

  • 当我尝试按 rhs 排序时,我得到 Error in '[.data.frame'(q, , pmatch(by, colnames(q)), drop = FALSE) : undefined columns selected
  • 根据 arules 中的?sort,该方法仅适用于measures stored in the association's slot quality,如果对特定项目感兴趣,您可能希望将您的规则设置为子集。
  • @Cath 我编辑了我的问题以包括dput。 @mtoto 我知道我可以使用给定的 rhs 进行子集化,但我必须为每个元素单独执行此操作。我正在寻找一种更简单的方法
  • @Cath 现在你应该可以查看数据了

标签: r sorting arules


【解决方案1】:

bergant 的解决方案正是您所需要的。我会直接重新排序规则对象中的规则:

rules_sorted <- rules[order(labels(rhs(rules)))]

新规则对象现已排序。

【讨论】:

    【解决方案2】:

    rules 对象中提取基本信息到数据框,如下所示:

    rules_info <-
      data.frame(
        LHS = labels(lhs(rules)), 
        RHS = labels(rhs(rules)),          
        quality(rules)
      )
    

    然后像普通数据框一样排序:

    rules_info[ order(rules_info$RHS), ]
    

    【讨论】:

    • 谢谢,这就是我要找的!
    • 我想做你建议的事情。但是此代码将rhslhs 转换为因子,实际值显示为字符串。我希望 rhslhsrules_info 数据框中显示为集合。有可能吗?
    • @MuhammadAdeelZahid 在创建 data.frame 时使用 stringsAsFactors = FALSE
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    • 2019-02-11
    相关资源
    最近更新 更多