如何捕获未经训练的值h2o python

时间:2017-12-07 19:23:37

标签: python h2o

在对h2o数据框进行预测时,如何捕获未知值?

例如,在做类似的事情时:

model.predict(frame_in)

在h2o python api中,在模型进行预测时加载进度条,然后输出一系列列表,详细说明为每个模型预测特征的枚举类型看到的未知标签。例如

/home/mapr/anaconda2/lib/python2.7/site-packages/h2o/job.py:69: UserWarning:
Test/Validation dataset column 'feature1' has levels not trained on: [, <values>] 

有没有办法让这组未知级别成为python对象?谢谢。

使用h2o MOJO时,有一个名为getTotalUnknownCategoricalLevelsSeen()的{​​{3}},但我在h2o python文档中找不到这样的内容。

2 个答案:

答案 0 :(得分:0)

结束暂时捕获stderr的警告输出。以下是相关摘录:

import contextlib
import StringIO


@contextlib.contextmanager
def stderr_redirect(where):
    """
    Temporarily redirect stdout to a specified python object
    see https://stackoverflow.com/a/14197079
    """
    sys.stderr = where
    try:
        yield where
    finally:
        sys.stderr = sys.__stderr__


# make prediction on data
with stderr_redirect(StringIO.StringIO()) as new_stderr:
    preds = est.predict(frame_in)

print 'Prediction complete'
new_stderr.seek(0)
# capture any warning output
preds_stderr = new_stderr.read()

然后使用正则表达式来过滤仅输出包含列名和未看到值列表的行,然后使用另一个正则表达式来过滤以获取列表(然后我删除空格和.split(',')以获取python字符串list个值)。也可以使用正则表达式从同一行获取列名,并将它们配对在元组列表中。

答案 1 :(得分:0)

你可能会考虑H2O的GLRM(广义低秩模型)。它可以归咎于缺失值。

http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/glrm.html