《Python数据挖掘入门与实践》Apriori算法代码中,频繁项集计数是否存在重复问题?

《python数据挖掘入门与实践》apriori算法代码中,频繁项集计数是否存在重复问题?

关于《Python数据挖掘入门与实践》中Apriori算法代码的改进建议

在学习《Python数据挖掘入门与实践》一书中Apriori算法章节时,读者发现书中提供的代码在生成包含两项的频繁项集时存在重复计数的可能性。 原始代码片段尝试从只包含一项的频繁项集 (k=1) 扩展到包含两项 (k=2) 的频繁项集。 核心问题在于,对于包含多个频繁1-项集的用户评论,相同的2-项集会被多次计数。

原始代码片段(略去部分无关代码):

def find_frequent_itemsets(favorable_reviews_by_users, k_1_itemsets, min_support):    counts = defaultdict(int)    # ... (循环遍历用户和k-1项集) ...        for other_reviewed_movie in reviews - itemset:            current_superset = itemset | frozenset((other_reviewed_movie,))            counts[current_superset] += 1    # ... (返回满足最小支持度的频繁项集) ...

问题在于current_superset的生成方式。例如,如果用户评论包含{a, b},当itemset为{a}时,会生成{a, b};当itemset为{b}时,会生成{b, a}。由于frozenset({a, b})frozenset({b, a})是相等的,导致重复计数。

立即学习“Python免费学习笔记(深入)”;

改进方案:

为了避免重复计数,可以对current_superset进行规范化处理,例如将其元素排序后转换为元组作为字典的键。 这确保了即使顺序不同,相同的项集也只会被计数一次。

改进后的代码片段:

from collections import defaultdictdef find_frequent_itemsets(favorable_reviews_by_users, k_1_itemsets, min_support):    counts = defaultdict(int)    for user, reviews in favorable_reviews_by_users.items():        for itemset in k_1_itemsets:            if itemset.issubset(reviews):                for other_reviewed_movie in reviews - itemset:                    current_superset = itemset | frozenset((other_reviewed_movie,))                    # 规范化处理:将集合元素排序后转换为元组                    sorted_superset = tuple(sorted(list(current_superset)))                    counts[sorted_superset] += 1    return dict([(itemset, frequency) for itemset, frequency in counts.items() if frequency >= min_support])

这个改进后的版本通过tuple(sorted(list(current_superset)))frozenset转换为一个有序的元组,从而避免了重复计数的问题。 这保证了相同的频繁项集,无论其元素顺序如何,都只会被计数一次,从而提高了Apriori算法的准确性。 需要注意的是,这仅仅是针对k=2的情况的改进,对于更高阶的频繁项集生成,需要进一步的算法优化。

以上就是《Python数据挖掘入门与实践》Apriori算法代码中,频繁项集计数是否存在重复问题?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1357623.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月13日 21:07:17
下一篇 2025年12月13日 21:07:28

相关推荐

发表回复

登录后才能评论
关注微信