4

バイナリデータを分類しようとしています。データ ファイルでは、クラス [0,1] は [-1,1] に変換されます。データには 21 個の特徴があります。すべての機能はカテゴリです。トレーニングにニューラルネットワークを使用しています。トレーニング コマンドは次のとおりです。

     vw -d train.vw --cache_file  data --passes 5 -q sd  -q ad  -q do -q fd --binary -f model  --nn 22

生の予測ファイルを次のように作成します。

    vw -d test.vw -t -i neuralmodel -r raw.txt

通常の予測ファイルは次のとおりです。

    vw -d test.vw -t -i neuralmodel -p out.txt

生ファイルの最初の 5 行は次のとおりです。

    0:-0.861075,-0.696812 1:-0.841357,-0.686527 2:0.796014,0.661809 3:1.06953,0.789289 4:-1.23823,-0.844951 5:0.886767,0.709793 6:2.02206,0.965555 7:-2.40753,-0.983917 8:-1.09056,-0.797075 9:1.22141,0.84007 10:2.69466,0.990912 11:2.64134,0.989894 12:-2.33309,-0.981359 13:-1.61462,-0.923839 14:1.54888,0.913601 15:3.26275,0.995055 16:2.17991,0.974762 17:0.750114,0.635229 18:2.91698,0.994164 19:1.15909,0.820746 20:-0.485593,-0.450708 21:2.00432,0.964333 -0.496912
    0:-1.36519,-0.877588 1:-2.83699,-0.993155 2:-0.257558,-0.251996 3:-2.12969,-0.97213 4:-2.29878,-0.980048 5:2.70791,0.991148 6:1.31337,0.865131 7:-2.00127,-0.964116 8:-2.14167,-0.972782 9:2.50633,0.986782 10:-1.09253,-0.797788 11:2.29477,0.97989 12:-1.67385,-0.932057 13:-0.740598,-0.629493 14:0.829695,0.680313 15:3.31954,0.995055 16:3.44069,0.995055 17:2.48612,0.986241 18:1.32241,0.867388 19:1.97189,0.961987 20:1.19584,0.832381 21:1.65151,0.929067 -0.588528
    0:0.908454,0.72039 1:-2.48134,-0.986108 2:-0.557337,-0.505996 3:-2.15072,-0.973263 4:-1.77706,-0.944375 5:0.202272,0.199557 6:2.37479,0.982839 7:-1.97478,-0.962201 8:-1.78124,-0.944825 9:1.94016,0.959547 10:-1.67845,-0.932657 11:2.54895,0.987855 12:-1.60502,-0.92242 13:-2.32369,-0.981008 14:1.59895,0.921511 15:2.02658,0.96586 16:2.55443,0.987987 17:3.47049,0.995055 18:1.92482,0.958313 19:1.47773,0.901044 20:-3.60913,-0.995055 21:3.56413,0.995055 -0.809399
    0:-2.11677,-0.971411 1:-1.32759,-0.868656 2:2.59003,0.988807 3:-0.198721,-0.196146 4:-2.51631,-0.987041 5:0.258549,0.252956 6:1.60134,0.921871 7:-2.28731,-0.97959 8:-2.89953,-0.993958 9:-0.0972349,-0.0969177 10:3.1409,0.995055 11:1.62083,0.924746 12:-2.30097,-0.980134 13:-2.05674,-0.967824 14:1.6744,0.932135 15:1.85612,0.952319 16:2.7231,0.991412 17:1.97199,0.961995 18:3.47125,0.995055 19:0.603527,0.539567 20:1.25539,0.84979 21:2.15267,0.973368 -0.494474
    0:-2.21583,-0.97649 1:-2.16823,-0.974171 2:2.00711,0.964528 3:-1.84079,-0.95087 4:-1.27159,-0.854227 5:-0.0841799,-0.0839635 6:2.24566,0.977836 7:-2.19458,-0.975482 8:-2.42779,-0.98455 9:0.39883,0.378965 10:1.32133,0.86712 11:1.87572,0.95411 12:-2.22585,-0.976951 13:-2.04512,-0.96708 14:1.52652,0.909827 15:1.98228,0.962755 16:2.37265,0.982766 17:1.73726,0.939908 18:2.315,0.980679 19:-0.08135,-0.081154 20:1.39248,0.883717 21:1.5889,0.919981 -0.389856

(通常の) 予測ファイルの最初の 5 行は次のとおりです。

   -0.496912
   -0.588528
   -0.809399
   -0.494474
   -0.389856

この(通常の)出力を生の出力と集計しました。5 つの raw 行のそれぞれの (最後または) 終了 float 値が上記と同じであることに気付きました。

生の出力も通常の出力と理解していただきたいです。各行が 22 組の値を保持しているということは、22 個のニューロンと関係がありますか? 出力を [-1,1] として解釈する方法と、上記のいずれかを確率に変換するためにシグモイド関数が必要な理由。助けてくれてありがとう。

4

1 に答える 1

3

バイナリ分類では、適切な損失関数 (--loss_function=logisticまたは--loss_function=hinge) を使用する必要があります。スイッチは--binary、報告された損失が 0/1 損失であることを確認するだけです (ただし、0/1 損失を直接最適化することはできません。デフォルトの損失関数は です--loss_function=squared)。

--nnVW パラメータを調整する際の最後の手順の 1 つとして を試すことをお勧めします。通常、結果は少ししか改善されず、隠れ層の最適なユニット数は非常に少なくなります ( --nn 1--nn 2または--nn 3)。を使用して、入力レイヤーと出力レイヤーの間に直接接続を追加することもできます--inpass--nnは、隠れ層のシグモイド関数として常にtanhを使用し、可能な隠れ層は 1 つだけであることに注意してください(nn.cc でハードコーディングされています)。

確率 ([0,1] からの実数) を取得する場合は、 を使用しますvw -d test.vw -t -i neuralmodel --link=logistic -p probabilities.txt。出力を [-1,1] の実数にしたい場合は、 を使用します--link=glf1

--linkとがない--binary場合、--pred出力は内部予測です (ロジスティックまたはヒンジ損失関数が使用されている場合は [-50, 50] の範囲内)。

質問に関して--nn --rawは、あなたの推測は正しいです。22 組の数値は 22 個のニューロンに対応し、最後の数値は最終的な (内部) 予測です。私の推測では、各ペアは隠れ層の各ユニットのバイアスと出力に対応しています。

于 2015-03-02T12:58:46.217 に答える