作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用非常有用的示例 mlr3 book ,我试图简单地返回堆叠模型输出的平均分数。有人可以解释如何使用mlr3做到这一点吗?我已经尝试使用 LearnerClassifAvg$new(id = "classif.avg") 和 po("classifavg"),但不确定我是否正确应用了这些,谢谢
示例:
library("magrittr")
library("mlr3learners") # for classif.glmnet
task = mlr_tasks$get("iris")
train.idx = sample(seq_len(task$nrow), 120)
test.idx = setdiff(seq_len(task$nrow), train.idx)
rprt = lrn("classif.rpart", predict_type = "prob")
glmn = lrn("classif.glmnet", predict_type = "prob")
# Create Learner CV Operators
lrn_0 = PipeOpLearnerCV$new(rprt, id = "rpart_cv_1")
lrn_0$param_set$values$maxdepth = 5L
lrn_1 = PipeOpPCA$new(id = "pca1") %>>% PipeOpLearnerCV$new(rprt, id = "rpart_cv_2")
lrn_1$param_set$values$rpart_cv_2.maxdepth = 1L
lrn_2 = PipeOpPCA$new(id = "pca2") %>>% PipeOpLearnerCV$new(glmn)
# Union them with a PipeOpNULL to keep original features
level_0 = gunion(list(lrn_0, lrn_1,lrn_2, PipeOpNOP$new(id = "NOP1")))
# Cbind the output 3 times, train 2 learners but also keep level
# 0 predictions
level_1 = level_0 %>>%
PipeOpFeatureUnion$new(4) %>>%
PipeOpCopy$new(3) %>>%
gunion(list(
PipeOpLearnerCV$new(rprt, id = "rpart_cv_l1"),
PipeOpLearnerCV$new(glmn, id = "glmnt_cv_l1"),
PipeOpNOP$new(id = "NOP_l1")
))
level_1$plot(html = FALSE)
level_2 <- level_1 %>>%
PipeOpFeatureUnion$new(3, id = "u2") %>>%
LearnerClassifAvg$new( id = "classif.avg")
level_2$plot(html = FALSE)
lrn = GraphLearner$new(level_2)
lrn$
train(task, train.idx)$
predict(task, test.idx)$
score()
## returns: Error: Trying to predict response, but incoming data has no factors
最佳答案
如果我们不将特征传递给 classif.avg
( PipeOpNOP
) 我们仍然以同样的错误告终:
Error: Trying to predict response, but incoming data has no factors
library("magrittr")
library("mlr3learners") # for classif.glmnet
library("mlr3verse") #for LearnerClassifAvg
library("mlr3pipelines") # for pipelines
task = mlr_tasks$get("iris")
train.idx = sample(seq_len(task$nrow), 120)
test.idx = setdiff(seq_len(task$nrow), train.idx)
rprt = lrn("classif.rpart", predict_type = "prob")
glmn = lrn("classif.glmnet", predict_type = "prob")
# Create Learner CV Operators
lrn_0 = PipeOpLearnerCV$new(rprt, id = "rpart_cv_1")
lrn_0$param_set$values$maxdepth = 5L
lrn_1 = PipeOpPCA$new(id = "pca1") %>>% PipeOpLearnerCV$new(rprt, id = "rpart_cv_2")
lrn_1$param_set$values$rpart_cv_2.maxdepth = 1L
lrn_2 = PipeOpPCA$new(id = "pca2") %>>% PipeOpLearnerCV$new(glmn)
# Union them with a PipeOpNULL to keep original features
level_0 = gunion(list(lrn_0, lrn_1,lrn_2, PipeOpNOP$new(id = "NOP1")))
# Cbind the output 3 times, train 2 learners but also keep level
# 0 predictions
level_1 = level_0 %>>%
PipeOpFeatureUnion$new(4) %>>%
PipeOpCopy$new(2) %>>%
gunion(list(
PipeOpLearnerCV$new(rprt, id = "rpart_cv_l1"),
PipeOpLearnerCV$new(glmn, id = "glmnt_cv_l1")
# PipeOpNOP$new(id = "NOP_l1") #leave out features here
))
level_2 <- level_1 %>>%
PipeOpFeatureUnion$new(2, id = "u2") %>>%
LearnerClassifAvg$new( id = "classif.avg")
level_2$plot(html = FALSE)
lrn = GraphLearner$new(level_2)
lrn$
train(task, train.idx)$
predict(task, test.idx)$
score()
#> INFO [20:42:55.490] [mlr3] Applying learner 'classif.rpart' on task 'iris' (iter 2/3)
#> INFO [20:42:55.557] [mlr3] Applying learner 'classif.rpart' on task 'iris' (iter 1/3)
#> INFO [20:42:55.591] [mlr3] Applying learner 'classif.rpart' on task 'iris' (iter 3/3)
#> INFO [20:42:55.810] [mlr3] Applying learner 'classif.rpart' on task 'iris' (iter 3/3)
#> INFO [20:42:55.849] [mlr3] Applying learner 'classif.rpart' on task 'iris' (iter 2/3)
#> INFO [20:42:55.901] [mlr3] Applying learner 'classif.rpart' on task 'iris' (iter 1/3)
#> INFO [20:42:56.188] [mlr3] Applying learner 'classif.glmnet' on task 'iris' (iter 3/3)
#> INFO [20:42:56.299] [mlr3] Applying learner 'classif.glmnet' on task 'iris' (iter 1/3)
#> INFO [20:42:56.374] [mlr3] Applying learner 'classif.glmnet' on task 'iris' (iter 2/3)
#> INFO [20:42:56.634] [mlr3] Applying learner 'classif.rpart' on task 'iris' (iter 1/3)
#> INFO [20:42:56.699] [mlr3] Applying learner 'classif.rpart' on task 'iris' (iter 2/3)
#> INFO [20:42:56.765] [mlr3] Applying learner 'classif.rpart' on task 'iris' (iter 3/3)
#> INFO [20:42:57.065] [mlr3] Applying learner 'classif.glmnet' on task 'iris' (iter 2/3)
#> INFO [20:42:57.177] [mlr3] Applying learner 'classif.glmnet' on task 'iris' (iter 1/3)
#> INFO [20:42:57.308] [mlr3] Applying learner 'classif.glmnet' on task 'iris' (iter 3/3)
#> Error: Trying to predict response, but incoming data has no factors
创建于 2021-03-27 由
reprex package (v1.0.0)
lrn_avg <- LearnerClassifAvg$new( id = "classif.avg")
lrn_avg$predict_type ="prob"
在此处检查错误消息:
https://github.com/cran/mlr3pipelines/blob/master/R/LearnerAvg.R
if (all(fcts) != (self$predict_type == "response")) {
stopf("Trying to predict %s, but incoming data has %sfactors", self$predict_type, if (all(fcts)) "only " else "no "
用更简单的集成演示了解决方案
library("magrittr")
library("mlr3learners") # for classif.glmnet
#> Lade nötiges Paket: mlr3
library("mlr3verse") #for LearnerClassifAvg
library("mlr3pipelines") # for pipelines
# Define task
task = mlr_tasks$get("iris")
train.idx = sample(seq_len(task$nrow), 120)
test.idx = setdiff(seq_len(task$nrow), train.idx)
rprt = lrn("classif.rpart", predict_type = "prob")
glmn = lrn("classif.glmnet", predict_type = "prob")
# Define level 0
level_0 =
gunion(list(
PipeOpLearnerCV$new(rprt, id = "rpart_cv_l1"),
PipeOpLearnerCV$new(glmn, id = "glmnt_cv_l1")
# PipeOpNOP$new(id = "NOP_l1")
))
# Create "averager" learner (and set predict type to "prob")
lrn_avg <- LearnerClassifAvg$new( id = "classif.avg")
lrn_avg$predict_type ="prob"
# Combine level 0 and "averager" learner
level_1 <- level_0 %>>%
PipeOpFeatureUnion$new(2, id = "u1") %>>%
lrn_avg
# Show ensemble
level_1$plot(html = FALSE)
# Turn into learner
lrn = GraphLearner$new(level_1)
# Make predictions
set.seed(123)
lrn$
train(task, train.idx)$
predict(task, test.idx)$
score()
#> INFO [14:32:46.626] [mlr3] Applying learner 'classif.rpart' on task 'iris' (iter 2/3)
#> INFO [14:32:46.692] [mlr3] Applying learner 'classif.rpart' on task 'iris' (iter 3/3)
#> INFO [14:32:46.724] [mlr3] Applying learner 'classif.rpart' on task 'iris' (iter 1/3)
#> INFO [14:32:47.060] [mlr3] Applying learner 'classif.glmnet' on task 'iris' (iter 2/3)
#> INFO [14:32:47.136] [mlr3] Applying learner 'classif.glmnet' on task 'iris' (iter 1/3)
#> INFO [14:32:47.209] [mlr3] Applying learner 'classif.glmnet' on task 'iris' (iter 3/3)
#> classif.ce
#> 0.1
创建于 2021-03-28 由
reprex package (v1.0.0)
关于r - 来自合奏的 MLR3 平均分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64087473/
我是一名优秀的程序员,十分优秀!