问题描述
我们如何修复PipeOp
的{{1}},以使其参数或配置从一开始就固定下来,并且在训练和预测中都保持不变。
$state
在上面的代码中,task = tsk("iris")
pos1 = po("scale",param_vals =list(
center = T,scale = T,affect_columns = selector_name("Sepal.Width")))
pos1$state
pos1$state$center <- c(Sepal.Width = 0)
pos1$state$scale <- c(Sepal.Width = 2)
graph <- pos1 %>>% lrn("classif.xgboost",eval_metric = "mlogloss")
gl <- GraphLearner$new(graph)
gl$train(task)
gl$state
中的参数center
和scale
会根据数据重新计算,即使我尝试将其固定为零和二(不确定是否正确)。
解决方法
切勿手动更改PipeOp
的{{1}}。也就是说,它更像是一个日志记录槽,供您检查,$state
在经过训练后可以找到执行其预测步骤所需的所有信息。
PipeOp
将始终将训练数据缩放为均值0,并按其均方根对其进行缩放(请参阅PipeOpScale
),并存储“已学习”的参数(即均值和均方根)训练数据的平方,例如?scale
函数返回的属性作为scale
。在预测期间,将对数据进行类似的转换,从而得出可能不同的均值和均方根。
假设您要在训练和预测过程中将$state
分别缩放为0和均方根2 两者(如上面的代码所建议;但这可能不是一个好主意) ),则可以使用"Sepal.Width"
:
PipeOpColApply