0

基本的なユニグラム機能を使用して、バイナリ感情分類 (正と負) に Vowpal Wabbit を使用しています。これは私の列車の機能がどのように見えるかです:

1 | 28060 10778 21397 64464 19255
-1 | 44248 21397 3353 57948 4340 7594 3843 44368 33938 49249 45696     32698 57948 21949 58810 32698 62793 64464
1 | 44248 21397 3353 32698 62996
1 | 44248 21397 3353 57948 63747 40024 46815 37197 7594 47339 28060 10778 32698 45035 3843 54789 19806 60087 7594 47339

各行はラベルで始まり、語彙内の単語の一連のインデックスが続きます。これらの機能のデフォルト値は 1 です。

このコマンドを使用してトレーニングします。

cat trainfeatures.txt | vw --loss_function logistic -f trainedModel

これは、テストに使用するコマンドです。

cat testfeatures.txt | vw  -i trainedModel -p test.pred

出力ファイル test.pred は次のようになります。

28.641335
15.409834
13.057793
28.488165
16.716839
19.752426

値の範囲は -0.114076 ~ 28.641335 です。値がしきい値、たとえば 14 より大きい場合は正であり、それ以外の場合は負であるというルールを使用すると、51% の精度と 40.7% の f 値が得られます。

しかし、私がフォローしている論文では、このデータセットで 81% の精度が報告されています。したがって、実装または結果の解釈において、私が行っていることは間違いありません。私はそれが何であるかを理解することができません。

編集: テスト コマンドで --binary オプションを使用したところ、{-1,+1} というラベルが付けられました。評価した結果、精度は 51.25%、f 値は 34.88% でした。

4

1 に答える 1

1

編集: 主な問題は、トレーニング データがランダムな順序でシャッフルされなかったことです。これは、オンライン学習を使用するときに必要です (トレーニング データが既にシャッフルされている場合や、リアルタイムの系列である場合を除きます)。Unix コマンドを使用して実行できますshuf

説明: 極端な場合、トレーニング データに最初にすべての否定的な例が含まれ、次にすべての肯定的な例が含まれている場合、モデルは (ほぼ) すべてを肯定的に分類することを学習する可能性が非常に高くなります。

F1 測定値が低くなる (そしてほとんどすべての予測が肯定的である) 可能性があるもう 1 つの一般的な理由は、データの不均衡です (肯定的な例が多く、否定的な例はほとんどありません)。これは、Satarupa Guha の質問のデータセットには当てはまりませんでしたが、元の回答をここに保持します。

明らかな解決策は、負の例に (デフォルトの 1 よりも) 高い重要度の重みを与えることです。重要度の重みの最適値は、ホールドアウト セットを使用して見つけることができます。

値がしきい値、たとえば 14 を超えている場合は正であり、それ以外の場合は負であるというルールを使用すると、

負の予測と正の予測のしきい値は 0 にする必要があります。

Vowpal Wabbit の大きな利点の 1 つは、機能名 (この場合は単語) を整数に変換する必要がないことです。生の (トークン化された) テキストを使用できますが、必ずパイプ "|" をエスケープしてください。およびコロン ":" (およびスペースと改行)。もちろん、すでに単語を整数に変換している場合は、それを使用できます。

于 2015-04-24T19:43:52.207 に答える