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))
就完美了。
问题:
无法在 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))
就完美了。