2016-12-27 4 views
4

私はH2Oにアップロードし、可能であれば単一のマシンで解析したい(あるいは、現在利用可能なハードウェアとソフトウェアよりも多くのハードウェアとソフトウェアが必要であるという確かな発見がある)、標準化され整然とした「長い」データ構造のデータを持っています。データは大きいものの、膨大ではありません。効率的な正規化された形式で3列のおそらく7000万行、スパース行列(大多数のセルがゼロ)にキャストされたときに300k×80kです。H2Oで長い形式から広い形式へデータをキャストするにはどうすればよいですか?

H2O中の分析ツールは、後者の広範なフォーマットである必要があります。全体的なモチベーションの一部は、さまざまなハードウェア設定の限界がそのようなデータを分析することですが、現時点では、データをH2Oクラスター(RがRAM内にすべて保持できるマシン)に取得するのに苦労しています。分析のためのサイズ制限について判断することはできません。これも現実のデータセットではありませんので、 - 1 61 2 1 76 1 1 89 1 1 211 1 1 296 1 1 335 1 1 404 1

ない、それは重要なこと:3つの列は、「文書ID」、「wordID」であり、「カウント」どこ

試験データは、以下のようなものです私のために、ちょうどテストセット - このテストデータはhttps://archive.ics.uci.edu/ml/machine-learning-databases/bag-of-words/docword.nytimes.txt.gz(注意、大きなダウンロード)からです。

解析するには、各documentIDの行、各wordIDの列、およびセルの数(そのドキュメント内のその単語の数)が行列で必要です。 Rの場合(これは例えばtidyr::spread)、(この具体的なケースのようにspreadで作成された密なデータフレームは大きすぎます)tidytext::cast_sparse、このサイズのデータ​​でうまくいきます

最新のバージョンのH2O(h2o.aiから入手可能ですが、まだCRANにはありません)は、R関数as.h2oを持っており、これは疎行列を理解しています。これは小さくてもまだまだ重要ではありませんデータ(例えば、3500行×7000列のテストケースでは、高密度バージョンが22秒かかると3秒で疎行列をインポートしますが、300,000×80,000の疎行列を取得すると、このエラーメッセージでクラッシュします)

asMethod(オブジェクト)で

エラー:ファイル../Core/cholmod_dense.cで Cholmodエラー「大きすぎる問題」、限り前方の2つの方法があります私が言うことができるようにライン105

を:

  1. データをH2Oに長くてきれいで効率的な形でアップロードし、H2Oで再成形「スプレッド」操作を行います。
  2. R(または他の言語)で整形データの操作を行い、スパース形式でディスクに結果スパース行列を保存し、私の知る限りH2O
  3. にそこから

をアップロードし、H2Oは」doesnの#1の機能、すなわちRのtidytext::cast_sparseまたはtidyr::spreadに相当する機能を持っています。そのdata munging capabilitiesは非常に限られています。しかし、多分私は何かを逃したのだろうか?だから私の最初の(あまり楽観的ではない)質問はで、H2Oは長い形式から広い形式のデータを "キャスト"または "広げる"ことができますか?

オプション#2はこのolder questionと同じになります。その理由は、受け入れられた答えはSVMlight形式でデータを保存することでした。しかし、これを効率的に行う方法はわかりません.SVMlight形式は、サポートベクターマシンでモデル化されていないデータには意味があることは明らかではありません(たとえば、教師なし学習問題)。RのMatrixパッケージでサポートされているMatrixMarket形式で、疎な行列を保存することができればもっと便利ですが、私が知る限りH2Oではありません。 MatrixMarket形式は、オリジナルの長いデータと非常によく似ています。基本的には、2行のヘッダーを持つcolno rowno cellvalueのようなスペースで区切られたファイルです。

答えて

4

私は現在、H2Oでそれを行う機能がないので、#2はあなたの最善の策だと思います。これは便利なユーティリティだと思いますので、hereのJIRAチケットを作成しました。私はそれがうまくいくかどうかわからないので、私はまだ時間のために#2をコーディングすることを提案したいと思います。

SVMLight/LIBSVMフォーマットは、もともと特定のSVM実装(名前が示すように)用に開発されましたが、一般的であり、SVM固有のものではありません。ラベル付きデータがない場合は、ラベルが必要な場所にダミー値を入力できます。

この形式でR data.frameをエクスポートするには、このpackageを使用できます。詳細はhereです。 "svmlight"または"libsvm"http://rdocumentation.orgに検索することで、より良いパッケージを見つけることができます。

機能を使用してparse_type = "SVMLight"を使用して、スパースファイルを直接H2Oに読み込むことができます。

+2

ありがとうございます。私は今、GitHubリポジトリ(大規模では動作しませんでした)をフォークし、大きなsimple_triplet_matrixオブジェクトを持つlibsvmフォーマットをhttps://github.com/ellisp/で書き込む関数を作成しましたr-libsvm-format-read-write/blob/master/R/write-sparse-triplets-svm.R。 –

+0

Pythonでsvmlight形式のファイルを使用したモデル構築の例はありますか? – user90772

+0

'' df = h2o.import_file( "mydata.svmlight"、method = "SVMLight") 'を使って、H2O Pythonアルゴリズムで' training_frame = df'を設定してください。 –

関連する問題