R - arules apriori 长度错误(obj):class 规则未实现方法长度
R - arules apriori Error in length(obj) : Method length not implemented for class rules
我正在尝试使用 apriori 设置关联规则 - 我使用的是不同的数据集,但 starwars 数据集包含类似的问题。使用 arules 我试图列出规则并应用 arulesViz 图。根据我的理解,所有字符串都必须是 运行 作为因素,列为 t运行sactions 然后 apriori 应该正常运行但我在 运行 后得到下面的输出以下代码和规则是未添加到环境中:
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")
以下是运行ning 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
我也有 运行 这个有以下参数更改
target = "rules"
并尝试 运行 仅使用空参数
非常感谢任何帮助!
如果我 运行 您的代码带有 starwars
数据,我会得到以下结果 -
> 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].
如您所见,生成了 3 条规则。这意味着如果我 运行 检查 - 我看到以下内容:
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
但是如果我 运行 通过增加支持计数来实现相同,我将生成 0 条规则(因此在您的情况下 - 当您只有 87 个观察值时,starwars 数据集的绝对支持计数为 78)。
所以你需要减少(或调整)支持度或置信度,这样你至少有 1 个规则或更多。此外,target = "rules"
也无济于事,因为您可以看到它生成了 0 条规则。
问题已解决,更新包如下。
library(arules); search()
unloadNamespace("arules")
update.packages("arules")
library(arules)
我正在尝试使用 apriori 设置关联规则 - 我使用的是不同的数据集,但 starwars 数据集包含类似的问题。使用 arules 我试图列出规则并应用 arulesViz 图。根据我的理解,所有字符串都必须是 运行 作为因素,列为 t运行sactions 然后 apriori 应该正常运行但我在 运行 后得到下面的输出以下代码和规则是未添加到环境中:
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")
以下是运行ning 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
我也有 运行 这个有以下参数更改
target = "rules"
并尝试 运行 仅使用空参数
非常感谢任何帮助!
如果我 运行 您的代码带有 starwars
数据,我会得到以下结果 -
> 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].
如您所见,生成了 3 条规则。这意味着如果我 运行 检查 - 我看到以下内容:
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
但是如果我 运行 通过增加支持计数来实现相同,我将生成 0 条规则(因此在您的情况下 - 当您只有 87 个观察值时,starwars 数据集的绝对支持计数为 78)。
所以你需要减少(或调整)支持度或置信度,这样你至少有 1 个规则或更多。此外,target = "rules"
也无济于事,因为您可以看到它生成了 0 条规则。
问题已解决,更新包如下。
library(arules); search()
unloadNamespace("arules")
update.packages("arules")
library(arules)