问题
I am attempting to make an association rules set using apriori - I am using a different dataset but the starwars dataset contains similar issues. Using arules I was attempting to list the rules and apply an arulesViz plot. From my understanding all strings must be ran as factors, listed as transactions and then apriori should be functioning properly but I get the ouput below after running the following code and rules is not added to environment:
install.packages("arules")
install.packages("arulesViz")
library(arulesViz)
library(arules)
data <- starwars[,c(4:6,8:10)]
data <- data.frame(sapply(data,as.factor))
data <- as(data, "transactions")
rules <- apriori(data, parameter = list(supp = 0.15, conf = 0.80))
inspect(rules)
inspect(sort(rules))
subrules <- head(sort(rules, by="lift"), 10)
plot(subrules, method="graph")
The following is the output from running apriori
rules <- apriori(data, parameter = list(supp = 0.15, conf = 0.80))
Apriori
Parameter specification:
confidence minval smax arem aval originalSupport maxtime support minlen maxlen target ext
0.8 0.1 1 none FALSE TRUE 5 0.15 1 10 rules FALSE
Algorithmic control:
filter tree heap memopt load sort verbose
0.1 TRUE TRUE FALSE TRUE 2 TRUE
Absolute minimum support count: 78
set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[131 item(s), 522 transaction(s)] done [0.00s].
sorting and recoding items ... [0 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 done [0.00s].
writing ... [0 rule(s)] done [0.00s].
creating S4 object ... done [0.02s].
Error in length(obj) : Method length not implemented for class rules
I have also ran this with the following argument changes
target = "rules"
And have attempted to run with using only null arguments
Any help is greatly appreciated!
回答1:
If I run your code with starwars
data, I get following results -
> data <- starwars[,c(4:6,8:10)]
> data <- data.frame(sapply(data,as.factor))
> data <- as(data, "transactions")
> rules <- apriori(data, parameter = list(supp = 0.15, conf = 0.80))
Apriori
Parameter specification:
confidence minval smax arem aval originalSupport maxtime support minlen maxlen target ext
0.8 0.1 1 none FALSE TRUE 5 0.15 1 10 rules FALSE
Algorithmic control:
filter tree heap memopt load sort verbose
0.1 TRUE TRUE FALSE TRUE 2 TRUE
Absolute minimum support count: 13
set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[147 item(s), 87 transaction(s)] done [0.00s].
sorting and recoding items ... [8 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 done [0.00s].
writing ... [3 rule(s)] done [0.00s].
creating S4 object ... done [0.00s].
As you can see clearly, that there are 3 rules generated. Which means If I run inspect - I see following:
lhs rhs support confidence lift
[1] {skin_color=fair} => {species=Human} 0.1839080 0.9411765 2.339496
[2] {skin_color=fair} => {gender=male} 0.1609195 0.8235294 1.155598
[3] {eye_color=brown} => {species=Human} 0.1954023 0.8095238 2.012245
But if I run the same by increasing support count, I would have have 0 rules generated(so in your case - absolute support count is 78 for starwars dataset when you have only 87 observations).
So you need to reduce(or adjust) the support or confidence and so that you have atleast 1 rule or more than that. Also, the target = "rules"
could not help as you can see that it is generating 0 rules.
回答2:
the problem is solved, update packages like as below.
library(arules); search()
unloadNamespace("arules")
update.packages("arules")
library(arules)
来源:https://stackoverflow.com/questions/49308597/r-arules-apriori-error-in-lengthobj-method-length-not-implemented-for-clas