一种高效蟒蛇算法的实现。

efficient-apriori的Python项目详细描述


高效aprioriBuild StatusPyPI versionDocumentation StatusDownloadsBlack

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)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
创建一个bash别名来编译任何文件。当前目录中的java程序   java JSoup逐个标记解析HTML   java Jdk更新121 URLClassloader更改   为什么使用Instant将1582之前的Java日期转换为LocalDate会给出不同的日期?   java JPA有没有一种方法可以从<table>groupby<field>   批处理文件Java关于运行时的混淆。memory()与Windows的物理内存使用历史记录图   Neo4j 2.1.7,用于使用Neo4j的Java API进行社交网络分析   java文件。太慢了!   java解析Joptionpane中的多个int   导入我可以删除任何隐式导入的Java库吗?   java如何使用数组在内部存储不同的数据类型   java通过curl命令发送POST请求   java使所有数组元素相等的最小递增操作数   java FocusPanel事件仅在边缘上?