R中的Apriori算法

Posted

技术标签:

【中文标题】R中的Apriori算法【英文标题】:Apriori Algorithm in R 【发布时间】:2017-06-21 16:03:05 【问题描述】:

我有一个我认为是精心准备的数据集。我想使用 R 中的 Apriori 算法来寻找关联并提出一些规则。我有大约 16,000 行(唯一客户)和 179 列代表各种项目/类别。数据如下所示:

     Cat1  Cat2  Cat3  Cat4  Cat5 ... Cat179
     1,     0,    0,    0,    1,  ...  0
     0,     0,    0,    0,    0,  ...  1
     0,     1,    1,    0,    0,  ...  0
     ...

我认为为每个客户和类别创建一个包含二进制值 (1/0) 的逗号分隔文件可以解决问题,但在我使用以下方法读取数据后:

data5 = read.csv("Z:/CUST_DM/data_test.txt",header = TRUE,sep=",")

然后运行这个命令:

rules = apriori(data5, parameter = list(supp = .001,conf = 0.8))

我收到以下错误:

Error in asMethod(object):
column(s) 1, 2, 3, ...178 not logical or a factor. Discretize the columns first.  

我理解离散化,但我猜不是在这种情况下。一切都是 1 或 0。我什至将数据从 INT 更改为 CHAR 并收到相同的错误。我还将客户 ID(唯一)作为第 1 列,但我知道当数据采用这种形式(平面文件)时,这不是必需的。我确定我缺少一些明显的东西 - 我是 R 新手。

我错过了什么?感谢您的输入。

【问题讨论】:

请阅读How to make a great reproducible example in R? 如果没有可重现的示例,真的无法帮助您。听起来您的数据有问题,但由于无法重现问题,我们无法确定问题所在。 很公平。你能告诉我,1 和 0 的文件格式,逗号分隔的先验格式是可接受的格式吗?我是否需要一个唯一的 ID 列 - 我知道一旦它是平面文件格式就不需要?这两个问题的答案将消除我认为的一些潜在问题。谢谢。 我以这种方式解决了问题:将数据读入 R 后,我使用 lapply() 将数据更改为因子(我认为这就是它的作用)。然后我拿了那个数据集并从中创建了一个数据框。然后我就可以成功应用 apriori() 了。 【参考方案1】:

我以这种方式解决了问题:将数据读入 R 后,我使用 lapply() 将数据更改为因子(我认为这就是它的作用)。然后我拿了那个数据集并从中创建了一个数据框。然后我就可以成功应用 apriori() 了。

【讨论】:

【参考方案2】:

您的数据实际上已经是(密集)矩阵格式,但read.csv 始终以data.frame 的形式读取数据。只需先将数据强制发送到matrix

dat <- as.matrix(data5)
rules <- apriori(dat, parameter = list(supp = .001,conf = 0.8))

数据中的 1 将被解释为项目的存在,而 0 则被解释为不存在。有关如何创建事务的更多信息,请参见手册页? transactions

【讨论】:

我尝试了你的建议 Michael,但它对我不起作用。 as.matrix 命令没有返回错误,但是当我尝试使用 apriori() 函数时,我收到此错误: if (any(from != 0 & from != 1)) 中的错误警告("matrix contains values除了 0 和 1!设置所有条目!= 0 到 1。”):(我很抱歉我之前没有这样做过,我知道格式错误,但我想让你知道我的解决方案。缺少 TRUE/ 处的值需要假 我有一个解决方案:首先我将 csv 数据集中的 0 更改为 NULL。接下来,我使用了 lapply(dataname,factor) 函数,然后将该数据集转换为 data.frame。然后我可以成功应用 apriori() 函数。谢谢你的建议。 (抱歉,这是我第一次尝试,我不知道格式化是如何工作的。) 错误信息表明您的矩阵包含的值不是 0 或 1。所以您需要做的就是找出“坏”值在哪里。例如,您可以使用table(as.matrix(data5), useNA = "always"),如果您看到除 0 和 1 以外的任何内容,那么您就知道您遇到了问题。我猜你想把任何不是 1 的东西改成 0,然后你应该没问题。在这种情况下,使用 lapply 创建因子的缺点是您将获得所有 0 以及所有其他奇怪值的项目。

以上是关于R中的Apriori算法的主要内容,如果未能解决你的问题,请参考以下文章

使用 R 中的 Apriori 算法预测多个输出

在 R 中使用 Apriori 算法找不到规则

R语言使用apriori算法进行关联规则挖掘实战:关联规则概念频繁项集支持度(support)置信度(confidence)提升度(lift)apriori算法

R:Apriori 算法没有找到任何关联规则

Python中的Apriori关联算法-市场购物篮分析

R语言之Apriori算法