コンテキスト:私は、それぞれに2つの関連する確率値を持つ一連のドキュメントを持っています:クラスAに属する確率またはクラスBに属する確率です。クラスは相互に排他的です。確率は1になる。したがって、例えば文書Dは、地面の真理として関連付けられる確率(0.6、0.4)を有する。ニューラルネットワーク回帰予測のカットオフ
各文書は、0から1に正規化された用語のtfidfで表されます。私はdoc2vec(正規化された形式-1から1)と他のいくつかの方法を試しました。
私はこの確率分布を予測する非常に単純なニューラルネットワークを構築しました。多くのノードを有する
- 入力層ソフトマックスと
- 単一の隠れ層
- ノード一つと出力層と2つのノードがありますよう
- クロスエントロピー損失関数Iは、異なる更新機能を試み 学習率
これはnolearnを使用して書いたコードです:
net = nolearn.lasagne.NeuralNet(
layers=[('input', layers.InputLayer),
('hidden1', layers.DenseLayer),
('output', layers.DenseLayer)],
input_shape=(None, X_train.shape[1]),
hidden1_num_units=1,
output_num_units=2,
output_nonlinearity=lasagne.nonlinearities.softmax,
objective_loss_function=lasagne.objectives.binary_crossentropy,
max_epochs=50,
on_epoch_finished=[es.EarlyStopping(patience=5, gamma=0.0001)],
regression=True,
update=lasagne.updates.adam,
update_learning_rate=0.001,
verbose=2)
net.fit(X_train, y_train)
y_true, y_pred = y_test, net.predict(X_test)
私の予測にはカットオフポイントがあり、予測値はそのポイントを下回っていません(私の意図を理解するために画像をチェックしてください)。 This plot shows the difference between the true probability and my predictions。ポイントが赤線に近ければ近いほど予測は良くなります。理想的には、すべての点がライン上にあるでしょう。私はこれをどのように解決できますか?なぜこれが起こっていますか?
編集:実際に私は単に隠れ層除去することによって、問題を解決:
net = nolearn.lasagne.NeuralNet(
layers=[('input', layers.InputLayer),
('output', layers.DenseLayer)],
input_shape=(None, X_train.shape[1]),
output_num_units=2,
output_nonlinearity=lasagne.nonlinearities.softmax,
objective_loss_function=lasagne.objectives.binary_crossentropy,
max_epochs=50,
on_epoch_finished=[es.EarlyStopping(patience=5, gamma=0.0001)],
regression=True,
update=lasagne.updates.adam,
update_learning_rate=0.001,
verbose=2)
net.fit(X_train, y_train)
y_true, y_pred = y_test, net.predict(X_test)
をしかし、私はまだ、私はこの問題と、なぜ隠された層を除去することは、それを解決していた理由を理解することができません。何か案は?ここで
新しいプロット:私はあなたのトレーニングセットの出力値は、[0,1]または[1,0]であるべきだと思う
なぜそれが問題になるのかわかりません。私が知る限り、ソフトマックスの出力は1つを加算し、クロスエントロピーは2つの確率分布の差を測定します。 –