我正在尝试实施 Apriori 算法。为此,我需要从长度为 k 的项集(作为字典 L 给出)生成长度为 k+1 的项集。生成组合时必须遵循先验原则。原理说明:只有在输入 L 中存在其所有子集时,才能生成长度为 k+1 的集合。
我有一本字典,我需要从中生成项集。
我目前的尝试是这样的:
import itertools as it
def generateItemsets(Lk,k):
comb = sum(Lk.keys(), tuple())
Ck = set(it.combinations(comb, k))
return Ck
Run Code Online (Sandbox Code Playgroud)
但是该功能需要永远并在错误处中断:超出IOPub数据速率。
示例 1:
Input (dictionary): {(150,): 2, (160,): 3, (170,): 3, (180,): 3}
Output (set): {(150, 160), (150, 170), (150, 180), (160, 170), (160, 180), (170, 180)}
Run Code Online (Sandbox Code Playgroud)
更新 1
该数据集包含近 16000 笔交易。它看起来像这样:
[![数据集][1]][1]
独特的项目范围从 0-999
如您所见,该函数将被赋予一个输入 L_k,它应该输出 C_k+1。输入 L_k 是一个像 ({(301,350): 46, (966,970): 612, (310,350): 216, (548, 550): …
好的,所以我搜索了很多,并希望在销售数据上运行arules.我只需要以正确的格式正确获取数据,并使用正确的"因子"或"变量"并以篮子形式设置.
现在我有Order#的销售数据,然后是里面的项目.每个订单都是唯一的(每个新订单,新的#创建并包含部分#),但相同的项目显然可以出现在许多订单中.
目前,我的数据设置如下:
Order# Part# PartDescription
1 A PartA 1 B PartB 1 G PartG 2 R PartR 3 A PartA 3 B PartB 4 E PartE 5 Y PartY 6 A PartA 6 B PartB 6 F PartF 6 V PartV
因此,R不喜欢这种形式,我必须以arules和数据分析将接受的形式得到它.
是的我将它保存为文本文件并尝试了.csv文件,但是如果我可以逐步说明如何准备它或在RStudio中操作它会很棒.
我读到它假设是一个篮子形式,如..
1(A,B,G)
2(R)
3(A,B)
4(E)
5(Y)
6(A,B,F,V)
如果这不准确,请纠正我.我明白了这个想法,但我只需要一步一步的指示,这些指示似乎无处可寻.我尝试过使用dplyr和tidyr.我对数据分析有很好的理解,但需要更多关于RStudio的直接帮助,所以如果我可以一步一步地进行,我会进一步理解这一点.
我尝试将LSTM模型用于下一个篮子推荐.我想应用与本文相同的方法:下一个篮子推荐的动态循环模型
在我的情况下,我有一些用户,他们在不同的时间购买一些物品.所以我设计了我的X数据,如:
user ID timestep sequence items
user1 1 array(1, 20)
user1 2 ...
user2 1 ...
user2 2 ...
user2 3 ...
user3 1 ...
user3 1 ...
Run Code Online (Sandbox Code Playgroud)
序列项表示具有形状(1,20)的数组.这些向量是在每个序列期间购买的每个项目(使用word2vec生成)的平均表示.
然后我设计我的标签y:
user ID label
user1 np.array(1, 6000)
user2 ...
user3 ...
Run Code Online (Sandbox Code Playgroud)
标签用户表示每个用户的下一个订单,在他们过去的订单之后表示X数据.另外,标签是[1 0 1 0 0 0 .. 1]之类的向量,其中1表示用户购买了该项目,否则为0.
因此,我想使用LSTM来训练每个用户的过去序列以预测下一个购买序列.下面,我定义了一个LSTM模型,我没有返回序列,因为我有一个用户标签.
model_rnn = Sequential()
model_rnn.add(LSTM(20, return_sequences=False, input_shape=(None, 20)))
model_rnn.add(Dropout(0.2))
model_rnn.add(Dense(nb_classes))
model_rnn.add(Activation("sigmoid"))
model_rnn.compile(loss='binary_crossentropy', optimizer="Adagrad")
n_index = X.index.values
n_sample = int(len(X.index.values)*0.7)
user_index = np.random.choice(n_index, n_sample, replace=False)
n_epochs = 10
for _ in …
Run Code Online (Sandbox Code Playgroud) recommendation-engine sequence market-basket-analysis lstm keras
R篮子分析使用具有唯一订单号但重复订单组合的arules包
刚刚学习R.我正在尝试使用arules包进行篮子分析(但我完全接受任何其他包装建议!)来比较所购买的6种不同商品类型的所有可能组合.
我的原始数据集如下所示:
OrderNo, ItemType, ItemCount
111, Health, 1
111, Leisure, 2
111, Sports, 1
222, Health, 3
333, Food, 7
333, Clothing, 1
444, Clothing, 2
444, Health, 1
444, Accessories, 2
Run Code Online (Sandbox Code Playgroud)
...
该名单还有大约3,000个观察结果.
我将数据折叠为一个矩阵,每个唯一的订单包含一行,其中包含特定ItemType的计数:
OrderNo, Accessories, Clothing, Food, Health, Leisure, Sports
111, 0, 0, 0, 1, 2, 1
222, 0, 0, 0, 3, 0, 0
333, 0, 1, 7, 0 , 0, 0
444, 2, 2, 0, 1, 0, 0
. . .
Run Code Online (Sandbox Code Playgroud)
每次我尝试使用以下命令读取事务(以及一百万个尝试的变体):
tr <- read.transactions("dataset.csv", rm.duplicates=FALSE, …
Run Code Online (Sandbox Code Playgroud) 我想以篮子格式创建一个事务对象,我可以随时调用它进行分析.数据包含逗号分隔的项目,包含1001个事务.前10个交易看起来像这样:
hering,corned_b,olives,ham,turkey,bourbon,ice_crea
baguette,soda,hering,cracker,heineken,olives,corned_b
avocado,cracker,artichok,heineken,ham,turkey,sardines
olives,bourbon,coke,turkey,ice_crea,ham,peppers
hering,corned_b,apples,olives,steak,avocado,turkey
sardines,heineken,chicken,coke,ice_crea,peppers,ham
olives,bourbon,coke,turkey,ice_crea,heineken,apples
corned_b,peppers,bourbon,cracker,chicken,ice_crea,baguette
soda,olives,bourbon,cracker,heineken,peppers,baguette
corned_b,peppers,bourbon,cracker,chicken,bordeaux,hering
...
Run Code Online (Sandbox Code Playgroud)
我观察到数据中存在重复的事务并将其删除但每次我尝试读取事务时,我得到:
asMethod(object)中的错误:无法使用重复项的事务强制列表
这是我的代码:
data <- read.csv("AssociationsItemList.txt",header=F)
data <- data[!duplicated(data),]
pop <- NULL
for(i in 1:length(data)){
pop <- paste(pop, data[i],sep="\n")
}
write(pop, file = "Trans", sep = ",")
transdata <- read.transactions("Trans", format = "basket", sep=",")
Run Code Online (Sandbox Code Playgroud)
我确信我错过了一些不重要的东西.请提供帮助.
我有一张看起来(缩写)的表格:
| order_id | item_id | amount | qty | date |
|---------- |--------- |-------- |----- |------------ |
| 1 | 1 | 10 | 1 | 10-10-2014 |
| 1 | 2 | 20 | 2 | 10-10-2014 |
| 2 | 1 | 10 | 1 | 10-12-2014 |
| 2 | 2 | 20 | 1 | 10-12-2014 |
| 2 | 3 | 45 | 1 | 10-12-2014 |
| 3 | 1 | 10 | …
Run Code Online (Sandbox Code Playgroud) 我在多个时间分辨率下跟踪多个离散时间序列,产生SxRxB矩阵,其中S是时间序列的数量,R是不同分辨率的数量,B是缓冲区,即每个系列记住的值.每个系列都是离散的,并使用有限范围的自然数来表示其值.我会在这里称这些"符号".
对于每个系列,我想计算在所有测量中,任何先前测量符号直接在任何当前测量符号之前的频率.我已经用如下所示的for循环解决了这个问题,但是出于显而易见的原因想要对其进行矢量化.
我不确定我的数据结构方式是否有效,所以我愿意接受那些建议.特别是我认为比率矩阵可以做得与众不同.
提前致谢!
def supports_loop(data, num_series, resolutions, buffer_size, vocab_size):
# For small test matrices we can calculate the complete matrix without problems
indices = []
indices.append(xrange(num_series))
indices.append(xrange(vocab_size))
indices.append(xrange(num_series))
indices.append(xrange(vocab_size))
indices.append(xrange(resolutions))
# This is huge! :/
# dimensions:
# series and value for which we calculate,
# series and value which precedes that measurement,
# resolution
ratios = np.full((num_series, vocab_size, num_series, vocab_size, resolutions), 0.0)
for idx in itertools.product(*indices):
s0, v0 = idx[0],idx[1] # the series and symbol for which we …
Run Code Online (Sandbox Code Playgroud) 有以下声明:
rules = association_rules(frequent_itemsets, metric="lift", min_threshold=1.2)
Run Code Online (Sandbox Code Playgroud)
我得到一个格式的规则数据框:
frozenset({'Co_Apples'})
Run Code Online (Sandbox Code Playgroud)
但我需要将 a 提取Co_Apples
为字符串。
我怎样才能做到这一点?
我和其他用户的上一篇文章有同样的问题如何在R中上传arules包
我使用的是R版3.0.2(32位)
错误消息是这样的:
> install.packages("arules")
Installing package into ‘C:/Users/HKGGAIT001/Documents/R/win-library/3.0’
(as ‘lib’ is unspecified)
trying URL 'http://cran.ms.unimelb.edu.au/bin/windows/contrib/3.0/arules_1.1-1.zip'
Error in download.file(url, destfile, method, mode = "wb", ...) :
cannot open URL 'http://cran.ms.unimelb.edu.au/bin/windows/contrib/3.0/arules_1.1-1.zip'
In addition: Warning message:
In download.file(url, destfile, method, mode = "wb", ...) :
cannot open: HTTP status was '404 Not Found'
Warning in download.packages(pkgs, destdir = tmpd, available = available, :
download of package ‘arules’ failed
Run Code Online (Sandbox Code Playgroud)
这意味着包裹不再可用吗?另外,还有其他市场购物篮分析套餐吗?
非常感谢!
我有一个数据集,它以虚拟变量的形式代表每个客户的一个篮子.
例如:
P1 P2 P3 P4 P5
0 2 0 0 0
0 1 0 0 0
0 0 0 3 0
0 0 0 0 0
0 0 5 0 0
1 1 0 0 0
Run Code Online (Sandbox Code Playgroud)
其中P1代表产品1,依此类推.
本质上,我想运行一个简单的查询,在其中我可以转换所有超过1到1的值.这样我的数据中只有1和0.我能够使用以下几行来完成它:
df[(df$P1>1] <- 1
Run Code Online (Sandbox Code Playgroud)
是否适用所有功能?