apriori 算法接收一个列表列表,其中每个列表是一个事务。您是否通过了交易清单?例如:
transactions = [['milk', 'bread', 'water'],['coffe', 'sugar' ],['burgers', 'eggs']]
在这里,您有一个交易列表(列表)。然后你可以将它传递给先验。
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules
import time
support_threshold = 0.004
te = TransactionEncoder()
te_ary = te.fit(transactions).transform(transactions)
df = pd.DataFrame(te_ary, columns=te.columns_)
logging.debug("Calculating itemset according to support...")
# time
start_time = time.clock()
# apriori
frequent_itemsets = apriori(df, min_support=support_threshold, use_colnames=True)
# end time to calculation
end_time = time.clock()
time_apriori = (end_time-start_time)/60
apriori_decimals = "%.2f" % round(time_apriori,2)
print("\n\nCompleted in %s minutes\n" % apriori_decimals)
print(frequent_itemsets) #dataframe with the itemsets
lift = association_rules(frequent_itemsets, metric="lift", min_threshold=1)
print(lift) #dataframe with confidence, lift, conviction and leverage metrics calculated
关于最小支持阈值,以及先验算法为我们提供结果所花费的时间,对于较小的 min_support 值,我们将有很多关联规则。因此,要计算它们,算法需要时间。这是该算法众所周知的限制之一。
你可以在这里找到关于先验算法如何工作的总体解释,一些亮点是:
Apriori 使用“自下而上”的方法,其中频繁子集一次扩展一项(称为候选生成)。然后根据数据对候选人组进行测试。当没有找到进一步的成功扩展时,算法终止。
Apriori 使用广度优先搜索和哈希树结构来有效地计算候选项目集。它从长度为 k-1 的项目集生成长度为 k 的候选项目集。然后它会修剪具有不常见子模式的候选者。根据向下闭合引理,候选集包含所有频繁的 k 长度项集。之后,它扫描事务数据库以确定候选中的频繁项集。
我们可以看到,对于频繁项较多或支持度较低的数据集,候选项集总是很大。
这些大型数据集需要大量内存来存储。此外,先验算法还会多次查看数据库的所有部分,以计算 k-itemset 中项集的频率。因此,先验算法可能会非常缓慢且效率低下,主要是在内存容量有限且事务数量很大的情况下。
例如,我尝试了具有 25900 个事务和 min_support 值为 0.004 的事务列表的先验算法。该算法需要大约 2.5 小时才能给出输出。
有关代码的更详细说明,请访问 - mlxtend apriori