Baixa precisão de classificação, o que fazer em seguida?

16

Então, eu sou um novato no campo ML e tento fazer alguma classificação. Meu objetivo é prever o resultado de um evento esportivo. Reuni alguns dados históricos e agora tente treinar um classificador. Eu obtive cerca de 1200 amostras, 0,2 delas foram separadas para fins de teste, outras colocadas na pesquisa de grade (validação cruzada incluída) com diferentes classificadores. Eu tentei SVM com kernels lineares, rbf e polinominais e florestas aleatórias até o momento. Infelizmente, não consigo obter precisão significativamente maior que 0,5 (o mesmo que escolha aleatória de classe). Isso significa que simplesmente não posso prever o resultado de um evento tão complexo? Ou posso obter pelo menos 0,7-0,8 de precisão? Se for possível, o que devo procurar em seguida?

  • Obter mais dados? (Eu posso aumentar o conjunto de dados até 5 vezes)
  • Tente classificadores diferentes? (Regressão logística, kNN, etc)
  • Reavaliar meu conjunto de recursos? Existem ferramentas de ML para analisar, quais recursos fazem sentido e quais não? Talvez eu deva reduzir meu conjunto de recursos (atualmente tenho 12 recursos)?
fspirit
fonte
Qual é a precisão do seu treinamento? E quantas amostras você tem em cada classe?
Leo
1
Que esporte é esse e o que você considera uma classificação "correta"? Se você está simplesmente tentando prever um resultado de vitória / perda em praticamente qualquer esporte importante, é quase inconcebível que mesmo o mais simples dos classificadores não preveja melhor que 0,5. Por exemplo, se você está tentando prever vitória / perda contra um spread ou outro resultado deficiente, pode ser muito melhor que 0,5.
cardeal
A precisão do @Leo Training é de cerca de 0,5. As classes são uniformemente distribuído, que tem classes 0 e 1.
fspirit
@ cardinal Sim, tento prever o resultado da vitória / perda, sem desvantagens. É possível alcançar, digamos, precisão de 0,8 no conjunto de teste?
Fspirit 29/09/12
1
@fspirit: Isso depende do esporte e da desigualdade de habilidades entre os participantes, por um lado. Saber quem está participando de cada concurso pode ser um forte preditor. Aqui e aqui estão algumas postagens relacionadas.
cardeal

Respostas:

17

Primeiro de tudo, se o seu classificador não se sair melhor do que uma escolha aleatória, existe o risco de simplesmente não haver conexão entre os recursos e a classe. Uma boa pergunta para se fazer nessa posição é se você ou um especialista em domínio pode inferir a classe (com uma precisão maior que um classificador aleatório) com base em determinados recursos. Se não, obter mais linhas de dados ou alterar o classificador não ajudará. O que você precisa fazer é obter mais dados usando recursos diferentes.

Se, por outro lado, você acha que as informações necessárias para inferir a classe já estão nos rótulos, verifique se o seu classificador sofre de um problema de alto viés ou alta variação.

Para fazer isso, faça um gráfico do erro de validação e do conjunto de treinamento, como uma função dos exemplos de treinamento.

Se as linhas parecerem convergir para o mesmo valor e fecharem no final, seu classificador terá um viés alto e adicionar mais dados não ajudará. Uma boa idéia, neste caso, é alterar o classificador para um que tenha maior variação ou simplesmente diminuir o parâmetro de regularização do seu atual.

Se, por outro lado, as linhas estiverem bastante afastadas e você tiver um erro baixo no conjunto de treinamento, mas um erro alto de validação, seu classificador terá uma variação muito alta. Nesse caso, obter mais dados provavelmente ajudará. Se, após obter mais dados, a variação ainda for muito alta, você poderá aumentar o parâmetro de regularização.

Estas são as regras gerais que eu usaria ao enfrentar um problema como o seu.

Felicidades.

sjm.majewski
fonte
Você quis dizer erro de conjunto de validação e erro de conjunto de TESTE? Caso contrário, estou confuso. Eu nem sei o erro do conjunto de trens, porque eu uso o erro do conjunto de validação para escolher o modelo e eles verificam o modelo selecionado no conjunto de teste.
Fspirit 29/09/12
Não, quero dizer erro do conjunto de treinamento onde está escrito. O erro de treinamento é o número de exemplos mal classificados no conjunto de treinamento dividido pelo tamanho do conjunto de treinamento. Da mesma forma, o erro do conjunto de testes é o número de exemplos mal classificados no conjunto de testes dividido pelo tamanho do conjunto de treinamento. Além disso, convém verificar a aula de aprendizado de máquina do Coursera ( class.coursera.org/ml-2012-002/lecture/index ), especialmente vídeos para "Dicas para aplicar o aprendizado de máquina". Esses conselhos são bastante relevantes para a sua situação.
Sjm.majewski 29/09/12
Eu participei do curso, quando foi realizado pela primeira vez. Quanto ao erro conjunto de treinamento, agora eu de saída também, para SVM sua bastante elevada - 0,5, mas para florestas aleatórias sua 0.
fspirit
5

