如何让Apyori生成包含2个以上项目的关联规则?
apyori官方版本的apriori方法本身就不内置min_length参数,你在源码里搜不到是正常现象。网上部分教程提到的该参数,要么是作者自行封装过滤逻辑时自定义的参数,要么是混淆了其他Apriori实现库(如mlxtend)的参数,直接传入该参数不会对规则生成产生任何影响。
无法生成2个以上项目的规则的排查&解决步骤
- 调低核心阈值先验证:首先检查你设置的
min_support、min_confidence、min_lift三个核心参数是否过高,阈值过高会直接过滤掉所有长度≥3的频繁项集,自然无法生成对应规则。可以先把阈值降到较低水平测试,比如min_support=0.01、min_confidence=0.3、min_lift=1,查看是否能生成长度≥3的规则。 - 检查数据集本身:如果你的事务数据集中绝大多数事务的商品数量都≤2,天然不存在长度≥3的频繁项集,也会导致没有对应规则生成。
自定义实现规则最小长度过滤
你可以在拿到apyori的输出结果后自行加过滤逻辑,示例代码如下:
1. 过滤规则项总长度≥3的结果
from apyori import apriori # transactions为你的事务数据集 res = list(apriori(transactions, min_support=0.01, min_confidence=0.3, min_lift=1)) # 过滤逻辑 filtered = [] for record in res: if len(record.items) >= 3: filtered.append(record)
2. 单独过滤前件长度≥2的规则
如果需要单独限制规则前件的长度,可使用如下逻辑:
filtered_rules = [] for record in res: for stat in record.ordered_statistics: # 前件长度≥2,后件长度≥1,总规则长度≥3 if len(stat.items_base) >= 2 and len(stat.items_add) >= 1: filtered_rules.append({ "前件": list(stat.items_base), "后件": list(stat.items_add), "支持度": record.support, "置信度": stat.confidence, "提升度": stat.lift })
内容的提问来源于stack exchange,提问作者Jrblack
相关产品推荐
相关产品推荐

