5

データをディスクに書き込まずに、Vowpal Wabbit でモデルをトレーニングするためにデータを送信する方法はありますか?

これが私がやろうとしていることです。問題なくメモリに収まるcsv(約2GB)の比較的大きなデータセットがあります。Rでデータフレームにロードし、そのデータフレームのデータをVW形式に変換する機能があります。

モデルをトレーニングするには、まず変換されたデータをファイルに書き込んでから、そのファイルを VW にフィードする必要があります。また、ディスク部分への書き込みには時間がかかりすぎます。特に、さまざまな機能変換を使用してさまざまなモデルを試したいため、データをディスクに複数回書き込む必要があります。

では、各要素が VW 形式のデータの行である文字ベクトルを R で作成できると仮定すると、それをディスクに書き込まずに VW に入力するにはどうすればよいでしょうか?

デーモン モードを使用して、文字ベクトルを localhost 接続に書き込むことを検討しましたが、VW をデーモン モードでトレーニングすることができませんでした。これが可能かどうかさえわかりません。

これを機能させるために、必要に応じて (Rcpp パッケージを介して) c++ を使用したいと考えています。

事前にどうもありがとうございました。

アップデート:

皆様、ご協力ありがとうございました。誰かが興味を持っている場合に備えて、回答で提案されているように、出力を VW にパイプしました。

# Two sample rows of data
datarows <- c("1 |name 1:1 2:4 4:1", "-1 |name 1:1 4:1")
# Open connection to VW
con <- pipe("vw -f my_model.vw")
# Write to connection and close
writeLines(datarows, con)
close(con)
4

3 に答える 3

5

あなたが探しているのはvw、デーモンモードで実行されていることです。

これを行う標準的な方法はvw、デーモンとして実行することです。

vw -i some.model --daemon --quiet --port 26542 -p /dev/stdout

26542選択したポートに置き換えることができます。

これで、サーバーに TCP 接続することができます (これはlocalhost、ポート上で可能です26542)。TCP ソケットに書き込むすべての要求は、同じソケットで応答されます。

学習する (モデルをリアルタイムで変更するラベル付きの例を送信する) か、クエリを作成して応答を読み返すことができます。

一度に 1 つのクエリと予測を行うことも、一度に複数のことを行うこともできます。必要なのは、ファイルからテストする場合とまったく同じように、各クエリの最後にある改行文字だけです。順序は保持されることが保証されます。

また、予測のみを目的としており、メモリ内モデルを更新することを想定していないリクエストと、学習するリクエストを混在させることもできます。これを達成するための秘訣は、学習させたくない例に重みゼロを使用することです。

この例では、重みが 1 であるため、モデルを更新します。

label 1 'tag1| input_features...

そして、これは重みが 0 であるため、モデルを更新しません。

label 0 'tag2| input_features...

公式リファレンスのもう少しは vowpal wabbit wiki にあります: vowpal wabbit をデーモンとして実行する方法 ですが、その主な例ではモデルが事前に学習され、メモリにロードされていることに注意してください。

于 2014-07-20T22:47:13.983 に答える
2

Vowpal Wabbit は標準入力 (cat train.dat | vw) からのデータの読み取りをサポートしているため、R から直接パイプを開くことができます。

デーモンモードはトレーニングをサポートします。増分/連続学習が必要な場合は、タグが文字列「save」で始まるダミーの例でトリックを使用できます。必要に応じて、モデル ファイル名も指定できます。

1 save_filename| 

さらに別のオプションは、VW をライブラリとして使用することです。を参照してください。

VW は、機能名前空間を使用してさまざまな機能エンジニアリングをサポートしていることに注意してください。

于 2014-07-20T21:57:35.113 に答える
0

また、R を使用してデータを変換し、VowpalWabbit に出力しています。RVowpalWabbit R と VowpalWabbit を接続するために使用できる CRAN のパッケージが存在します。ただし、Linux でのみ使用できます。

また、高速化のために、パッケージfreadの関数 を使用します。data.tableの変換data.tableも よりも高速ですがdata.frame、別の構文を学ぶ必要があります。

于 2014-07-20T12:43:03.150 に答える