Come configurare la rete neurale per l'output di dati ordinali?


20

Ho una rete neurale impostata per prevedere qualcosa in cui la variabile di output è ordinale. Descriverò di seguito usando tre possibili uscite A <B <C.

È abbastanza ovvio come utilizzare una rete neurale per l'output di dati categorici: l'output è solo un softmax dell'ultimo livello (generalmente completamente collegato), uno per categoria, e la categoria prevista è quella con il valore di output più grande (questo è impostazione predefinita in molti modelli popolari). Ho usato la stessa configurazione per i valori ordinali. Tuttavia, in questo caso le uscite spesso non hanno senso, ad esempio le uscite di rete per A e C sono alte ma B è bassa: questo non è plausibile per i valori ordinali.

Ho un'idea per questo, che è quella di calcolare la perdita sulla base del confronto delle uscite con 1 0 0 per A, 1 1 0 per B e 1 1 1 per C. Le soglie esatte possono essere sintonizzate successivamente utilizzando un altro classificatore (ad es. Bayesiano ) ma ciò sembra catturare l'idea essenziale di un ordinamento di input, senza prescrivere una scala di intervallo specifica.

Qual è il modo standard di risolvere questo problema? Esistono ricerche o riferimenti che descrivono i pro ei contro di diversi approcci?


1
Ho ottenuto molti successi interessanti su Google per "regressione logistica ordinale", ad esempio questo documento
Shadowtalker

@ssdecontrol: interessante. L'ho provato; i risultati sono stati migliori rispetto alla selezione dell'output con il valore più alto ma leggermente peggiore rispetto ad altri metodi (ingenuo bayesiano, ecc.). Questo è utile, ma non aiuta a formare la rete, migliora solo leggermente i risultati dopo il fatto ... o almeno non vedo come farlo per aiutare a formare la rete.
Alex I

quale "it" hai provato? Il mio unico punto è che il motore di ricerca potrebbe essere più utile di quanto ci si potrebbe aspettare
Shadowtalker

Inoltre non sono sicuro di capire cosa intendi con "per esempio le uscite di rete per A e C sono alte ma B è bassa: questo non è plausibile". Vuoi dire che stai predicendo molti As e C ma pochi Bs? Non vedo perché questo dovrebbe essere non plausibile a meno che tu non abbia ragioni sostanziali o specifiche del dominio per pensarlo
Shadowtalker

Inoltre non so come potresti mai avere un output come "1 1 0". Penso che ci sia un po 'di confusione sulla terminologia qui. Stai descrivendo cumulativi risultati ordinali? Come in un modello logit cumulativo?
Shadowtalker

Risposte:


15

KK

Ma alcune persone sono riuscite a inventare una codifica intelligente per le tue classi ordinali (vedi questa risposta StackOverflow ). È una sorta di codifica one-hot,

  • la classe 1 è rappresentata come [0 0 0 0 ...]

  • la classe 2 è rappresentata come [1 0 0 0 ...]

  • la classe 3 è rappresentata come [1 1 0 0 ...]

P(y^<k)np.sum

Questa strategia ricorda l'ensemble di Frank e Hall , e penso che questa sia la prima pubblicazione di questo.


Questo approccio sembra molto più attraente. È importante rendersi conto che utilizzare le modalità previste per trasformare questo in un problema di classificazione non è una buona idea. Le probabilità cumulative previste possono essere trasformate in probabilità individuali previste, quindi la funzione di utilità per prendere una decisione finale può essere inserita molto più tardi quando sono note le utilità. Vedi fharrell.com/post/classification .
Frank Harrell,

1
@RicardoCruz - Hmm, sembra molto simile a quello che avevo suggerito: "1 0 0 per A, 1 1 0 per B e 1 1 1 per C". Buono a sapersi che funziona! Caspita che era un documento del 2007, questa idea è in circolazione da molto tempo
Alex I

Sì, sono stato sorpreso da solo quando ho trovato quel foglio!
Ricardo Cruz,

Nota: come indicato in "Un approccio di rete Neurel alla regressione ordinale": "... l'uso di funzioni sigmoidali indipendenti per i nodi di output non garantisce la relazione monotonica (o1> = o2> = ....> = oK), che è non necessario ma, desiderabile per fare previsioni ". Pertanto, eseguire semplicemente un "np.sum" al momento della previsione non è il metodo migliore.
sccrthlt

1
Modifica al mio commento sopra: l'esecuzione di "np.sum" sulle uscite della rete neurale è fuorviante. Potrebbe verificarsi la seguente situazione in cui il vettore di output è [0 1 0 1 0]. L'esecuzione di una somma su questo vettore produrrebbe una previsione di classe pari a 2, quando in realtà la rete neurale non è sicura.
sccrthlt
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.