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

时间:2011-08-13 00:01:34

标签: python machine-learning data-mining

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

数据集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次,发生5次C次,发生2次E发生等等。

我试图找到哪些物品一起出现,如果可能的话,还要找出原因和结果。为此,我不了解如何使用这两个数据集(或者如果一个就足够了)。最好有一个很好的教程,但我的主要问题是使用哪个数据集以及如何进行(i)构建频繁项集和(ii)在它们之间建立关联规则。

有人能指点我一个实用的教程/示例(最好是用Python),或至少解释一下如何处理这个问题吗?

3 个答案:

答案 0 :(得分:26)

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

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

要查找关联规则,您可以使用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)

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

没有简短的方法。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

如果您只使用基本的Apriori,那么您将丢失有关数量的信息。