如何加速基于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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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