Apriori 规则 df 要求

Posted

技术标签:

【中文标题】Apriori 规则 df 要求【英文标题】:Apriori rules df requirements 【发布时间】:2018-03-05 17:38:39 【问题描述】:

问题:

无法在 PC 上使用library(arules) 生成先验规则。当我运行以下函数时:

rules <- apriori(df, parameter = list(supp = 0.01, conf = 0.5))

RStudio 抛出以下错误:

asMethod(object) 中的错误:第 1、2、3、4、5 列不符合逻辑或因素。首先离散列。

怀疑的解决方案:

我几乎可以肯定数据集的格式必须符合apriori 的预期输入。

数据集:

代码:

#Load and install packages
#install.packages("arules")
library(arules)

#Assign to dataframe
df <- read.csv("C:/Titanic.csv", header = TRUE, stringsAsFactors = FALSE)

#generate rules
rules <- apriori(df, parameter = list(supp = 0.01, conf = 0.5))

尝试的解决方案:

#One solution on SO was to factor
df<- sapply(df, as.factor)
#failed.


#What if I discretize the columns?
df$Passenger <- discretize(df$Passenger)
#After discretizing this column and running apriori, still get an error.
df$Class <- discretize(df$Class)
#discretize does not work on column Class


#could column 1 be a problem? Try dropping it.
df$Passenger <- NULL
#this did not work!

【问题讨论】:

【参考方案1】:

在我看来你的逻辑是正确的,只是需要进行一些微调。

首先,您需要读取字符作为因素,这意味着在读取数据时应打开stringsAsFactors

df <- read.csv("C:/Titanic.csv", header = TRUE, stringsAsFactors = TRUE)

那么问题应该只出在第一列。如果你想删除第一列,你可以直接在apriory()的参数中这样做:

rules <- apriori(df[ , -1], parameter = list(supp = 0.01, conf = 0.5))

如果您希望像处理因子一样处理第一列,您可以这样做

df$Passenger <- as.factor(df$Passenger)

那么你的初始语句rules &lt;- apriori(df, parameter = list(supp = 0.01, conf = 0.5)) 完美运行。

【讨论】:

感谢您的解决方案@Ekatef。这可能是我对 R 的缺点,但它仍然会引发同样的错误。我也尝试将数据集转换为二进制矩阵,但没有成功。在这一点上,我越来越怀疑它仅仅是安装的技术问题,因为似乎没有任何在线教程可以工作......我会继续努力并相应地更新。 @graphicdezine 我几乎可以肯定问题出在数据格式上:读取数据集时应设置stringsAsFactors TRUE。对不起,我以前没有注意到。答案已更新 我刚刚运行了代码,它似乎可以工作。下一步是让我了解您的解决方案如何/为什么起作用。今晚我会进一步评论,供未来的读者参考。谢谢! 如here 所见,分类变量在 R 中称为因子。因为我试图加载分类变量,所以我需要先转换它们。正如here 所说,“R 在创建数据帧时的默认行为是将所有字符转换为因子。这让无数 R 新手用户头疼,试图弄清楚为什么他们的字符列不能正常工作,......” 祝你好运玩得开心!

以上是关于Apriori 规则 df 要求的主要内容,如果未能解决你的问题,请参考以下文章

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

关联分析算法-Apriori算法

Apriori 算法 理论

第九章 数据关联规则分析算法——基于Apriori算法的关联项分析

关联规则之Apriori算法

关联规则挖掘算法Apriori算法