Como configurar uma rede neural para gerar dados ordinais?

20

Eu tenho uma rede neural configurada para prever algo em que a variável de saída é ordinal. Descreverei abaixo usando três saídas possíveis A <B <C.

É bastante óbvio como usar uma rede neural para gerar dados categóricos: a saída é apenas um softmax da última camada (geralmente totalmente conectada), uma por categoria, e a categoria prevista é a que possui o maior valor de saída (isso é o padrão em muitos modelos populares). Eu tenho usado a mesma configuração para valores ordinais. No entanto, nesse caso, as saídas geralmente não fazem sentido; por exemplo, as saídas de rede para A e C são altas, mas B é baixa: isso não é plausível para valores ordinais.

Eu tenho uma idéia para isso, que é calcular a perda com base na comparação das saídas com 1 0 0 para A, 1 1 0 para B e 1 1 1 para C. Os limites exatos podem ser ajustados posteriormente usando outro classificador (por exemplo, Bayesiano). ), mas isso parece capturar a ideia essencial de uma ordem de entradas, sem prescrever nenhuma escala de intervalo específica.

Qual é a maneira padrão de resolver esse problema? Existe alguma pesquisa ou referência que descreva os prós e contras de diferentes abordagens?

Alex I
fonte
1
Eu tenho muitos hits interessantes no Google por "regressão logística ordinal", por exemplo, esse papel
shadowtalker
@ssdecontrol: Interessante. Eu tentei; os resultados foram melhores do que escolher a saída com o valor mais alto, mas um pouco pior que outros métodos (bayesiano ingênuo, etc.). Isso é útil, mas não ajuda a treinar a rede, apenas melhora ligeiramente os resultados após o fato ... ou pelo menos não vejo como fazê-lo ajudar a treinar a rede.
Alex I
qual "você" tentou? Meu único ponto é que o motor de busca poderia ser mais útil do que você poderia esperar
shadowtalker
Também não sei ao certo o que você entende por "por exemplo, as saídas de rede para A e C são altas, mas B é baixa: isso não é plausível". Quer dizer que você está prevendo muitos As e Cs, mas poucos Bs? Eu não vejo por que deveria ser improvável a menos que você tem razão substantiva ou de domínio específico de pensar assim
shadowtalker
Eu também não sei como você poderia ter uma saída como "1 1 0". Eu acho que há alguma confusão sobre terminologia aqui. Você está descrevendo resultados ordinais cumulativos ? Como em um modelo de logit cumulativo?
shadowtalker

Respostas:

15

Acredito que o que a maioria das pessoas faz é simplesmente tratar a classificação ordinal como uma classificação multi-classe genérica. Portanto, se eles tiverem classes , terão saídas K e simplesmente usarão uma função de ativação sigmóide (não a softmax obviamente) e a entropia cruzada binária como perda.KK

Mas algumas pessoas conseguiram inventar uma codificação inteligente para suas classes ordinais (consulte esta resposta do stackoverflow ). É uma espécie de codificação one-hot,

  • classe 1 é representada como [0 0 0 0 ...]

  • classe 2 é representada como [1 0 0 0 ...]

  • classe 3 é representada como [1 1 0 0 ...]

ou seja, cada neurónio é prever a probabilidade . Você ainda precisa usar um sigmóide como função de ativação, mas acho que isso ajuda a rede a entender alguma continuidade entre as classes, não sei. Depois, você faz um pós-processamento ( ) para converter a saída binária em suas classes.P(y^<k)np.sum

Essa estratégia se assemelha ao conjunto de Frank e Hall , e acho que esta é a primeira publicação de tais.

Ricardo Cruz
fonte
Essa abordagem parece muito mais atraente. É importante perceber que o uso dos modos previstos para transformar isso em um problema de classificação não é uma boa ideia. As probabilidades cumulativas previstas podem ser transformadas em probabilidades individuais previstas e, portanto, a função de utilidade para tomar uma decisão final pode ser inserida muito mais tarde quando os utilitários são conhecidos. Consulte fharrell.com/post/classification .
precisa saber é o seguinte
1
@RicardoCruz - Hmm, isso parece muito com o que eu havia sugerido: "1 0 0 para A, 1 1 0 para B e 1 1 1 para C". É bom saber que funciona! Também wow que era um papel a partir de 2007, essa idéia tem sido em torno de um longo tempo
Alex I
Sim, fiquei surpreso quando encontrei esse papel!
Ricardo Cruz
Nota: Conforme declarado em "Uma abordagem de rede Neurel à regressão ordinal": "... o uso de funções sigmóides independentes para nós de saída não garante a relação monotônica (o1> = o2> = ....> = oK), que é não é necessário, mas desejável para fazer previsões ". Portanto, apenas executar um "np.sum" no momento da previsão não é o melhor método.
precisa
1
Edite para o meu comentário acima: A execução de "np.sum" nas saídas da rede neural é enganosa. A seguinte situação pode surgir onde o vetor de saída é [0 1 0 1 0]. Realizar uma soma neste vetor produziria uma previsão de classe de 2, quando, na verdade, a rede neural é incerta.
precisa