(H2O.ai) 当估算器对数据集进行预测时,列名或顺序是否重要?

(H2O.ai) Does column name or order matter when an estimator predicts on data set?

h2o 估计器是否需要让输入数据集具有与训练时相同的列名(无论是否忽略了某些列)还是重要的顺序(在这种情况下,忽略的列可以替换为其他数据)吗?

例如。在使用 h2o 模型对数据集进行预测时,假设 h2o flow UI 中的 DRF 模型的训练框架的形式为:

fa | fb | fc | meta_a | meta_b | response
---------------------------------------
fa1| fb1| fc1| meta_a1| meta_b1| response1
fa2| fb2| fc2| meta_a2| meta_b2| response2
....

我在其中指定流程 UI 忽略 meta_... 列。

现在假设我在 python 中加载该模型并想用它对新数据集 frame_in 进行预测,例如:

est = h2o.load_model('/path/to/exported/model/file')
preds = est.predict(frame_in)

其中 frame_in 是以下形式的 pandas 数据框:

Fa | Fc | Fb | meta_c | meta_d | response
---------------------------------------
fa1| fb1| fc1| meta_a1| meta_b1| response1
fa2| fb2| fc2| meta_a2| meta_b2| response2
.... 

实际列名已更改,因此 fa=Fa、fb=Fb、fc=Fc(尽管它们代表相同的特征)和 meta_... 特征是完全不同的数据。

我想在这种情况下会出现错误,但原因是什么?列的顺序(这再次让我问在训练期间被忽略的 meta_... 列是否可以是完全不同的数据)或列名的变化?是否有任何文件可以澄清这一点(看起来 here 我无法分辨)?谢谢。

参数 xy 可以指定为列名或列索引。

  • 如果您在训练模型时指定 x 作为列名称,则预测时的名称也必须匹配,但它们不必按任何特定顺序排列。
  • 但是,如果您在训练模型时指定 x 作为列索引,则顺序很重要。

顺序无关紧要。只有名字很重要。请参阅下面的示例(抱歉,它是 R,但行为在 Python 中是相同的:这里唯一的 R-specific 是:a)使用 built-in iris ; b) 使用 t(d),否则我会得到一个 4 行 1 列的 H2O 框架。)

顺便说一句,如果您指定列索引而不是名称,H2O 所做的第一件事就是将它们转换为列名。 (请参阅下面的 m@parameters$x 输出。)

library(h2o)
h2o.init()

iris <- as.h2o(iris)

m <- h2o.randomForest(1:4, 5, iris)
m@parameters$x

d <- c(1.4,3.6,5.0,0.2)
names(d) <- c("Petal.Length", "Sepal.Width", "Sepal.Length", "Petal.Width")

test <- as.h2o(t(d))
test

h2o.predict(m, test)

P.S。关于您的示例,您需要重命名(小写)测试数据中的列名,以便它们与训练数据相匹配,然后它就会起作用。