2017-07-19 6 views
1

entdeckte ich, dass ich eine Sammlung von Eigenvektoren von glrm_model bekommen (H2O Generalized Low Rank Modell Estimateor glrm (Leider habe ich das nicht in den Tags setzen können)) auf diese Weise:H2OTwoDimTable scheint Funktionalität zu fehlen

EV = glrm_model._model_json ["Ausgabe"] ['Eigenvektoren]]

Allerdings ist der Typ von EV H2OTwoDimTable, die nicht sehr fähig ist.

Wenn ich versuche zu tun, (wobei M ein H2O Datenrahmen ist):

M.mult(EV) 

ich den Fehler

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

Wenn ich versuche, EV auf eine numpy Matrix zu konvertieren:

EV.as_matrix() 

ich den Fehler:

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

I EV zu einem Panda Datenrahmen umwandeln und sie dann in eine numpy Matrix umwandeln, die ein zusätzlicher Schritt und tun der Matrixmultiplikation

IMHO, wäre es besser, wenn die Eigenvektor Referenz ein H2O Daten zurückgeben Rahmen.

Es wäre auch gut, wenn H2OTwoDimTable Matrixmultiplikation besser als linker oder rechter Operand unterstützen könnte.

Und EV.as_data_frame() hat keine use_pandas = False-Option.

Hier ist der Python-Code, der zur besseren Unterstützung von Matrix-Typ Dinge modifiziert werden könnte:

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

+1

Wenn die Dokumentation sehr schlecht ist, versuchen Dir (EV), um die Attribute zu sehen ... Wenn etwas nicht dokumentiert ist, können die Entwickler der Bibliothek es in der nächsten Version ändern. Überprüfen Sie immer die Dokumentation, nachdem Sie versuchen, dir (EV). –

Antwort

1

Die „TwoDimTable“ Klasse verwendet wird, leichte tabellarische Daten in einem Modell zu speichern. Ich bin damit einverstanden, H2OFrames anstelle von TwoDimTables zu verwenden, aber es ist eine Designauswahl, die vor langer Zeit gemacht wurde (kann jetzt nicht geändert werden).

Da H2OFrames nichtnumerische Daten enthalten können, gibt es eine Methode von einem H2OFrame oder TwoDimTable zu einem Pandas DataFrame. So können Sie .as_data_frame().as_matrix() zusammen ketten, um eine Matrix zu erhalten (numpy.ndarray), wenn das, was Sie suchen. Hier ein Beispiel:

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() 

Wenn Sie in dem Hinzufügen einer .as_matrix() Methode zur TwoDimTable Klasse interessiert sind, können Sie eine Pull-Anforderung auf den h2o-3 repo dafür vorlegen können. Ich denke, das wäre eine sinnvolle Erweiterung. In unserer contributing guide finden Sie weitere Informationen darüber, wie Sie zu H2O beitragen können.

Verwandte Themen