Comment configurer un réseau neuronal pour produire des données ordinales?


20

J'ai un réseau de neurones mis en place pour prédire quelque chose où la variable de sortie est ordinale. Je décrirai ci-dessous en utilisant trois sorties possibles A <B <C.

Il est assez évident de savoir comment utiliser un réseau de neurones pour produire des données catégorielles: la sortie est juste un softmax de la dernière couche (généralement entièrement connectée), une par catégorie, et la catégorie prédite est celle avec la plus grande valeur de sortie (c'est par défaut dans de nombreux modèles populaires). J'utilise la même configuration pour les valeurs ordinales. Cependant, dans ce cas, les sorties n'ont souvent pas de sens, par exemple les sorties réseau pour A et C sont élevées mais B est faible: ce n'est pas plausible pour les valeurs ordinales.

J'ai une idée pour cela, qui est de calculer la perte en comparant les sorties avec 1 0 0 pour A, 1 1 0 pour B et 1 1 1 pour C. Les seuils exacts peuvent être réglés plus tard en utilisant un autre classificateur (par exemple bayésien ), mais cela semble saisir l'idée essentielle d'un ordre des entrées, sans prescrire d'échelle d'intervalle spécifique.

Quelle est la manière standard de résoudre ce problème? Existe-t-il des recherches ou des références décrivant les avantages et les inconvénients de différentes approches?


1
J'ai obtenu beaucoup de résultats intéressants sur Google pour "régression logistique ordinale", par exemple, ce document
shadowtalker

@ssdecontrol: Intéressant. Je l'ai essayé; les résultats étaient meilleurs que de choisir la sortie avec la valeur la plus élevée mais légèrement pire que les autres méthodes (bayésienne naïve, etc.). C'est utile, mais ça n'aide pas à former le réseau, cela n'améliore que légèrement les résultats après coup ... ou du moins je ne vois pas comment faire pour aider à former le réseau.
Alex I

quel "ça" avez-vous essayé? Mon seul point est que le moteur de recherche pourrait être plus utile que vous ne le pensez
shadowtalker

De plus, je ne suis pas sûr de comprendre ce que vous entendez par "par exemple, les sorties réseau pour A et C sont élevées mais B est faible: ce n'est pas plausible". Vous voulez dire que vous prédisez beaucoup d'As et de Cs mais peu de Bs? Je ne vois pas pourquoi cela devrait être invraisemblable à moins que vous n'ayez une raison substantielle ou spécifique à un domaine de le penser
shadowtalker

Je ne sais pas non plus comment vous pourriez avoir une sortie comme "1 1 0". Je pense qu'il y a une certaine confusion sur la terminologie ici. Décrivez-vous les résultats ordinaux cumulatifs ? Comme dans un modèle logit cumulatif?
shadowtalker

Réponses:


15

KK

Mais certaines personnes ont réussi à inventer un encodage intelligent pour vos classes ordinales (voir cette réponse stackoverflow ). C'est une sorte d'encodage à chaud,

  • la classe 1 est représentée par [0 0 0 0 ...]

  • la classe 2 est représentée par [1 0 0 0 ...]

  • la classe 3 est représentée par [1 1 0 0 ...]

P(y^<k)np.sum

Cette stratégie ressemble à l'ensemble de Frank et Hall , et je pense que c'est la première publication de ce genre.


Cette approche semble beaucoup plus attrayante. Il est important de réaliser que l'utilisation de modes prédits pour en faire un problème de classification n'est pas une bonne idée. Les probabilités cumulatives prédites peuvent être transformées en probabilités individuelles prédites, de sorte que la fonction d'utilité pour prendre une décision finale peut être insérée beaucoup plus tard lorsque les services publics sont connus. Voir fharrell.com/post/classification .
Frank Harrell

1
@RicardoCruz - Hmm, cela ressemble beaucoup à ce que j'avais suggéré: "1 0 0 pour A, 1 1 0 pour B et 1 1 1 pour C". Bon à savoir, ça marche! Ouah, c'était un papier de 2007, cette idée existe depuis longtemps
Alex I

Ouais, j'ai été moi-même surpris quand j'ai trouvé ce papier!
Ricardo Cruz

Remarque: Comme indiqué dans "Une approche de réseau de neurones pour la régression ordinale": "... l'utilisation de fonctions sigmoïdes indépendantes pour les nœuds de sortie ne garantit pas la relation monotone (o1> = o2> = ....> = oK), qui est pas nécessaire mais souhaitable pour faire des prédictions. " Par conséquent, le simple fait d'effectuer un "np.sum" au moment de la prédiction n'est pas la meilleure méthode.
sccrthlt

1
Modifier mon commentaire ci-dessus: effectuer "np.sum" sur les sorties du réseau neuronal est trompeur. La situation suivante peut se produire lorsque le vecteur de sortie est [0 1 0 1 0]. Effectuer une sommation sur ce vecteur produirait une prédiction de classe de 2, alors qu'en fait le réseau neuronal n'est pas sûr.
sccrthlt
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.