我正在尝试在python中运行一个先验算法。我的具体问题是,当我使用apriori函数时,我将min_length指定为2。但是,当我打印规则时,我得到的规则只包含1项。我想知道为什么apriori没有过滤出小于2的项,因为我指定了我只想要在项集中有2项的规则。
from apyori import apriori
#store the transactions
transactions = []
total_transactions = 0
with open('browsing.txt', 'r') as file:
for transaction in file:
total_transactions += 1
items = []
for item in transaction.split():
items.append(item)
transactions.append(items)
#
support_threshold = (100/total_transactions)
print(support_threshold)
minimum_support = 100
frequent_items = apriori(transactions, min_length = 2, min_support = support_threshold)
association_results = list(frequent_items)
print(association_results[0])
print(association_results[1])
我的结果:
RelationRecord(items=frozenset({'DAI11223'}), support=0.004983762579981351, ordered_statistics=[OrderedStatistic(items_base=frozenset(), items_add=frozenset({'DAI11223'}), confidence=0.004983762579981351, lift=1.0)])
RelationRecord(items=frozenset({'DAI11778'}), support=0.0037619369152117293, ordered_statistics=[OrderedStatistic(items_base=frozenset(), items_add=frozenset({'DAI11778'}), confidence=0.0037619369152117293, lift=1.0)])
发布于 2020-01-06 12:22:28
从这里看一下代码:https://github.com/ymoch/apyori/blob/master/apyori.py揭示了没有min_length关键字(只有max_length)。当传递未使用的关键字参数时,apyori实现方式不会引发任何警告或错误。
为什么不在事后过滤结果呢?
association_results = filter(lambda x: len(x.items) > 1, association_results)
发布于 2020-05-10 06:52:26
第一种方法的局限性是需要以列表格式转换数据。当我们看到现实生活中,一个商店有成千上万的sku,在这种情况下,它在计算上是昂贵的。Apyori包已过时。我的意思是,过去几年没有更新。结果的格式不正确,需要正确地表示,并且需要计算操作才能执行。mlxtend使用基于两种方式的方法,在此基础上生成频繁项集和关联规则。-check在这里获取更多信息mlxtend是适当的,并有社区支持。
https://stackoverflow.com/questions/58189399
复制相似问题