多重出力回帰のためのニューラルネットワーク


21

34の入力列と8つの出力列を含むデータセットがあります。

この問題を解決する1つの方法は、34の入力を取得し、各出力列に対して個別の回帰モデルを構築することです。

特にニューラルネットワークを使用して、この問題を1つのモデルだけで解決できるかどうか疑問に思っています。

多層パーセプトロンを使用しましたが、線形回帰のように複数のモデルが必要です。Sequence to Sequenceは実行可能なオプションですか?

TensorFlowを使用しています。コードはありますが、多層パーセプトロン理論の観点から見落としていることを理解することがより重要だと思います。

MLPでは、1つの出力ノードがある場合、1つの出力を提供することを理解しています。10個の出力ノードがある場合、それはマルチクラスの問題です。10個の出力の中から最も確率の高いクラスを選択します。しかし、私の場合、同じ入力に対して8つの出力があることは確かです。

たとえば、入力のセットに対して、何か(X、Y、Z)の3D座標を取得するとしましょう。同様に、入力= {1,10,5,7}出力= {1,2,1}。したがって、同じ入力{1,10,5,7}に対して、X値Y値とZのモデルを作成する必要があります。1つの解決策は、MLPを使用して3つの異なるモデルを作成することです。しかし、私は1つのモデルを持つことができるかどうかを見たいです。そこで、seq2seqの使用を考えました。エンコーダは一連の入力を受け取り、デコーダは一連の出力を提供するためです。しかし、テンソルフローのseq2seqはfloat値を処理できないようです。私はこれについて間違っている可能性があります。


多層パーセプトロンNNモデル、およびTensorFlowの理解に問題があるようです-これらについての記述は正しくありません。しかし、なぜそのような誤解があるのか​​は明確ではありません。つまり、答えがこれを修正するのを助けることができないことを意味します。単一のNNモデルで例えば8つの回帰出力を予測することは、ほとんどのNNフレームワークで簡単に行え、シーケンスは必要ありません。それで、あなたの助けになるためにあなたの最後のパラグラフが何に基づいているのかを見ることが重要かもしれないと思います。
ニールスレーター

1つのNNモデルを使用して8つの回帰出力を取得する方法について回答を提供できますか?ありがとう。
sjishan

おそらく、質問を編集していくつかのことを説明した場合:1)どのフレームワークですか?2)これまでのコード(またはコードがない場合は設計)は何ですか?3)これを自分で行うことを妨げているのは何ですか?使用できるものを返信するには1と2が必要です。あなたの問題が何であるかを理解し、解決策を説明するために3が必要です。
ニールスレーター

1.テンソルフロー。2.コードはありますが、多層パーセプトロン理論の観点から見落としていることを理解することがより重要だと思います。MLPでは、1つの出力ノードがある場合、1つの出力を提供することを理解しています。10個の出力ノードがある場合、それはマルチクラスの問題です。10個の出力の中から最も確率の高いクラスを選択します。しかし、私の場合、同じ入力に対して8つの出力があることは確かです。別の例を示しましょう。入力のセットについて、何か(X、Y、Z)の3D座標を取得します。同様に、入力= {1,10,5,7} OUTPUT = {1,2,1}
sjishan

したがって、同じ入力{1,10,5,7}に対して、X値Y値とZのモデルを作成する必要があります。1つの解決策は、MLPを使用して3つの異なるモデルを作成することです。しかし、私は1つのモデルを持つことができるかどうかを見たいです。そこで、seq2seqの使用を考えました。エンコーダは一連の入力を受け取り、デコーダは一連の出力を提供するためです。しかし、テンソルフローのseq2seqはfloat値を処理できないようです。私はこれについて間違っている可能性があります。
sjishan

回答:


14

説明しているのは、通常の多次元線形回帰です。このタイプの問題は、通常、フィードフォワードネットワーク(MLPまたは問題の性質に合った他のアーキテクチャ)で対処されます。

どのニューラルネットワークフレームワークでも、そのようなことができます。

それを行うための鍵は、最後のレイヤーに線形のアクティベーションが必要であることを思い出すことです(つまり、アクティベーションはまったくありません)。

要件に応じて、入力レイヤーの形状はベクトル(34、)および出力(8、)になります。

更新:回帰問題に使用される通常の損失関数は、平均二乗誤差(MSE)です。ここでは「を使用して多次元回帰の例■ Kerasを。ネットワークはMLPではありませんが、アイデアを説明するためにOKである必要があります。


1
おそらく、回帰(平均二乗誤差)の通常のコスト関数に関する行を追加し、TensorFlow回帰の例をポイントする価値があります。。。(線形回帰からMNIST分類器へのスキップ例はありますが、基本的なMLP回帰モデルはありません)。
ニールスレーター

3

これはPythonで非常に簡単に実装できます。
Xは、トレーニングのx、y、z座標のコレクションになります。
Yは、テストのx、y、z座標のコレクションになります。

from sklearn import cross_validation                     
from sklearn.neural_network import MLPRegressor   

model = MLPRegressor(solver='lbfgs',alpha=0.001,hidden_layer_sizes=(150,))
cross_validation.cross_val_score(model, X, Y,scoring='mean_squared_error')

0

これは思っているよりもずっと簡単です-出力レイヤーを単一のスカラーではなくベクトルに設定するだけです。もちろん、ここには魔法はありません。データを準備することをお勧めします(すべての出力が0〜1の値になるようにバッチ正規化を実行します)。

Kerasを使用している場合、これを行う方法は、最終出力レイヤーとして密なレイヤーを追加することです。 model.add(Dense(8, activation='linear'))

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.