Eu sugeriria dar um passo atrás e fazer algumas análises exploratórias de dados antes de tentar a classificação. Vale a pena examinar seus recursos individualmente para ver se há alguma relação com o resultado do interesse - pode ser que os recursos que você possui não tenham nenhuma associação com os rótulos das turmas. Como você sabe se os recursos que você possui serão de alguma utilidade?

Você pode começar fazendo testes de hipóteses ou análises de correlação para testar relacionamentos. A geração de histogramas específicos de classe para recursos (por exemplo, plotagem de histogramas dos dados para cada classe, para um determinado recurso no mesmo eixo) também pode ser uma boa maneira de mostrar se um recurso discrimina bem entre as duas classes.

É importante lembrar, embora não permita que os resultados de sua análise exploratória influenciem suas escolhas para classificação. A escolha de recursos para classificação com base em uma análise exploratória anterior nos mesmos dados, pode levar a estimativas de desempenho excessivamente ajustadas e tendenciosas (consulte a discussão aqui ), mas uma análise exploratória fornecerá pelo menos uma idéia de se a tarefa que você está tentando executar é uniforme. possível.

BGreene
fonte
Vou tentar desenhar os histogramas e ver como eles serão.
Fspirit 29/09/12
@BGreene - seu terceiro parágrafo é difícil para mim. Se a análise exploratória mostrar que o preditor x1 está altamente correlacionado com o resultado, não seria derrotado o objetivo de verificar essa correlação se não se usasse x1 como pelo menos um candidato a preditor em um modelo multivariado?
Rolando2 29/09/12
@ rolando2 - Não estou sugerindo que você não inclua o recurso como candidato como parte de uma rotina de seleção de recursos, mas não deve escolher recursos com base em uma análise exploratória, pois isso será superajustado. No entanto, para fins de avaliação do desempenho generalizado de um modelo classificador, a seleção de recursos deve ser feita dentro da rotina de seleção de modelos (ou seja, dentro de cada dobra da validação cruzada). O que estou sugerindo é que a análise exploratória e classificação devem ser tratados como atividades separadas - cada um lhe diz coisas diferentes sobre os seus dados
BGreene
3

É bom que você tenha separado seus dados nos dados de treinamento e de teste.

Seu erro de treinamento diminuiu quando você treinou? Caso contrário, você pode ter um erro no seu algoritmo de treinamento. Você espera que o erro no seu conjunto de testes seja maior que o erro no seu conjunto de treinamento; portanto, se você tiver um erro inaceitavelmente alto no seu conjunto de treinamento, haverá pouca esperança de sucesso.

Livrar-se dos recursos pode evitar alguns tipos de sobreajuste. No entanto, isso não deve melhorar o erro no seu conjunto de treinamento. Um erro baixo no seu conjunto de treinamento e um erro alto no seu conjunto de testes podem ser uma indicação de que você se superestima usando um conjunto de recursos excessivamente flexível. No entanto, é mais seguro verificar isso através da validação cruzada do que no seu conjunto de testes. Depois de selecionar seu conjunto de recursos com base no seu conjunto de testes, ele não é mais válido como um conjunto de testes.

Douglas Zare
fonte
Eu uso conjuntos separados de trem, validação e teste. Seleciono hiperparâmetros com base no erro do conjunto de validação e aplico o modelo selecionado ao conjunto de testes. Duvido que exista um erro no algoritmo de treinamento, porque uso a biblioteca pronta para uso.
Fspirit 29/09/12
50%
Na possibilidade "recursos são terríveis", incluo o caso de que não há solução possível. No entanto, duvido muito disso. Sei que não existe esporte onde não haja maneiras de ver que um competidor é um favorito em detrimento de outro. É até possível em pedra-papel-tesoura.
Douglas Zare
1

Por que não seguir o princípio "observe primeiro os gráficos". Uma coisa que você pode fazer é um gráfico de dispersão em 2 D das duas densidades condicionais de classe para duas covariáveis. Se você olhar para eles e praticamente não houver separação que possa indicar falta de previsibilidade, poderá fazê-lo com todas as covariáveis. Isso fornece algumas idéias sobre a capacidade de usar essas covariáveis ​​para prever. Se você vê alguma esperança de que essas variáveis ​​possam se separar um pouco, comece a pensar em discriminantes lineares, discriminantes quadráticos, discriminação de kernel, regularização, classificação em árvore, SVM etc.

Michael R. Chernick
fonte
Desculpe, hum, é covariável == recurso?
Fspirit 29/09/12