Come combinare funzioni di input categoriche e continue per l'addestramento della rete neurale


16

Supponiamo di avere due tipi di funzionalità di input, categoriche e continue. I dati categorici possono essere rappresentati come un codice di scelta rapida A, mentre i dati continui sono solo un vettore B nello spazio N-dimensione. Sembra che usare semplicemente concat (A, B) non sia una buona scelta perché A, B sono tipi di dati totalmente diversi. Ad esempio, a differenza di B, non esiste un ordine numerico in A. Quindi la mia domanda è come combinare questi due tipi di dati o esiste un metodo convenzionale per gestirli.

In effetti, propongo una struttura ingenua come presentata nella foto

inserisci qui la descrizione dell'immagine

Come vedi, i primi pochi livelli vengono utilizzati per modificare (o mappare) i dati A in un output intermedio nello spazio continuo e vengono quindi concessi con i dati B che formano una nuova funzionalità di input nello spazio continuo per i livelli successivi. Mi chiedo se sia ragionevole o sia solo un gioco di "tentativi ed errori". Grazie.

Risposte:


5

Esistono tre approcci principali per risolvere questo problema:

  1. Costruire due modelli separatamente e quindi formare un algoritmo ensemble che riceve l'output dei due modelli come input
  2. Concatenare tutti i dati in un singolo vettore / tensore come fase di preelaborazione e quindi addestrare un singolo input NN semplice
  3. L'architettura NN a input multiplo che hai proposto

L'approccio dell'ensemble è l'opzione più semplice e produrrà risultati decenti, tuttavia, non funzionerà bene come l'opzione che hai proposto perché la rete dell'ensemble riceve solo le probabilità di classe dalle due reti come input e sarà in confronto alla tua l'approccio perde relazioni più complesse tra i tipi di dati.

Il secondo approccio non è in teoria così diverso dal tuo approccio proposto, con la differenza che presume che la rete capirà da sola che l'input è costituito da due tipi di dati (poiché sono entrambi nello stesso vettore / tensore ). Ci vorrà molto tempo per l'addestramento perché la rete lo impari e potresti rimanere bloccato in un minimo locale prima ancora che ciò accada.

In base alla mia esperienza personale, la rete che hai proposto è l'opzione migliore in quanto è probabile che abbia il tempo di treno più breve e una volta che hai l'architettura giusta troverai molto facile addestrare e mantenere (riqualificare) la rete in produzione e dovrai riqualificare un solo modello.



0

Ho usato la struttura ingenua proposta da te ormai da un po 'di tempo. In un problema ben strutturato e con dati sufficienti, questo tipo di architettura funziona abbastanza bene. Tuttavia, ecco alcune cose che ho imparato:

  1. Gli algoritmi basati su alberi (RF, XGB) generalmente funzionano bene con classi miste a meno che tu non abbia alcuni requisiti di output specifici o una funzione di perdita che è più facile da implementare tramite reti neurali.
  2. Se si decide di utilizzare la rete neurale, questa architettura funziona meglio rispetto ad altri tipi di modi di codifica delle stringhe.
  3. Questo approccio funziona anche con dati di serie temporali di input misti, molto meglio di qualsiasi approccio di serie storiche classico.

Il design chiave sarebbe lo strato di concatenazione e dove vorresti inserirlo nell'architettura. Anche l'uso dei livelli di incorporamento offre ulteriori vantaggi nell'utilizzare tali incorporamenti appresi in alcune altre attività / visualizzazioni.

Questo tipo di architettura è stato utilizzato nelle competizioni di Kaggle [1] ed è anche insegnato nel corso Fast.ai dal Prof. Jeremy Howard [2].

  1. https://yashuseth.blog/2018/07/22/pytorch-neural-network-for-tabular-data-with-categorical-embeddings/
  2. https://www.fast.ai/2019/01/24/course-v3/
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.