Rete neurale per regressione multipla


21

Ho un set di dati contenente 34 colonne di input e 8 colonne di output.

Un modo per risolvere il problema è prendere i 34 input e creare un modello di regressione individuale per ciascuna colonna di output.

Mi chiedo se questo problema possa essere risolto utilizzando un solo modello, in particolare utilizzando Neural Network.

Ho usato il multistrato Perceptron ma questo ha bisogno di più modelli come la regressione lineare. Sequence to Sequence può essere un'opzione praticabile?

Sto usando TensorFlow. Ho un codice ma penso che sia più importante capire cosa mi sto perdendo in termini di teoria del percettrone multistrato.

Capisco che in MLP se hai un nodo di output fornirà un output. Se hai 10 nodi di output, allora si tratta di un problema multi classe. Scegli la classe con la più alta probabilità tra le 10 uscite. Ma nel mio caso è certo che ci saranno 8 uscite per lo stesso ingresso.

Diciamo che per un set di input otterrai la coordinata 3D di qualcosa (X, Y, Z). Come, input = {1,10,5,7} output = {1,2,1}. Quindi per lo stesso input {1,10,5,7} ho bisogno di creare modelli per il valore X valore Y e Z. Una soluzione è avere 3 modelli diversi usando MLP. Ma vorrei vedere se posso avere un modello. Quindi ho pensato di usare seq2seq. Perché l'encoder accetta una serie di input e il decoder fornisce una serie di output. Ma sembra che seq2seq in tensorflow non sia in grado di gestire i valori float. Posso sbagliarmi su questo però.


Sembra che tu abbia dei problemi nel comprendere il modello NN perceptron multistrato e anche il TensorFlow - le tue affermazioni al riguardo sono errate. Tuttavia, non è chiaro il motivo per cui hai questo malinteso, il che significa che una risposta non può aiutarti a risolvere questo problema. Prevedere ad esempio 8 output di regressione in un singolo modello NN è banalmente facile nella maggior parte dei framework NN, senza necessità di sequenze nel tuo caso. Quindi penso che potrebbe essere importante guardare su cosa si basa il tuo ultimo paragrafo per aiutarti - potresti aggiungere qualche dettaglio di ciò che hai visto o provato per venire a questi pensieri?
Neil Slater,

Sarebbe possibile fornire una risposta su come ottenere 8 output di regressione utilizzando un singolo modello NN? Grazie.
sjishan,

Probabilmente, se spieghi alcune cose modificando la tua domanda: 1) In quale framework? 2) Qual è il tuo codice (o design, se non hai un codice) finora? 3) Cosa ti impedisce di farlo da solo? Ho bisogno di 1 e 2 per rispondere con qualcosa che puoi usare. Ho bisogno di 3 per capire qual è il tuo problema e spiegare la soluzione.
Neil Slater,

1. Tensorflow. 2. Ho un codice ma penso che sia più importante capire cosa mi sto perdendo in termini di teoria del percettrone multistrato. Capisco che in MLP se hai un nodo di output fornirà un output. Se hai 10 nodi di output, allora si tratta di un problema multi classe. Scegli la classe con la più alta probabilità tra le 10 uscite. Ma nel mio caso è certo che ci saranno 8 uscite per lo stesso ingresso. Permettetemi di mostrare un esempio diverso, diciamo, per una serie di input otterrete la coordinata 3D di qualcosa (X, Y, Z). Like, Inputs = {1,10,5,7} Output = {1,2,1}
sjishan,

Quindi per lo stesso input {1,10,5,7} ho bisogno di creare modelli per il valore X valore Y e Z. Una soluzione è avere 3 modelli diversi usando MLP. Ma vorrei vedere se posso avere un modello. Quindi ho pensato di usare seq2seq. Perché l'encoder accetta una serie di input e il decoder fornisce una serie di output. Ma sembra che seq2seq in tensorflow non sia in grado di gestire i valori float. Posso sbagliarmi su questo però.
sjishan,

Risposte:


14

Quello che stai descrivendo è una normale regressione lineare multidimensionale. Questo tipo di problema viene normalmente risolto con una rete feed-forward, MLP o qualsiasi altra architettura adatta alla natura del problema.

Qualsiasi framework di reti neurali è in grado di fare qualcosa del genere.

La chiave per farlo è ricordare che l'ultimo strato dovrebbe avere attivazioni lineari (cioè nessuna attivazione).

Secondo le vostre esigenze, la forma del livello di input sarebbe un vettore (34,) e l'output (8,).

Aggiornamento : la normale funzione di perdita utilizzata per i problemi di regressione è l'errore quadratico medio (MSE). Ecco un esempio di regressione multidimensionale usando Keras ; la rete non è un MLP ma dovrebbe essere OK per illustrare l'idea.


1
Probabilmente vale la pena aggiungere una riga sulla normale funzione di costo per la regressione (errore quadratico medio) e puntare all'esempio di regressione di TensorFlow - anche se ho appena trascorso 10 minuti a cercarne uno ora e non ho visto nulla. . . (gli esempi passano dalla regressione lineare ai classificatori MNIST, ma nessun modello di regressione MLP di base).
Neil Slater,

4

Puoi implementarlo molto semplicemente in Python.
La tua X sarà la raccolta delle coordinate di allenamento x, y, z.
La tua Y sarà la raccolta di test delle coordinate 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

Questo è molto più semplice di quanto pensi: puoi semplicemente impostare il tuo livello di output in modo che sia un vettore anziché un singolo scalare. Ovviamente non c'è magia qui intorno e ti consiglio di preparare i tuoi dati (esegui la normalizzazione batch in modo che tutti gli output abbiano valori compresi tra 0 e 1).

Se stai usando Keras, il modo per farlo è quello di aggiungere un livello denso come livello di output finale: model.add(Dense(8, activation='linear'))

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.