【问题标题】:Unable to train dataset by mlr3proba after encoding and scaling it with mlr3pipeline使用 mlr3pipeline 编码和缩放数据后,无法通过 mlr3proba 训练数据集
【发布时间】:2021-04-29 13:55:43
【问题描述】:

当我在使用 mlr3pipeline 编码和缩放我的数据集后运行以下代码以在 mlr3proba 中训练模型时:

task =tsk("sonar")
learner = lrn("classif.rpart")
measure = msr("classif.ce")
inner.rsmp <- rsm("cv", folds = 5)
train_set = sample(task$nrow, 0.8 * task$nrow)
test_set = setdiff(seq_len(task$nrow), train_set)

learner <- po("encode") %>>% po("scale") %>>% po("learner", learner)
learner$train(task, row_ids = train_set)

R 代码显示错误如下:

Error in learner$train(task, row_ids = train_set) : 
  unused argument (row_ids = train_set)

我在另一个数据集中尝试过,但它显示了相同的问题。

但如果我不对数据集进行编码和缩放,一切正常。

另外,对于resample() 函数,它是可以的(尽管编码和缩放):

rr <- resample(task, learner, inner.rsmp)
rr$aggregate(measure)

#Results:

INFO  [08:46:55.411] [mlr3]  Applying learner 'encode.scale.classif.rpart' on task 'sonar' (iter 4/5) 
INFO  [08:46:55.539] [mlr3]  Applying learner 'encode.scale.classif.rpart' on task 'sonar' (iter 1/5) 
INFO  [08:46:55.644] [mlr3]  Applying learner 'encode.scale.classif.rpart' on task 'sonar' (iter 2/5) 
INFO  [08:46:55.773] [mlr3]  Applying learner 'encode.scale.classif.rpart' on task 'sonar' (iter 5/5) 
INFO  [08:46:55.876] [mlr3]  Applying learner 'encode.scale.classif.rpart' on task 'sonar' (iter 3/5)

rr$score(measure)

                task task_id            learner                 learner_id         resampling
1: <TaskClassif[46]>   sonar <GraphLearner[33]> encode.scale.classif.rpart <ResamplingCV[19]>
2: <TaskClassif[46]>   sonar <GraphLearner[33]> encode.scale.classif.rpart <ResamplingCV[19]>
3: <TaskClassif[46]>   sonar <GraphLearner[33]> encode.scale.classif.rpart <ResamplingCV[19]>
4: <TaskClassif[46]>   sonar <GraphLearner[33]> encode.scale.classif.rpart <ResamplingCV[19]>
5: <TaskClassif[46]>   sonar <GraphLearner[33]> encode.scale.classif.rpart <ResamplingCV[19]>
   resampling_id iteration              prediction classif.ce
1:            cv         1 <PredictionClassif[19]>  0.3333333
2:            cv         2 <PredictionClassif[19]>  0.2142857
3:            cv         3 <PredictionClassif[19]>  0.2380952
4:            cv         4 <PredictionClassif[19]>  0.3658537
5:            cv         5 <PredictionClassif[19]>  0.2439024

那么问题出在哪里?

【问题讨论】:

    标签: machine-learning mlr3 data-preprocessing


    【解决方案1】:

    您需要将学习器包装在 GraphLearner PipeOp 中:

    library(mlr3)
    library(mlr3pipelines)
    
    task =tsk("sonar")
    learner = lrn("classif.rpart")
    measure = msr("classif.ce")
    inner.rsmp <- rsmp("cv", folds = 5)
    train_set = sample(task$nrow, 0.8 * task$nrow)
    test_set = setdiff(seq_len(task$nrow), train_set)
    
    learner <- po("encode") %>>% po("scale") %>>% po("learner", learner)
    learner <- GraphLearner$new(learner)
    learner$train(task, row_ids = train_set)
    learner$predict(task, row_ids = test_set)
    #> <PredictionClassif> for 42 observations:
    #>     row_ids truth response
    #>           5     R        R
    #>          12     R        R
    #>          13     R        R
    #> ---                       
    #>         188     M        M
    #>         191     M        M
    #>         201     M        M
    

    reprex package (v0.3.0) 于 2021 年 4 月 30 日创建

    【讨论】:

      猜你喜欢
      • 2022-11-17
      • 2021-04-19
      • 2015-03-28
      • 2021-03-09
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      相关资源
      最近更新 更多