H2OTwoDimTable似乎缺少功能

时间:2017-07-19 22:02:28

标签: numpy matrix matrix-multiplication h2o

我发现我可以从glrm_model(H2O广义低等级模型估计器glrm(对不起我不能把它放在标签中)中获得一组EigenVectors)这样:

EV = glrm_model._model_json [“output”] ['eigenvectors'])

然而,EV的类型是H2OTwoDimTable,它不是很有能力。

如果我尝试做(M是H2O数据框):

M.mult(EV)

我收到错误

AttributeError: 'H2OTwoDimTable' object has no attribute 'nrows'

如果我尝试将EV转换为numpy矩阵:

EV.as_matrix()

我收到错误:

AttributeError: 'H2OTwoDimTable' object has no attribute 'as_matrix'

我可以将EV转换为熊猫数据框,然后将其转换为numpy矩阵,这是一个额外的步骤并进行矩阵乘法

恕我直言,如果特征向量引用返回H2O数据帧会更好。

另外,如果H2OTwoDimTable能够更好地支持矩阵乘法作为左或右操作数,那将是一件好事。

并且EV.as_data_frame()没有use_pandas = False选项。

这是python代码,可以修改以更好地支持矩阵类型的东西:

https://github.com/h2oai/h2o-3/blob/master/h2o-py/h2o/two_dim_table.py

1 个答案:

答案 0 :(得分:1)

“TwoDimTable”类用于在模型中存储轻量级表格数据。我同意你使用H2OFrames代替TwoDimTables,但它是很久以前制作的设计选择(现在无法改变)。

由于H2O框架可以包含非数字数据,因此从H2OFrame或TwoDimTable到Pandas DataFrame有一种.as_data_frame()方法。因此,您可以将.as_data_frame().as_matrix()链接在一起以获得矩阵(numpy.ndarray),如果这正是您要查找的内容。这是一个例子:

import h2o
from h2o.estimators.glrm import H2OGeneralizedLowRankEstimator

h2o.init()

data = h2o.import_file("https://s3.amazonaws.com/h2o-public-test-data/smalldata/glrm_test/cancar.csv")

# Train a GLRM model with recover_svd=True to keep eigenvectors
glrm = H2OGeneralizedLowRankEstimator(k=4,
                                      transform="NONE",
                                      loss="Quadratic",
                                      regularization_x="None",
                                      regularization_y="None",
                                      max_iterations=1000,
                                      recover_svd=True)
glrm.train(x=data.names, training_frame=data)

# Get eigenvector TwoDimTable from the model
EV = glrm._model_json["output"]['eigenvectors']

# Convert to various formats
evdf = EV.as_data_frame() #pandas.core.frame.DataFrame
evmat = evdf.as_matrix()  #numpy.ndarray

# or directly
evmat = EV.as_data_frame().as_matrix()

如果您对将.as_matrix()方法添加到TwoDimTable类感兴趣,可以在h2o-3 repo上提交拉取请求。我认为这将是一个有用的扩展。有关如何在contributing guide中为H2O做出贡献的更多信息。