一种高效蟒蛇算法的实现。
efficient-apriori的Python项目详细描述
高效apriori
Apriori算法的高效纯Python实现。适用于Python3.6+。
apriori算法揭示了分类数据中的隐藏结构。
典型的例子是一个数据库,其中包含从超市购买的商品。
每次购买都有许多与之相关的项目。
我们希望从数据中发现诸如{bread, eggs} -> {bacon}
之类的关联规则。
这就是association rule learning的目标,Apriori algorithm可以说是解决这个问题最著名的算法。
这个存储库包含了Apriori算法的一个有效的、经过良好测试的实现,如Agrawal等人在1994年出版的original paper中所描述的。
示例
下面是一个最小的工作示例。
注意,在每个存在eggs
的事务中,也存在bacon
。
因此,规则{eggs} -> {bacon}
以100%置信度返回。
fromefficient_aprioriimportaprioritransactions=[('eggs','bacon','soup'),('eggs','bacon','apple'),('soup','bacon','banana')]itemsets,rules=apriori(transactions,min_support=0.5,min_confidence=1)print(rules)# [{eggs} -> {bacon}, {soup} -> {bacon}]
更多的例子如下。
安装
该软件可通过github和PyPI获得。
您可以使用pip
安装软件。
pip install efficient-apriori
贡献
如果您有建议和改进,欢迎您仔细检查代码并提出请求。 您提交的代码必须符合PEP8,并且所有测试都必须通过。
更多示例
过滤和排序关联规则
可以对返回的关联规则列表进行筛选和排序。
fromefficient_aprioriimportaprioritransactions=[('eggs','bacon','soup'),('eggs','bacon','apple'),('soup','bacon','banana')]itemsets,rules=apriori(transactions,min_support=0.2,min_confidence=1)# Print out every rule with 2 items on the left hand side,# 1 item on the right hand side, sorted by liftrules_rhs=filter(lambdarule:len(rule.lhs)==2andlen(rule.rhs)==1,rules)forruleinsorted(rules_rhs,key=lambdarule:rule.lift):print(rule)# Prints the rule and its confidence, support, lift, ...
使用大型数据集
如果数据太大而无法放入内存,则可以传递返回生成器而不是列表的函数。
min_support
很可能必须是一个大值,否则算法将需要很长时间才能终止。
如果您有大量的数据,那么这个python实现可能不够快,您应该参考更专业的实现。
defdata_generator(filename):""" Data generator, needs to return a generator to be called several times. """defdata_gen():withopen(filename)asfile:forlineinfile:yieldtuple(k.strip()forkinline.split(','))returndata_gentransactions=data_generator('dataset.csv')itemsets,rules=apriori(transactions,min_support=0.9,min_confidence=0.6)