如何加速基于Apriori框架仅生成数据集中一个元素作为后件(右侧)的关联规则?

我有一个包含600,000行和15列的csv文件,格式为"Col1, Col2 ... Col15"。我想生成关联规则,其中只有右侧包含来自第15列的值。我使用的是这里的Apriori实现

它以如下方式计算每个项集的最小支持度:

oneCSet = returnItemsWithMinSupport(itemSet,                                        transactionList,                                        minSupport,                                        freqSet)    print "reached line 80"    currentLSet = oneCSet    k = 2    while(currentLSet != set([])):        print k        largeSet[k-1] = currentLSet        currentLSet = joinSet(currentLSet, k)        currentCSet = returnItemsWithMinSupport(currentLSet,                                                transactionList,                                                minSupport,                                                freqSet)        currentLSet = currentCSet        k = k + 1def returnItemsWithMinSupport(itemSet, transactionList, minSupport, freqSet):        """计算itemSet中项目的支持度,并返回满足最小支持度的itemSet的子集"""        _itemSet = set()        localSet = defaultdict(int)        #print itemSet        for item in itemSet:            #print "I am here", list(item)            for transaction in transactionList:                if item.issubset(transaction):                    freqSet[item] += 1                    localSet[item] += 1        print "Done half"        for item, count in localSet.items():            support = float(count)/len(transactionList)            if support >= minSupport:                _itemSet.add(item)        return _itemSet

但是,对于我拥有的众多行来说,这将花费很多时间。因为我希望右侧仅限于特定列(Col15)的值,我可以通过减少频繁项集的数量来加快实现速度吗?另一种方法是在最后过滤规则,但这将具有相同的时间复杂度。或者是否有其他实现/库可以帮助我加速这个过程?


回答:

  1. 根据第15列的值(将成为您的右侧RHS)拆分数据集。如果该列有5个不同的值,您现在将得到5个数据集。删除每个数据集的最后一列,因为现在它是常数。

  2. 仅对其他列计算频繁项集(不是关联规则),通过在每个子集上使用Apriori(更快!)。但您仍然需要比您链接的GitHub版本更好的实现。它只需要FIMs,不需要规则!

  3. 将频繁项集与分区键组合成关联规则,(FIS -> RHS),并使用您首选的度量标准进行评估,就像关联规则一样。

这种方法速度更快,因为它不会生成跨多个第15列键的频繁项集。在每个分区内,所有剩余数据对于您的目标都是相关的。此外,它适用于未修改的Apriori FIM生成。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注