使用频繁项集挖掘构建关联规则?
我对这个领域和相关术语都很陌生,所以如果我哪里说错了,请随时指正。我有两个数据集,分别是:
数据集 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),或者至少简单解释一下该如何解决这个问题?
3 个回答
0
如果你有每个商品的数量,那么你可以考虑“高效用商品集挖掘”。这是一种商品集挖掘的方法,专门用来处理每笔交易中商品可以有数量的情况,并且每个商品还可以有一个权重。
如果你只是用基本的Apriori算法,那你就会失去关于数量的信息。
0
看起来处理这类问题的一个不错的方法是使用贝叶斯网络。特别是作为贝叶斯网络的结构学习问题。一旦你掌握了这个,你就能有效地回答像 p(A=1|B=0 和 C=1) 这样的问法了。
27
关于关联规则的一些理论知识:
- 关联规则是一种无方向的数据挖掘方法,它可以在数据中找到模式,而不需要事先指定目标。是否这些模式有意义,得由人来判断。
- 关联规则的目标是检测在大数据集中,特定分类变量值之间的关系或关联。
- 这些规则可以理解为“70%的购买葡萄酒和奶酪的顾客也会购买葡萄”。
要找到关联规则,可以使用apriori算法。虽然已经有很多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数据挖掘库,它有一个很好的关联规则库。
使用示例:
'''
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)
如果想了解更多关于关联规则或频繁项挖掘的内容,我推荐的书籍有:
- 《数据挖掘导论》 - Vipin Kumar,适合初学者的最佳书籍
- 《数据挖掘与知识发现手册》,适合进阶用户
- 《挖掘海量数据》 - 提供如何在现实生活中使用和构建高效解决方案的技巧,免费书籍,http://i.stanford.edu/~ullman/mmds.html
- 当然,还有很多精彩的科学论文可以阅读:例如,可以在MS Acedemic上搜索频繁模式挖掘相关的内容
没有捷径可走。