如何修复PipeOP的状态?

问题描述

我们如何修复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 中的参数centerscale会根据数据重新计算,即使我尝试将其固定为零和二(不确定是否正确)。

解决方法

切勿手动更改PipeOp的{​​{1}}。也就是说,它更像是一个日志记录槽,供您检查,$state在经过训练后可以找到执行其预测步骤所需的所有信息。

PipeOp将始终将训练数据缩放为均值0,并按其均方根对其进行缩放(请参阅PipeOpScale),并存储“已学习”的参数(即均值和均方根)训练数据的平方,例如?scale函数返回的属性作为scale。在预测期间,将对数据进行类似的转换,从而得出可能不同的均值和均方根。

假设您要在训练和预测过程中将$state分别缩放为0和均方根2 两者(如上面的代码所建议;但这可能不是一个好主意) ),则可以使用"Sepal.Width"

PipeOpColApply

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...