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

标签 python machine-learning data-mining apriori

我有一个包含 600 000 行和 15 列的 csv 文件 "Col1, Col2 ... COl15"。我想生成关联规则,其中只有右侧只有来自 col15 的值。我正在使用 here 中的先验实现

它以这种方式计算每个项目集的 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)的值,我可以通过某种方式减少频繁项集?另一种方法是在最后过滤规则,但它具有相同的时间复杂度。或者是否有其他一些实现/库可以帮助我加快速度?

最佳答案

  1. 根据第 15 列中的值拆分您的数据集,这将是您右侧的 RHS。因此,如果您在该列中有 5 个不同的值,那么您现在将获得 5 个数据集。删除每一个的最后一列,它现在是常量。

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

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

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

关于python - 如何加速基于仅生成结果(右侧)是数据集的一个元素的关联规则的 Apriori 框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46321403/

相关文章:

python - 无法使用 pyparsing 正确解析此文件

machine-learning - GAN 的随机噪声

python - SciKitlearn ColumnTransformer TypeError : Cannot clone object. 你应该提供一个 scikit-learn estimator 的实例而不是一个类

java - 在 WEKA 中设置 HierarchicalClustering 类的 LinkType

python - 如何根据 pandas 中的标签仅选择某些行?

python - Django 管理员添加数据

python - 在 Matplotlib 中旋转图像

Matlab交叉验证和K-NN

python - 存储文本挖掘数据

machine-learning - 如何从多个分类模型创建 ROC 曲线