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)?
Respostas:
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.
fonte
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.
fonte
É 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.
fonte
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.
fonte