Digamos que eu queira treinar um classificador que atribua uma imagem de uma pessoa jovem , de meia-idade ou velha .
Uma maneira simples seria tratar as classes como categorias independentes e treinar um classificador. Mas, aparentemente, há algum relacionamento entre as classes, como posso usar isso para melhorar?
Estou pensando que talvez eu possa fazer
1) alterar a perda, dizer aumentar a perda de prever jovem como idade ou idade como jovem .
2) transformá-lo em um problema de regressão, jovens , de meia-idade e idosos são representados como digamos 0, 1 e 2.
Respostas:
Parece uma abordagem razoável.
Depende do aluno de regressão que você está empregando, mas isso pode ser uma péssima idéia (árvores e derivados provavelmente estariam seguros contra isso, por exemplo). Você tem certeza de que a "distância" (o que quer que isso signifique) entre jovens e meia-idade é a mesma que entre meia-idade e velha?
Como você está aprendendo variáveis nominais, eu recomendo que você trate esse problema como classificação. Mais especificamente, como você sabe, há um relacionamento latente entre classes, classificação ordinal.
Você pode tentar a estratégia proposta por Frank & Hall [1], onde você codificar seu variável resposta a problemas binários. Então, você tenta aprender a distinção entre velhos e não-velhos e jovens e não-jovens, e eles realmente fornecem informações sobre as três categorias. Essa é uma heurística realmente simples que pode superar a abordagem ingênua de várias classes e não altera o funcionamento sublinhado dos alunos.N N−1
[1] Frank, E., & Hall, M. (2001, setembro). Uma abordagem simples para a classificação ordinal. Na Conferência Europeia sobre Aprendizado de Máquina (pp. 145-156). Springer Berlin Heidelberg.
fonte
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:
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:
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} k yk<0.5 k
Método 3: Transformando a classificação em regressão
Esta é a mesma ideia que a sua segunda. O mapeamento aqui seria:
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:
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.
fonte