h2o模型如何确定用于预测的列(位置,名称等)?

时间:2018-10-24 01:00:53

标签: h2o

使用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>

我的问题是:这在进行预测时会混淆模型吗?就是是通过列名使列用作要素的模型(在这种情况下,我认为不同的数据框宽度不会有问题)还是通过列位置< / em>(在这种情况下,向每个样本添加更多数据列会改变位置并成为问题)还是其他?由于这些列没有在模型构造函数的ignored_columns arg中进行解释,会发生什么?


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

  

为了进行评分,所有计算的指标都将考虑观察权重(用于增益/提升,AUC,混淆矩阵,对数损失等),因此,如果需要,还必须提供权重列以进行验证或测试集来增加/减少某些观察值(最好在训练和测试之间始终保持一致)。

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

1 个答案:

答案 0 :(得分:1)

我已将您的问题概括为几个不同的部分,因此答案将采用Q / A类型。

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

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

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

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

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

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

4)用户指南是否建议将砝码用作功能部件和砝码?

  • 否,在您指向的段落中,建议确保在培训框架和验证框架中存在您通过weights_column传递的专栏-而不是应该也包含在功能中。