R - 关联规则 - 先验

Posted

技术标签:

【中文标题】R - 关联规则 - 先验【英文标题】:R - association rules - apriori 【发布时间】:2015-04-13 15:08:19 【问题描述】:

我正在运行这样的先验算法:

rules <-apriori(dt)
inspect(rules)

其中 dt 是我的 data.frame 格式:

> head(dt)
   Cus T C B
1:  C1 0 1 1
2:  C2 0 1 0
3:  C3 0 1 0
4:  C4 0 1 0
5:  C5 0 1 0
6:  C6 0 1 1

数据集的想法是捕获客户以及他/她是否在特定购买中购买了三种不同的商品(T、C 和 B)。例如,根据上面的信息,我们可以看到 C1 买了 C 和 B;客户 C2 到 C5 只买了 C,客户 C6 只买了 C 和 B。

输出如下:

   lhs      rhs   support confidence      lift
1      => T=0    0.90  0.9000000 1.0000000
2      => C=1    0.91  0.9100000 1.0000000
3  B=0 => T=0    0.40  0.8163265 0.9070295
4  B=0 => C=1    0.40  0.8163265 0.8970621
5  B=1 => T=0    0.50  0.9803922 1.0893246
6  B=1 => C=1    0.51  1.0000000 1.0989011

我的问题是:

1) 我怎样才能摆脱 T、C 或 B 等于 0 的规则。如果你想一想,规则 B=0 => T=0 甚至 B=1 => T=0 没有任何意义。

2)我正在阅读先验算法,在大多数示例中,每一行代表实际的交易,所以在我的例子中,它应该是这样的:

C,B
C
C
C
C
C, B

而不是我的一组 1 和 0,这是一个规则吗?或者我仍然可以使用我的格式吗?

谢谢

【问题讨论】:

【参考方案1】:

不确定程序的目的应该是什么,但 Apriori 算法的目的是首先提取给定数据的频繁项集,其中频繁项集是一定数量的项目,这些项目经常以这样的数量出现在数据中。其次是生成那些提取的频繁项集关联规则。例如,关联规则如下所示:

B -> C

在所述情况下,这意味着购买 B 的客户也以一定的概率购买 C。其中概率由 Apriori 算法的支持度和置信度决定。支持度调节频繁项集的数量,置信度调节关联规则的数量。置信度上的关联规则称为强关联规则。 不明白在这种背景下,为什么要使用 Apriori 算法来确定客户是否购买了不同的商品。这可以通过 if 语句来回答。在这种情况下,提供的输出毫无意义。例如,第三行的输出表明,如果客户不购买 B,那么他不会购买 T,支持率为 40%,置信度为 81.6%。除了关联规则没有支持之外,只有关联规则 B -> C 是正确的,但它的置信度值是错误的。 然而,如果目标是生成描述的关联规则,则原始 Apriori 无法以这种格式操作输入:

> head(dt)
  Cus T C B
1: C1 0 1 1
2: C2 0 1 0
3: C3 0 1 0
4: C4 0 1 0
5: C5 0 1 0
6: C6 0 1 1

对于未定制的 Apriori 算法,数据集需要这种格式:

> head(dt) 
C1: B, C 
C2: C
C3: C 
C4: C 
C5: C 
C6: B, C

查看两种解决方案:要么在任何地方格式化输入,要么将 Apriori 算法自定义为这种格式,这可以说是算法中输入格式的变化。为了阐明对所述输入格式的需求,Apriori 算法与提供的数据简而言之:

Support level               = 0.3
Confidence level            = 0.3
Number of customers         = 6

Total number of B's bought  = 2
Total number of C's bought  = 6

Support of B                = 2 / 6 = 0.3 >= 0.3 = support level
Support of C                = 6 / 6 = 1   >= 0.3 = support level
Support of B, C             = 2 / 6 = 0.3 >= 0.3 = support level

-> Frequent itemsets        = B, C, BC

-> Association rules        = B -> C

Confidence of B -> C        = 2 / 2 = 1 >= 0.3 = confidence level

-> Strong association rules = B -> C

希望这会有所帮助。

【讨论】:

刚刚看到您的查询是从 2015 年开始的:(无论如何,它可能对某人有所帮助:)

以上是关于R - 关联规则 - 先验的主要内容,如果未能解决你的问题,请参考以下文章

R中使用先验函数的关联规则

是否可以在 mysql 语句中运行先验关联规则?

如何为关联规则分析使用一个热编码数据帧(先验)

R中的关联规则没有足够的RAM [关闭]

多维关联规则挖掘算法r语言能实现吗

关联规则与购物车比较