Eu vi isso recentemente com um classificador de rede neural convolucional trabalhando com seis classes ordinais. Eu tentei três métodos diferentes:
Método 1: Classificação independente padrão
Isso é o que você mencionou como linha de base na pergunta, com o mapeamento:
class 0 -> [1, 0, 0, 0, 0, 0]
class 1 -> [0, 1, 0, 0, 0, 0]
class 2 -> [0, 0, 1, 0, 0, 0]
class 3 -> [0, 0, 0, 1, 0, 0]
class 4 -> [0, 0, 0, 0, 1, 0]
class 5 -> [0, 0, 0, 0, 0, 1]
Normalmente, usaríamos a ativação softmax e a perda cruzada categórica com isso.
No entanto, como você diz, isso não leva em conta o relacionamento entre as classes, de modo que a função de perda é afetada apenas se você atinge a classe certa ou não, e não é afetada pela sua proximidade.
Método 2: função de destino ordinal
Essa é uma abordagem publicada por Cheng et al. (2008) , que também foi referido no StackExchange aqui e aqui . O mapeamento é agora:
class 0 -> [0, 0, 0, 0, 0]
class 1 -> [1, 0, 0, 0, 0]
class 2 -> [1, 1, 0, 0, 0]
class 3 -> [1, 1, 1, 0, 0]
class 4 -> [1, 1, 1, 1, 0]
class 5 -> [1, 1, 1, 1, 1]
Isso é usado com uma ativação sigmóide e perda de entropia cruzada binária. Essa função de destino significa que a perda é menor quanto mais perto você chegar da classe certa.
Você pode prever uma classe a partir da saída deste classificador localizando o primeiro índice que . então fornece a classe prevista.{yk}kyk<0.5k
Método 3: Transformando a classificação em regressão
Esta é a mesma ideia que a sua segunda. O mapeamento aqui seria:
class 0 -> [0]
class 1 -> [1]
class 2 -> [2]
class 3 -> [3]
class 4 -> [4]
class 5 -> [5]
Eu usei uma ativação linear e perda de erro ao quadrado médio com isso. Como a abordagem anterior, isso também oferece uma perda menor, menos você perde.
Ao prever uma classe com base na saída disso, você pode simplesmente arredondar a saída para o número inteiro mais próximo.
Alguns exemplos de resultados
Avaliei os diferentes métodos com o mesmo conjunto de dados. As métricas eram precisão precisa (atingindo a classe correta) e precisão adjacente (atingindo a classe correta ou um de seus vizinhos), nas versões desequilibrada e equilibrada. Cada valor de métrica mostrado abaixo é encontrado como a média de três execuções.
Para o Método 1 / Método 2 / Método 3, as métricas forneceram:
- Precisão precisa desequilibrada: 0,582 / 0,606 / 0,564
- Precisão precisa equilibrada: 0.460 / 0.499 / 0.524
- Desequilibrada precisão adjacente: 0,827 / 0,835 / 0,855
- Equilibrado precisão adjacente: 0,827 / 0,832 / 0,859
Assim, para meu conjunto de dados e configuração de rede específicos, a abordagem de regressão geralmente faz o melhor, e a abordagem padrão com classes independentes geralmente faz o pior. Não sei até que ponto esses resultados se generalizam para outros casos, mas não deve ser tão difícil adaptar qualquer classificador ordinal para poder usar todos os três métodos para que você possa testar por si mesmo.