在对4.2L +行交易数据(以稀疏矩阵的形式)上使用python的mlxtend包应用apriori(支持> = 0.01)和association_rules函数时,频繁项集和关联规则的生成会花费大量时间。
样本交易稀疏矩阵(熊猫数据框),MBA的输入数据:
发票编号/产品衬衫T恤牛仔裤鞋类
1 1 1 0 0
2 0 0 1 0
3 0 1 0 1
a)在申请MBA之前,有什么方法可以优化交易数据稀疏矩阵的表示吗?
b)是否有其他有效的交易数据表示形式?
答案 0 :(得分:0)
先验算法接收一个列表列表,其中每个列表都是一个事务。您是否正在通过交易清单?例如:
transactions = [['milk', 'bread', 'water'],['coffe', 'sugar' ],['burgers', 'eggs']]
在这里,您有一个交易清单(清单)。然后,您可以将其传递给apriori。
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值较小,我们将有很多关联规则。因此,要计算它们,算法需要时间。这是该算法的众所周知的局限性之一。
您可以找到here关于apriori算法工作原理的全面解释,其中重点包括:
Apriori使用“自下而上”的方法,其中频繁的子集是 一次扩展一项(称为候选生成)。然后 根据数据测试候选人组。算法 如果找不到其他成功的扩展名,则终止。
Apriori使用广度优先搜索和哈希树结构进行计数 候选项目有效地设置。它生成的候选项目集 长度为k-1的项集的长度k。然后修剪候选人 子模式很少的人。根据向下关闭 引理,候选集包含所有频繁的k长度项集。 之后,它将扫描事务数据库以确定是否频繁 候选人中的项目集。
我们可以看到,对于具有大量频繁项或支持价值较低的数据集,候选项集将始终非常大。
这些大型数据集需要存储大量内存。此外,先验算法还多次查看数据库的所有部分,以计算k个项目集中项目集的频率。因此,先验算法可能会非常缓慢且效率低下,主要是在内存容量有限且事务数量很大时。
例如,我尝试使用apriori算法,该算法包含25900个事务和min_support值为0.004的事务列表。该算法花费了大约2个半小时才能给出输出。
答案 1 :(得分:0)
使用fpgrowth算法,对于大型数据集,该算法比原始先验算法快将近5倍。
我尝试了140万笔交易和200个独特商品。 Apriori花了超过4个小时,而fpgrowth花了不到5分钟才能生成频繁的项目集,因为最低支持值最差。
mlxtend库版本> = 0.17提供了fpgrowth实现,并产生与apriori相同的结果,从而节省了时间和空间。 您的输入采用一站式编码格式,并且被接受为输入格式。 链接:http://rasbt.github.io/mlxtend/user_guide/frequent_patterns/fpgrowth/
<?php
add_action( 'wp_enqueue_scripts', 'enqueue_scripts' );
function enqueue_scripts() {
// css
wp_enqueue_style('parent-style', get_template_directory_uri().'/style.css');
$handle = 'doc_script_handle';
wp_enqueue_script( $handle, get_stylesheet_directory_uri() . '/js/docs.js', array('jquery'));
wp_localize_script($handle, 'the_ajax_script', array('ajaxurl' =>admin_url('admin-ajax.php')));
}
//*********** getDOCS ***************//
add_action( 'wp_ajax_get_docs_from_id', 'getDocsFromCode' );
add_action( 'wp_ajax_nopriv_get_docs_from_id', 'getDocsFromCode' );
function getDocsFromCode() {
///un-needed code.......
}
?>