- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试实现 Apriori 算法。为此,我需要从长度为 k 的项集(作为字典 L 给出)生成长度为 k+1 的项集。在生成组合时必须遵循 Apriori 原则。原理说明:只有当输入 L 中存在其所有子集时,才能生成长度为 k+1 的集合。
我有一本字典,我需要从中生成项目集。
我目前的尝试是这样的:
import itertools as it
def generateItemsets(Lk,k):
comb = sum(Lk.keys(), tuple())
Ck = set(it.combinations(comb, k))
return Ck
但是该功能需要永远并且会因错误而中断:IOPub data rate exceeded。
Input (dictionary): {(150,): 2, (160,): 3, (170,): 3, (180,): 3}
Output (set): {(150, 160), (150, 170), (150, 180), (160, 170), (160, 180), (170, 180)}
更新 1
最佳答案
我不确定您到底想要什么输入,因为不知何故不清楚您发布的列表如何适合 Apriori 算法的输入定义。输入应该是交易列表、这些交易中的一个项目和一个数字,该数字表示与同一交易中的指定项目一起出现的某些项目的计数。
输出是已售出的商品列表以及指定商品的所需次数。
有几个库可以解决这类问题。用户 null 已经指出了一个好消息:https://github.com/tommyod/Efficient-Apriori。还有 Apyori: https://github.com/ymoch/apyori 。
这是求解 Apriori 算法的简单尝试。可以将其复制到文件并使用 Python 执行:
# list of transactions
sales = [
('eggs', 'bacon', 'soup'),
('eggs', 'bacon', 'apple'),
('soup', 'bacon', 'banana'),
]
# generate match dictionary of type {item: {count: {item, ...}, ...}, ...}
matches = {
i: {
sum((i in z and j in z) for z in sales): set(
k for t in sales for k in t
if i!=k and
sum((i in z and j in z) for z in sales) == sum((i in z and k in z) for z in sales)
)
for t in sales for j in t if i in t and j!=i
}
for t in sales for i in t
}
#print ( "match counts: %s\n" % (matches) )
print ( "best match(es) for eggs:", matches['eggs'][len(matches['eggs'])] )
# output: {'bacon'}
print ( "best match(es) for bacon:", matches['bacon'][len(matches['bacon'])] )
# output: {'eggs', 'soup'}
basket = ('soup', 'apple', 'banana') # consumer basket
# calculate a list of best matches for new sales
best = set(sum([ list(matches[i][len(matches[i])]) for i in basket ], [])) - set(basket)
print ( "basket: %s, best matches: %s" % ( basket, best ) )
# output: {'bacon', 'eggs'}
上面的代码生成一个项目字典,其中包含包含两个项目的事务中某些项目的某些计数列表。对于庞大的事务列表,此字典的生成可能会很慢。但是您不必为每笔新交易计算这一点。相反,我会不时地每天重新计算比赛计数。
result = function ( parameter, parameter, ... )
可以转为嵌套字典和在较长时间后重新计算字典的函数:
if time < refresh:
dictionary = precalc ( )
refresh = time + rate
...
result = dictionary [ parameter ] [ parameter ] [ ... ]
这个解决方案当然需要更多的内存。
Lk
什么是
k
?
import itertools as it
def generateItemsets(Lk,k):
comb = sum(Lk.keys(), tuple())
Ck = set(it.combinations(comb, k))
return Ck
# input of apriori algorithm should be a list of transactions, wtf is this ?!
Lk = {(150,): 2, (160,): 3, (170,): 3, (180,): 3}
missing_input_value = 1234567890
print ( generateItemsets ( Lk, missing_input_value ) )
# output: set()
for i in range(0,999999):
generateItemsets ( Lk, i ) # does not error out
所以你要么搞砸了你的 Python 版本,要么我误解了你的问题,或者你提供的输入没有涵盖你的程序的错误情况。
jupyter notebook --NotebookApp.iopub_data_rate_limit=1.0e10
在控制台中,来自这篇文章:
How to solve "IOPub data rate exceeded." in Jupyter Notebook
关于python - 基于Apriori算法生成候选项集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66318186/
我正在处理一些大型交易数据。我一直在使用 read.transactions 和 apriori(arules 包的一部分)来挖掘频繁的项目配对。 我的问题是:生成规则时(使用“inspect()”)
'我必须开发一款供“ future 商店”超市业务分析师使用的软件,该软件对超市销售交易的给定过渡数据执行关联规则挖掘,并通过准备 Combo 来准备折扣策略。该软件利用数据挖掘算法,即 Aprior
我正在尝试先验算法,它花费的时间比预期的时间长,这是代码。 import pandas as pd dataset = pd.read_csv("data.csv", header=None) tra
我的应用程序需要通过Apriori 算法 获取关联。为了获得结果,我使用 Weka 依赖项。虽然我想获得关联,但它会打印内存位置。我也附上了输出。谢谢。 这是我的代码: public class Ap
1994 年引入的基本 Apriori 算法的时间复杂度是多少?如果可能,请引用引用论文/文章来支持响应。谢谢。 最佳答案 Markus England 的这篇论文详分割析了 Apriori 的复杂性
我使用 Apriori 算法有一段时间了,我问我有关频繁项集候选生成的步骤。 如果我想将两个频繁的 3 项集连接到一个(候选)4 项集,则连接项集中必须有 2 个相同的项和另一个不同的项。 比如我可以
Apriori algorithm 的最小置信度和最小支持值的合适值是多少? ?你怎么能调整它们?它们是固定值,还是会在算法运行期间发生变化?如果您以前使用过此算法,您使用的是什么值? 最佳答案 我建
我打算开发一个用于市场购物篮分析的应用程序(使用先验算法),我发现了一个包含超过 90,000 条交易记录的数据集。 问题是这个数据集中没有项目的名称,只包含项目的条形码。 我刚刚开始这个项目并研究先
我们正在尝试实现 Apriori algorithm在 Scala 中使用 Spark(您不需要知道回答这个问题的算法)。 计算Apriori算法项集的函数是freq() .代码是正确的,但每次迭代后
我正在尝试实现先验算法。在最后步骤之一中,我从产品列表生成了两个元组数组。 >>> arr1 = array([(2421,), (35682,), (30690,), ..., (18622,),
是否可以使用 map-reduce 创建 Apriori 应用程序?我刚开始,但不清楚如何根据之前的运行创建下一个候选集。有没有人有这方面的经验? 最佳答案 看看 Apache Mahout 可能会有
当给出支持度和置信度的百分比值时,如何在 Apriori 算法中找到最小支持度。例如,当支持度和置信度分别为 60% 和 60% 时,最小支持度是多少? 最佳答案 支持度和置信度是衡量规则有趣程度的度
我需要在 Rapidminer 中使用先验算法创建关联规则,但我似乎无法让它工作。我正在使用 5.3.1 weka 扩展。 我已经使用内置的 FP-Growth 和 Create Associatio
我正在 R 中工作,并且有一个如下所示的数据集 [1, 2, 3, ""] [1, 2, "", 4] [1,"", "", ""] 我正在将这些值读入事务对象,然后将它们传递给 eclat 或 ap
我正在尝试在 python 中运行先验算法。我的具体问题是,当我使用 apriori 函数时,我将 min_length 指定为 2。但是,当我打印规则时,我得到的规则仅包含 1 项。我想知道为什么
我正在 R 中进行一些关联规则挖掘并想提取我的结果以便我可以构建报告 我的结果是这样的: > inspect(rules[1:3]) lhs rhs
问题: apriori arules的功能包从输入事务中推断关联规则,并报告每条规则的支持、置信度和提升。关联规则源自频繁项集。我想获取输入事务中最频繁的项集。具体来说,我想获得具有给定最小支持的所有
我已经根据先验算法创建了数据框和列表,我也创建了规则。但结果没有出来,也没有显示任何错误。 下面是代码: df = pd.read_csv('itemlist.csv', header = None)
我使用weka依赖项通过Apriori算法获取关联规则。下面是我的代码。当我获取值时,快速 vector 显示内存位置值。如果有人能给我一个答案来获取关联规则,我将非常感激。 package com.
我有一个包含 600 000 行和 15 列的 csv 文件 "Col1, Col2 ... COl15"。我想生成关联规则,其中只有右侧只有来自 col15 的值。我正在使用 here 中的先验实现
我是一名优秀的程序员,十分优秀!