私は問題を解決するためにニューラルネットワークを使用しようとしています。私はCourseraで提供されている機械学習コースからそれらについて学び、FANNがニューラルネットワークのRuby実装であることを知ってうれしく思いました。そのため、飛行機を再発明する必要はありませんでした。
しかし、なぜFANNが私にそのような奇妙な出力を与えているのか私は本当に理解していません。クラスで学んだことに基づいて、
試合の結果であるトレーニングデータのセットがあります。プレーヤーには番号が与えられ、対戦相手には番号が与えられ、結果は勝ちの場合は1、負けの場合は0になります。データは混乱のために少しうるさいですが、それほどひどくはありません。私の目標は、どのレーティングギャップが混乱しやすいかを見つけることです。たとえば、私の直感では、レーティングの精度が低いため、レーティングの低い一致はより多くの混乱を伴う傾向があることがわかります。
そこで、約100例のトレーニングセットを入手しました。各例は(評価、デルタ)=>1/0です。したがって、これは分類の問題ですが、ロジスティック回帰タイプのグラフに適しているとは思いません。ニューラルネットワークの方が正しいように見えました。
私のコードが始まります
training_data = RubyFann::TrainData.new(:inputs => inputs, :desired_outputs => outputs)
次に、ニューラルネットワークを設定します
network = RubyFann::Standard.new(
:num_inputs=>2,
:hidden_neurons=>[8, 8, 8, 8],
:num_outputs=>1)
クラスでは、合理的なデフォルトは、各隠れ層に同じ数のユニットを持たせることであることを学びました。私はこれをどのように行うか、または私がまだ何をしているのか本当にわからないので、デフォルトを使用しました。
network.train_on_data(training_data, 1000, 1, 0.15)
そして最後に、一連のサンプル入力評価を段階的に調べ、各段階でデルタを増やして、結果が> 0.5から<0.5に切り替わるまで、実際には約0と約1になりました。 0.45や0.55のように。
これを1回実行すると、すべての入力に対して0が返されました。同じデータでもう一度2回実行したところ、負の数の減少傾向と正の数の増加傾向が得られました。これは、まったく逆の予測です。
十分な機能が含まれていないのではないかと思ったので、(rating**2
とdelta**2
)を追加しました。残念ながら、その後、毎回、すべての入力に対して開始デルタまたは最大デルタのいずれかを取得し始めました。
なぜこのような異なる結果が得られるのか、Ruby-FANNが何を言っているのか、私にはよくわかりません。これは、ライブラリを理解していないこともありますが、ニューラルネットワークについて学び始めたばかりで、何かが足りないためだと思います。大きくて明白です。十分なトレーニングデータがありませんか?より多くの機能を含める必要がありますか、問題は何ですか?それを修正するか、より良い方法を学ぶにはどうすればよいですか?