【问题标题】:How do h2o models determine what columns to use for predictions (position, name, etc.)?h2o 模型如何确定用于预测的列(位置、名称等)?
【发布时间】:2019-03-28 07:43:20
【问题描述】:

使用 h2o python API 训练一些模型,对如何正确实现 API 的某些部分有点困惑。具体来说,在实际使用模型的predict() 方法时,应该忽略训练数据集中的哪些列以及模型如何在数据集中查找实际的预测器特征。还有应该如何处理权重列(当实际的预测数据集没有真正的权重时)

这里的代码细节(我认为)并不重要,但基本的训练逻辑看起来像

drf_dx = h2o.h2o.H2ORandomForestEstimator(
    # denoting update version name by epoch timestamp
    model_id='drf_dx_v'+str(version)+'t'+str(int(time.time())), 
    response_column='dx_outcome',
    ignored_columns=[
        'ucl_id', 'patient_id', 'account_id', 'tar_id', 'charge_line', 'ML_data_begin',
        'procedure_outcome', 'provider_outcome',
        'weight'
    ],
    weights_column='weight',
    ntrees=64,
    nbins=32,
    balance_classes=True,
    binomial_double_trees=True)
.
.
.
drf_dx.train(x=X_train, y=Y_train, 
          training_frame=train_u, validation_frame=val_u, 
          max_runtime_secs=max_train_time_hrs*60*60)

(注意被忽略的列)和预测逻辑看起来像

preds = model.predict(X)

其中 X 是一些 (h2o) 数据框,其列比 X_train 中的列多(或少),用于训练模型(包括一些用于后处理探索的列(在 Jupyter 笔记本中))。例如。 X_train 列可能看起来像

<columns to ignore (as seen in the code)> <columns to use a features for training> <outcome label>

X 列可能看起来像

<columns to ignore (as seen in the code)> <EVEN MORE COLUMNS TO IGNORE> <columns to use a features for training>

我的问题是:这会在进行预测时混淆模型吗? IE。模型是通过 column name 将列用作特征(在这种情况下,我认为不同的数据框宽度不会成为问题)还是通过 column position (在这种情况下,向每个样本添加更多数据列会改变位置并成为问题)还是其他?由于模型构造函数的 ignored_columns arg 中没有说明这些列,会发生什么情况?


** 顺便说一句:weights_column 名称是否应该在 ignored_columns 列表中?文档中的示例 (http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/algo-params/weights_column.html#weights-column) 似乎将其用作预测功能,并且似乎推荐它

对于评分,所有计算的指标都会考虑观察权重(对于增益/提升、AUC、混淆矩阵、对数损失等),因此如果需要,还必须为验证集或测试集提供权重列提高/降低某些观察的权重(理想情况下在训练和测试之间保持一致)。

但这些权重值并不是实际预测中使用的数据所附带的。

【问题讨论】:

    标签: h2o


    【解决方案1】:

    我已将您的问题总结为几个不同的部分,因此答案将以 Q/A 类型的方式进行。

    1)。当我使用 my_model.predict(X) 时,H2O-3 如何知道要使用哪些列进行预测?

    • H2O-3 将使用您在构建模型时作为预测变量传递的列(即,您传递给估计器中x 参数的任何内容,或者您​​在 training_frame 中包含的所有未:忽略使用的列ignored_columns,作为目标传递给 y 参数,因为该列具有常量值而被删除。)。我的建议是使用x 参数来指定您的预测变量并忽略ignore_columns 参数。如果X,您预测的新数据框包含您在构建模型时未使用的列,则这些列将被忽略 - 因此列名而不是列位置

    2) 权重列名是否应该在被忽略的列列表中?

    • 不,如果您将权重列传递给忽略的列列表,则在模型构建阶段不会以任何方式考虑该列。事实上,如果你对此进行测试,你应该得到一个空指针错误或类似的东西。

    3) 为什么在下面的code example 中将“权重”列指定为预测变量和weights_column

    • 这是一个很好的问题!我创建了两个 Jira 票证 one 来更新文档以消除混淆,另一个 one 可能会添加用户警告。
    • 简短的回答是,如果您将同一列传递给预测变量参数x weights_column 参数,该列将仅用作权重 - 它会不得用作功能

    4) 用户指南是否建议使用权重作为特征和权重?

    • 不,在您指向的段落中,建议确保您作为 weights_column 传递的列存在于您的训练框架和验证框架中 - 并不是说​​它也应该是作为一项功能包含在内。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-15
      • 2021-05-26
      • 1970-01-01
      • 2019-10-04
      • 2017-03-02
      • 1970-01-01
      • 2019-09-13
      相关资源
      最近更新 更多