首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apriori Alg在Python ch4学习数据挖掘中的应用

Apriori Alg在Python ch4学习数据挖掘中的应用
EN

Stack Overflow用户
提问于 2022-07-24 10:23:40
回答 1查看 49关注 0票数 0

这是Apriori算法的一部分。我们希望从一项频繁项集中获得两项频繁项集。书中的代码如下所示:

代码语言:javascript
复制
from collections import defaultdict

def 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,))
                    counts[current_superset] += 1
    return dict([(itemset, frequency) for itemset, frequency in counts.items() if frequency >= min_support])

我对此感到困惑:有一个重复的计数。例如,对于某个用户,集合{A,B}{B,A}是相同的。但根据下面的守则:

代码语言:javascript
复制
 for itemset in k_1_itemsets:
     if itemset.issubset(reviews):
         for other_reviewed_movie in reviews - itemset:
         current_superset = itemset | frozenset((other_reviewed_movie,))
             counts[current_superset] += 1

什么时候

itemset==A

它计数{A,B}

什么时候

itemsets==B

它计数{B,A}

那么密码是错的吗?

EN

回答 1

Stack Overflow用户

发布于 2022-07-24 12:02:22

frozenset以及任何set都是无序和散列的,包括在字典中用作键或一般用于比较时。打印它可能会误导,因为顺序有点随机,可以随机打印出不同的。

代码语言:javascript
复制
AB = frozenset(["xyz"]) | frozenset(["abc"])
BA = frozenset(["abc"]) | frozenset(["xyz"])

print(AB == BA)
> True

dct = {}
dct[AB] = "AB"
dct[BA] = "BA"

print(dct)
> {frozenset({'xyz', 'abc'}): 'BA'}

在最初的算法中,所有集合都将被排序,这意味着事务列表(在本例中是reviews)以及counts中的所有键都将被排序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73097538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档