使用频繁项集挖掘构建关联规则?

Posted

技术标签:

【中文标题】使用频繁项集挖掘构建关联规则?【英文标题】:Using frequent itemset mining to build association rules? 【发布时间】:2011-10-26 05:28:58 【问题描述】:

我是这个领域以及术语的新手,所以如果我在某个地方出错,请随时提出建议。我有两个这样的数据集:

数据集 1:

A B C 0 E
A 0 C 0 0
A 0 C D E
A 0 C 0 E

我对此的解释是在某个时间点,(A,B,C,E) 一起发生,(A,C)、(A,C,D,E) 等也是如此。

数据集 2:

5A 1B 5C  0 2E
4A  0 5C  0  0
2A  0 1C 4D 4E
3A  0 4C  0 3E

我的解释是在某个时间点,A 出现 5 次,B 出现 1 次,C 出现 5 次,E 出现 2 次,依此类推。

我正在尝试找出哪些项目一起发生,如果可能的话,还要找出原因和影响。为此,我不明白如何使用这两个数据集(或者如果一个就足够了)。最好有一个很好的教程,但我的主要问题是使用哪个数据集以及如何继续(i)构建频繁项集和(ii)在它们之间建立关联规则。

有人可以给我指出一个实用的教程/示例(最好用 Python),或者至少简要解释一下如何解决这个问题?

【问题讨论】:

【参考方案1】:

关于关联规则的一些理论事实:

关联规则是一种无向数据挖掘类型,可在数据中查找未事先指定目标的模式。这些模式是否有意义取决于人类的解释。 关联规则的目标是检测大型集合中分类变量的特定值之间的关系或关联。 并且规则可以解释为“70% 的购买葡萄酒和奶酪的客户也购买葡萄”。

要查找关联规则,可以使用先验算法。已经有很多python实现了,虽然大部分在实际使用中效率不高:

来源1:http://code.google.com/p/autoflash/source/browse/trunk/python/apriori.py?r=31 来源2:http://www.nullege.com/codes/show/src%40l%40i%40libbyr-HEAD%40test_freq_item_algos.py/5/apriori/python

或者使用Orange数据挖掘库,它有一个good library for association rules。

使用示例:

'''
save first example as item.basket with format
A, B, C, E
A, C
A, C, D, E
A, C, E
open ipython same directory as saved file or use os module
>>> import os
>>> os.chdir("c:/orange")
'''
import orange

items = orange.ExampleTable("item")
#play with support argument to filter out rules
rules = orange.AssociationRulesSparseInducer(items, support = 0.1) 
for r in rules:
    print "%5.3f %5.3f %s" % (r.support, r.confidence, r)

要了解更多关于关联规则/频繁项挖掘的信息,那么我选择的书籍是:

"Introduction to Data mining" - Vipin Kumar,适合初学者的最佳书籍 "Data mining and knowledge discovery handbook",高级用户 "Mining massive data" - 提示如何在现实生活中使用以及如何构建有效的解决方案,免费书籍,http://i.stanford.edu/~ullman/mmds.html 当然有很多精彩的科学论文可供阅读:by example do some search on MS Acedemic about Frequent Pattern mining

没有捷径可走。

【讨论】:

这比orange documentation 在他们的关联规则类上更有帮助。谢谢!【参考方案2】:

使用Bayesian network 似乎是处理此类问题的一种巧妙方法。特别是作为贝叶斯网络结构学习问题。一旦你有了它,你将能够有效地回答 p(A=1|B=0 and C=1) 等问题。

【讨论】:

【参考方案3】:

如果您对每个项目都有数量,那么您可以考虑“高效用项目集挖掘”。这是项集挖掘的问题,但适用于每个交易中物品可以有数量并且每个物品也可以有权重的情况。

如果你只使用基本的 Apriori,那么你会丢失关于数量的信息。

【讨论】:

以上是关于使用频繁项集挖掘构建关联规则?的主要内容,如果未能解决你的问题,请参考以下文章

关联规则—频繁项集Apriori算法

R语言使用apriori算法进行关联规则挖掘实战:关联规则概念频繁项集支持度(support)置信度(confidence)提升度(lift)apriori算法

序列模式挖掘频繁项集与频繁序列

关联分析的关联分析的方法

数据挖掘算法:关联分析二(Apriori)

频繁项集和关联规则 - Apriori 算法