如何在Python mlxtend中统计频繁项集的出现次数?
获取mlxtend Apriori频繁项集的支持度计数
当然可以拿到支持度计数!我之前也遇到过这个需求,给你两个靠谱的解决方法:
方法1:从支持度反向计算(简单直接)
mlxtend的apriori函数默认返回的support列是相对支持度(出现次数/总交易数),所以只要用这个值乘以你的交易总数(也就是OneHotDataFrame的行数),就能得到绝对的支持度计数。
步骤如下:
- 首先调用
apriori时记得加use_colnames=True,这样项集会显示成易读的名称而非索引:from mlxtend.frequent_patterns import apriori # 假设你的OneHot编码后的DataFrame叫one_hot_df frequent_itemsets = apriori(one_hot_df, min_support=0.1, use_colnames=True) - 然后新增
support_count列,计算绝对计数:# 总交易数就是one_hot_df的行数 total_transactions = len(one_hot_df) # 用round避免浮点精度问题,再转成整数 frequent_itemsets['support_count'] = round(frequent_itemsets['support'] * total_transactions).astype(int)
方法2:直接获取交易ID列表统计(更精准)
如果担心浮点运算的精度误差,mlxtend的apriori还提供了output_transaction_ids=True参数,开启后会返回包含该项集的所有交易的索引列表,直接统计列表长度就是支持度计数:
frequent_itemsets = apriori(one_hot_df, min_support=0.1, use_colnames=True, output_transaction_ids=True) # 统计每个项集对应的交易数量 frequent_itemsets['support_count'] = frequent_itemsets['transaction_ids'].apply(len)
这个方法完全避免了浮点计算的问题,结果更准确,而且你还能通过transaction_ids列查看具体哪些交易包含了这个项集,适合需要深入分析的场景。
两种方法都能解决你的问题,看你更倾向哪种啦~
内容的提问来源于stack exchange,提问作者Vaslo
相关产品推荐
相关产品推荐

