5

我正在使用 R 中的包 arules 来生成关联规则。我想限制规则,以便在左侧只有一个特定元素,我们称之为“土豆”。

如果我这样做:

rules <- apriori(dtm.mat, parameter = list(sup = 0.4, conf =
0.9,target="rules"), appearance = list(lhs = c("potatoe")))

我在 lhs 上得到“土豆”,还有所有其他种类的东西。如何强制规则只包含一个元素?参数 maxlen 不符合我的要求,因为据我所知,我无法指定 maxlen 应用于左侧的元素。

4

4 回答 4

6

假设您已经生成了规则(“规则”,在您的问题中),这里是如何对其进行子集化。基本上,您必须将数据强制转换为数据框,然后对其进行子集化。

#Here are the original rules generated with some data I created
# categories are "G", "T", "D", and "potatoe"

> inspect(rules);
lhs        rhs      support    confidencelift
1  {}  => {T}       0.3333333  0.3333333 1.0000000
2  {}  => {G}       0.5000000  0.5000000 1.0000000
3  {}  => {potatoe} 0.5000000  0.5000000 1.0000000
4  {}  => {D}       0.5000000  0.5000000 1.0000000
5  {T} => {G}       0.1666667  0.5000000 1.0000000
6  {G} => {T}       0.1666667  0.3333333 1.0000000
7  {T} => {D}       0.1666667  0.5000000 1.0000000
8  {D} => {T}       0.1666667  0.3333333 1.0000000
9  {G} => {potatoe} 0.1666667  0.3333333 0.6666667
10 {potatoe} => {G} 0.1666667  0.3333333 0.6666667
11 {potatoe} => {D} 0.3333333  0.6666667 1.3333333
12 {D} => {potatoe} 0.3333333  0.6666667 1.3333333

#Coerce into data frame
as(rules, "data.frame");

#Restrict LHS to only certain value (here, "potatoe")
rules_subset <- subset(rules, (lhs %in% c("potatoe")));

#Check to see subset rules
inspect(rules_subset);
lhs            rhs support    confidencelift
1 {potatoe} => {G} 0.1666667  0.3333333 0.6666667
2 {potatoe} => {D} 0.3333333  0.6666667 1.3333333

此方法还允许任意多个 LHS 值,而不仅仅是一个。比我之前提出的答案要容易得多。

于 2013-06-05T17:47:22.890 回答
4

伙计,你只需要default="rhs"在外观参数列表中添加,你就完成了。

rules <- apriori(dtm.mat, parameter = list(sup = 0.4, conf =
0.9,target="rules"), appearance = list(lhs = c("potatoe"), default="rhs"))

lhs=c("potatoe")参数告诉算法LHS 应该只包含“potatoe”,并且该default="rhs"参数告诉算法RHS 应该是默认的(即在那里不应用任何约束)。

于 2013-11-11T22:46:21.310 回答
0

subset() 函数提供了一种搜索事务、项目或规则子集的方法。

potatoerules <- subset(rules , items %in% "potatoe")
于 2017-10-04T22:03:21.970 回答
-6

这是一种方法:

  1. 使用 inspect() 生成规则列表。
  2. 将所有规则复制到文本编辑器中。
  3. 另存为 .txt 文件。
  4. 在 excel 中以固定宽度分隔文件打开。
  5. 过滤 LHS 以仅包含“土豆”[原文如此]。

可能有更简单的方法,但至少您不必在左侧手动搜索“potatoe”[原文如此]。

于 2013-05-29T15:25:46.327 回答