Come gestire un mix di input binari e continui nelle reti neurali?


14

Sto usando il pacchetto nnet in R per tentare di costruire un ANN per prevedere i prezzi degli immobili per i condomini (progetto personale). Sono nuovo in questo e non ho una preparazione in matematica, quindi per favore spoglio con me.

Ho variabili di input che sono sia binarie che continue. Ad esempio alcune variabili binarie che erano originariamente sì / no sono state convertite in 1/0 per la rete neurale. Altre variabili sono continue come Sqft.

Esempio di dati di input

Ho normalizzato tutti i valori su una scala 0-1. Forse Bedroomse Bathroomsnon dovrebbe essere normalizzato poiché il loro intervallo è solo 0-4?

Questi input misti presentano un problema per la RNA? Ho ottenuto risultati soddisfacenti, ma a un esame più attento i pesi scelti dalla RNA per determinate variabili non sembrano avere senso. Il mio codice è sotto, qualche suggerimento?

ANN <- nnet(Price ~ Sqft + Bedrooms + Bathrooms + Parking2 + Elevator + 
            Central.AC + Terrace + Washer.Dryer + Doorman + Exercise.Room + 
            New.York.View,data[1:700,], size=3, maxit=5000, linout=TRUE, decay=.0001)

AGGIORNAMENTO: Sulla base dei commenti seguenti relativi alla suddivisione degli input binari in campi separati per ogni classe di valore, il mio codice ora appare come:

ANN <- nnet(Price ~ Sqft + Studio + X1BR + X2BR + X3BR + X4BR + X1Bath
        + X2Bath + X3Bath + X4bath + Parking.Yes + Parking.No + Elevator.Yes + Elevator.No 
        + Central.AC.Yes + Central.AC.No + Terrace.Yes + Terrace.No + Washer.Dryer.Yes 
        + Washer.Dryer.No + Doorman.Yes + Doorman.No + Exercise.Room.Yes + Exercise.Room.No 
        + New.York.View.Yes + New.York.View.No + Healtch.Club.Yes + Health.Club.No,
    data[1:700,], size=12, maxit=50000, decay=.0001)

I nodi nascosti nel codice sopra sono 12, ma ho provato una gamma di nodi nascosti da 3 a 25 e tutti danno risultati peggiori rispetto ai parametri originali che avevo sopra nel codice originale pubblicato. Ho anche provato con output lineare = vero / falso.

La mia ipotesi è che devo alimentare i dati in rete in modo diverso perché non interpreta correttamente l'input binario. O quello, o ho bisogno di dargli parametri diversi.

Qualche idea?


1
Il modo standard di utilizzare dati binari o categorici come input di reti neurali è di espandere il campo ai vettori di indicatori. Ad esempio, se avessi un campo che potrebbe assumere valori 1,2 o 3, allora un 1 verrebbe espanso in [1,0,0], 2 -> [0,1,0] e 3 -> [ 0,0,1]. Gli input con valori reali vengono generalmente mantenuti così come sono.
user1149913

1
Ora che lo dici, mi sembra di ricordare di averlo letto da qualche parte durante la mia ricerca di una risposta. Quindi, poiché la fonte di informazioni si trova su un file CSV, in realtà ho bisogno di aggiungere colonne per accogliere i nuovi campi per ogni input binario? Ad esempio, se l'input della camera da letto va da 0 a 4, usando l'esempio sopra creerei 4 colonne aggiuntive (in totale 5 poiché le camere da letto '0' significano studio) e un condominio 3BR sarebbe espresso come 0,0,0,1 , 0?
ChrisArmstrong,

Risposte:


8

Un modo per gestire questa situazione è ridimensionare gli input in modo che le loro variazioni siano approssimativamente sulla stessa scala. Questo consiglio è generalmente fornito per la modellazione della regressione, ma si applica davvero a tutte le situazioni di modellazione che coinvolgono variabili misurate su scale diverse. Questo perché la varianza di una variabile binaria è spesso abbastanza diversa dalla varianza di una variabile continua. Gelman e Hill (2006) raccomandano di riscalare input continui di due deviazioni standard per ottenere parità con input binari (non scalati). Questa raccomandazione si riflette anche in un post di carta e blog .

Una raccomandazione più specifica per le reti neurali è quella di utilizzare la "codifica degli effetti" per gli ingressi binari (ovvero -1 e 1) anziché la "codifica fittizia" (0 ​​e 1) e di compiere il passo aggiuntivo di centrare le variabili continue. Queste raccomandazioni provengono da un'ampia FAQ di Warren Sarle, in particolare le sezioni "Perché non codificare input binari come 0 e 1?" e "Devo standardizzare le variabili di input?" L'essenza, tuttavia, è la stessa:

Il contributo di un input dipenderà fortemente dalla sua variabilità rispetto ad altri input.

Per quanto riguarda le variabili categoriali non ordinate, è necessario suddividerle in indicatori binari. Semplicemente non sono significativi altrimenti.


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.