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

24 投票
3 回答
27096 浏览
提问于 2025-04-16 23:30

我对这个领域和相关术语都很陌生,所以如果我哪里说错了,请随时指正。我有两个数据集,分别是:

数据集 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的实现,但大多数在实际使用中效率不高:

或者可以使用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)

如果想了解更多关于关联规则或频繁项挖掘的内容,我推荐的书籍有:

没有捷径可走。

撰写回答