2017-07-19 5 views
1

が欠けているように見えます= glrm_model._model_json ["出力"] ['固有ベクトル'])H2OTwoDimTableは、私は(H2O一般低ランクのモデルEstimateorのglrm(申し訳ありませんが、私はタグでこれを置くことができない))この方法私はglrm_modelから固有ベクトルの集合を得ることができることを発見した機能

しかし、EVのタイプはH2OTwoDimTableですが、これはあまり能力がありません。

私は(MはH2Oデータフレームである場合)実行しようとした場合:

M.mult(EV) 

私はnumpyの行列にEVを変換しようとすると、私はエラー

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

を得る:

EV.as_matrix() 

私はエラーを取得する:

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

固有ベクトル参照はH2Oのデータを返す場合、私は、それが良いだろうパンダのデータフレームにEVを変換して、余分なステップですnumpyの行列、に変換し、行列の乗算に

私見を行うことができますフレーム。

また、H2OTwoDimTableが左または右のオペランドとして行列の乗算をうまくサポートできるかどうかは良いことです。

EV.as_data_frame()にはuse_pandas = Falseオプションはありません。

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

+1

ドキュメントが非常に悪い場合は、dir(EV)を試して属性を確認してください...何かが文書化されていない場合は、ライブラリの開発者が次回リリースで変更する可能性があります。 dir(EV)を試した後は、必ずドキュメントをチェックしてください。 –

答えて

1

「TwoDimTable」クラスがモデルで軽量な表形式のデータを格納するために使用されます。

は、ここでより良いサポートマトリクス型のものに変更することができPythonのコードです。私はTwoDimTablesの代わりにH2OFramesを使用することについてあなたと同意しますが、それはずっと前に作られた設計選択です(今変更できません)。

H2OFramesに数値以外のデータを含めることができるので、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() 

あなたはTwoDimTableクラスに.as_matrix()メソッドを追加することに興味があるなら、あなたはそのためのh2o-3 repoのプルリクエストを提出することができます。私はそれが役に立つ拡張だと思う。 contributing guideにH2Oに寄与する方法の詳細があります。

関連する問題

 関連する問題