这是Apriori算法的一部分。我们希望从一项频繁项集中获得两项频繁项集。书中的代码如下所示:
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}是相同的。但根据下面的守则:
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}。
那么密码是错的吗?
发布于 2022-07-24 12:02:22
frozenset以及任何set都是无序和散列的,包括在字典中用作键或一般用于比较时。打印它可能会误导,因为顺序有点随机,可以随机打印出不同的。
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中的所有键都将被排序。
https://stackoverflow.com/questions/73097538
复制相似问题