Python关联分析之——Apriori算法

来源:互联网 发布:java构建redis连接池 编辑:程序博客网 时间:2024/06/06 00:37

使用Apriori算法进行关联分析


Apriori原理

如果某个项集是频繁的,那么它的所有子集也是频繁的。即如果{0,1}是频繁的,则{0},{1}也是频繁的。

这个原理直观上并没有什么帮助,但如果反过来看,就有用了。

如果某个项集是非频繁的,那么它的所有超集也是非频繁的。即如果{0}也是非频繁的,则包含{0}的所有超集如{0,1}也是非频繁的。

重要定义

# 测试项集:    [['豆奶','莴苣'],     ['莴苣','尿布','葡萄酒','甜菜'],     ['豆奶','尿布','葡萄酒','橙汁'],     ['莴苣','豆奶','尿布','葡萄酒'],     ['莴苣','豆奶','尿布','橙汁']]
  • 支持度(support)

一个项集的支持度,被定为为数据集中包含该项集的记录所占的比例,例如上面的测试数据,{豆奶}的支持度为4/5,而在5条记录中,有3条包含{豆奶,尿布},因此{豆奶,尿布}的支持度为3/5。支持度是针对项集来说的,因此可以定义一个最小支持度,而只保留满足最小支持度的项集。

  • 可信度或置信度(confidence)

置信度是针对一条诸如{尿布}→{葡萄酒}的关联规则来定义的。这条规则的可信度被定义为“支持度({尿布,葡萄酒})/支持度({尿布})”。上例中,由于{尿布,葡萄酒}的支持度为3/5,{尿布}的支持度为4/5,所以“尿布→葡萄酒”的可信度为3/4=0.75。

python实现

  • 安装对应库

    打开命令行窗口,输入

    pip install apyori

    若失败,可使用其他方法。

    测试安装:

    from apyori import apriori

    导入成功,则安装成功,否则失败。

  • API

from apyori import aprioridata = [['豆奶','莴苣'],        ['莴苣','尿布','葡萄酒','甜菜'],        ['豆奶','尿布','葡萄酒','橙汁'],        ['莴苣','豆奶','尿布','葡萄酒'],        ['莴苣','豆奶','尿布','橙汁']]result = list(apriori(transactions=data)# apriori其他参数说明:min_support -- The minimum support of relations (float).最小支持度,可用来筛选项集min_confidence -- The minimum confidence of relations (float).最小可信度,可用来筛选项集min_lift -- The minimum lift of relations (float).未知max_length -- The maximum length of the relation (integer).未知

上面得到的result是一个列表,由于没找到相关的文档,下面是我所能理解的元素的属性介绍。

  • result里每一个项集的属性介绍

    1. items – 项集,frozenset对象,可迭代取出子集。
    2. support – 支持度,float类型。
    3. confidence – 置信度或可信度, float类型。
    4. ordered_statistics – 存在的关联规则
      可迭代,迭代后,其元素的属性:
      1. items_base – 关联规则中的分母项集
      2. confidence – 上面的分母规则所对应的关联规则的可信度

结尾

好了,简单的笔记就写到这。虽然暂时没找到这个库对应的文档,但可以通过pycharm预览每个项集的属性。虽然不能直接得出关联规则排序,但不需要自己写算法来计算支持度,比自己写计算过程好多了。

注意

Apriori算法不适用于非重复项集数元素较多的案例,如果某商店的销售商品种类是N,则其所有子集的个数为2^N - 1,其运算量之大,可想而知,建议分析的商品种类<10种。

原创粉丝点击