Jaringan Saraf Tiruan untuk Regresi Output Berganda

21

Saya memiliki dataset yang berisi 34 kolom input dan 8 kolom output.

Salah satu cara untuk memecahkan masalah adalah dengan mengambil 34 input dan membangun model regresi individual untuk setiap kolom output.

Saya bertanya-tanya apakah masalah ini dapat diselesaikan dengan hanya menggunakan satu model khususnya menggunakan Jaringan Saraf Tiruan.

Saya telah menggunakan Multilayer Perceptron tetapi itu membutuhkan banyak model seperti halnya regresi linier. Bisakah Sequence to Sequence menjadi opsi yang layak?

Saya menggunakan TensorFlow. Saya memiliki kode tetapi saya pikir lebih penting untuk memahami apa yang saya lewatkan dalam hal teori perceptron multilayer.

Saya mengerti bahwa dalam MLP jika Anda memiliki satu simpul keluaran, ia akan menyediakan satu keluaran. Jika Anda memiliki 10 node output maka itu adalah masalah multi-kelas. Anda memilih kelas dengan probabilitas tertinggi dari 10 output. Tetapi dalam kasus saya sudah pasti akan ada 8 output untuk input yang sama.

Katakanlah, untuk satu set input Anda akan mendapatkan koordinat 3D dari sesuatu (X, Y, Z). Seperti, Input = {1,10,5,7} Output = {1,2,1}. Jadi untuk input yang sama {1,10,5,7} saya perlu membuat model untuk nilai X nilai Y dan Z. Salah satu solusinya adalah memiliki 3 model yang berbeda menggunakan MLP. Tetapi saya ingin melihat apakah saya dapat memiliki satu model. Jadi saya berpikir tentang menggunakan seq2seq. Karena encoder mengambil serangkaian input dan decoder menyediakan serangkaian output. Tapi sepertinya seq2seq di tensorflow tidak bisa menangani nilai float. Saya bisa salah tentang ini.

sjishan
sumber
Anda tampaknya memiliki beberapa masalah dalam memahami model NN multilayer perceptron, dan juga TensorFlow - pernyataan Anda tentang ini tidak benar. Namun, tidak jelas mengapa Anda memiliki kesalahpahaman itu, yang berarti jawaban tidak dapat membantu Anda memperbaikinya. Memprediksi misalnya 8 keluaran regresi dalam model NN tunggal sepele mudah di sebagian besar kerangka kerja NN, tidak perlu urutan dalam kasus Anda. Jadi saya pikir mungkin penting untuk melihat pada apa paragraf terakhir Anda didasarkan untuk membantu Anda - dapatkah Anda menambahkan beberapa detail dari apa yang telah Anda lihat atau coba untuk sampai pada pemikiran itu?
Neil Slater
Apakah mungkin bagi Anda memberikan jawaban cara mendapatkan 8 hasil regresi menggunakan satu model NN tunggal? Terima kasih.
sjishan
Mungkin, jika Anda menjelaskan beberapa hal dengan mengedit pertanyaan Anda: 1) Dalam kerangka apa? 2) Apa kode Anda (atau desain, jika Anda tidak memiliki kode) sejauh ini? 3) Apa yang mencegah Anda melakukan ini sendiri? Saya perlu 1 dan 2 untuk membalas dengan sesuatu yang dapat Anda gunakan. Saya perlu 3 untuk memahami apa masalah Anda dan menjelaskan solusinya.
Neil Slater
1. Tensorflow. 2. Saya memiliki kode tetapi saya pikir lebih penting untuk memahami apa yang saya lewatkan dalam hal teori perceptron multilayer. Saya mengerti bahwa dalam MLP jika Anda memiliki satu simpul keluaran, ia akan menyediakan satu keluaran. Jika Anda memiliki 10 node output maka itu adalah masalah multi-kelas. Anda memilih kelas dengan probabilitas tertinggi dari 10 output. Tetapi dalam kasus saya sudah pasti akan ada 8 output untuk input yang sama. Biarkan saya menunjukkan contoh yang berbeda, Mari katakan, untuk satu set input Anda akan mendapatkan koordinat 3D dari sesuatu (X, Y, Z). Seperti, Input = {1,10,5,7} Output = {1,2,1}
sjishan
Jadi untuk input yang sama {1,10,5,7} saya perlu membuat model untuk nilai X nilai Y dan Z. Salah satu solusinya adalah memiliki 3 model yang berbeda menggunakan MLP. Tetapi saya ingin melihat apakah saya dapat memiliki satu model. Jadi saya berpikir tentang menggunakan seq2seq. Karena encoder mengambil serangkaian input dan decoder menyediakan serangkaian output. Tapi sepertinya seq2seq di tensorflow tidak bisa menangani nilai float. Saya bisa salah tentang ini.
sjishan

Jawaban:

14

Apa yang Anda gambarkan adalah regresi linier multidimensi normal. Jenis masalah ini biasanya ditangani dengan jaringan umpan-maju, baik MLP atau arsitektur lain yang sesuai dengan sifat masalah.

Setiap kerangka kerja jaringan saraf dapat melakukan sesuatu seperti itu.

Kunci untuk melakukannya adalah untuk mengingat bahwa lapisan terakhir harus memiliki aktivasi linier (yaitu tidak ada aktivasi sama sekali).

Sesuai kebutuhan Anda, bentuk lapisan input akan menjadi vektor (34,) dan output (8,).

Pembaruan : fungsi kerugian yang biasa digunakan untuk masalah regresi adalah mean squared error (MSE). Berikut ini adalah contoh dari regresi multidimensi menggunakan Keras ; jaringan bukan MLP tetapi harus OK untuk menggambarkan ide tersebut.

ncasas
sumber
1
Mungkin layak menambahkan garis tentang fungsi biaya biasa untuk regresi (mean square error) dan menunjuk pada contoh regresi TensorFlow - meskipun saya hanya menghabiskan 10 menit mencari satu sekarang dan tidak melihat apa-apa. . . (contoh beralih dari regresi linier ke pengklasifikasi MNIST, tetapi tidak ada model regresi MLP dasar).
Neil Slater
4

Anda dapat menerapkan ini dengan sangat sederhana di Python.
X Anda akan menjadi kumpulan koordinat pelatihan x, y, z.
Y Anda akan menjadi kumpulan pengujian x, y, z koordinat.

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')
John Quanasama
sumber
0

Ini jauh lebih mudah daripada yang Anda kira - Anda bisa mengatur layer output Anda menjadi vektor, bukan skalar tunggal. Tentu saja tidak ada keajaiban di sini dan saya menyarankan Anda untuk menyiapkan data Anda (melakukan normalisasi batch sehingga semua output akan bernilai antara 0 dan 1).

Jika Anda menggunakan Keras, cara untuk melakukannya adalah dengan menambahkan lapisan padat sebagai lapisan keluaran akhir: model.add(Dense(8, activation='linear'))

Nissim
sumber