python-如何加快基于Apriori框架的速度,以仅生成关联规则,因此结果(右手侧)是数据集的一个元素?

我有一个具有60万行和15列的csv文件“ Col1,Col2 … COl15”.我想生成关联规则,其中只有右侧只有col15中的值.我正在使用here的apriori实现

它以这种方式计算每个项目集的minSupport:

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 + 1

def returnItemsWithMinSupport(itemSet, transactionList, minSupport, freqSet):
        """calculates the support for items in the itemSet and returns a subset
       of the itemSet each of whose elements satisfies the minimum support"""
        _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

但是对于我拥有的许多行,这将花费很多时间,因为我希望RHS被限制为仅具有特定列(Col15)中的值,所以我可以通过某种方式减少频繁使用的项目集来使实现更快?其他方法之一是最后过滤规则,但是时间复杂度相同.还是有其他一些实现/库可以帮助我加快速度?

最佳答案

>根据第15列中的值拆分数据集,这将是您的右侧RHS.因此,如果该列中有5个不同的值,则现在将获得5个数据集.删除每列的最后一列,该列现在保持不变.
>仅按其他子集上的Apriori来计算其他列上的频繁项集(而不是关联规则)(更快!).但是您仍然需要比链接的随机github版本更好的实现.它只需要FIM,而无需规则!
>将带有分区键的频繁项目集组合到关联规则(FIS-> RHS)中,并像使用您喜欢的度量标准的关联规则进行评估.

这要快得多,因为它不会生成跨越多个col15键的频繁项集.在每个分区中,所有剩余数据都与您的目标相关.此外,它还可以与未修改的Apriori FIM代一起使用.