Apriori 规则 df 要求

Apriori rules df requirements

问题:

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

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

RStudio 返回以下错误:

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

疑似解法:

我几乎可以肯定数据集的格式必须符合 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!

我觉得你的逻辑是正确的,只是需要一些微调。

首先,你需要读取字符作为因素,这意味着在读取数据时应该打开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 <- apriori(df, parameter = list(supp = 0.01, conf = 0.5)) 就完美了。