Precisão do teste maior que o treinamento. Como interpretar?


23

Eu tenho um conjunto de dados contendo no máximo 150 exemplos (divididos em treinamento e teste), com muitos recursos (acima de 1000). Preciso comparar classificadores e métodos de seleção de recursos com bom desempenho nos dados. Então, eu estou usando três métodos de classificação (J48, NB, SVM) e 2 métodos de seleção de recursos (CFS, WrapperSubset) com diferentes métodos de pesquisa (Greedy, BestFirst).

Ao comparar, estou analisando a precisão do treinamento (dobra cruzada 5 vezes) e a precisão do teste.

Aqui está um dos resultados do J48 e CFS-BestFirst:

{"precisionTraining": 95,83, "precisionTest": 98,21}

Muitos resultados são assim, e no SVM existem muitos resultados que indicam que a precisão do teste é muito maior que o treinamento (treinamento: 60%, teste: 98%)

Como posso interpretar significativamente esse tipo de resultado? Se fosse mais baixo, eu diria que é super adaptável. Há algo a ser dito sobre viés e variação neste caso, observando todos os resultados? O que posso fazer para tornar essa classificação significativa, como re-selecionar conjuntos de treinamento e teste ou apenas usar validação cruzada em todos os dados?

Tenho 73 treinamentos e 58 instâncias de teste. Algumas respostas não tinham essa informação quando foram publicadas.

Respostas:


20

Acho que o primeiro passo é verificar se o treinamento e o desempenho dos testes relatados estão de fato corretos.

  • A divisão durante a validação cruzada de 5 vezes é feita de uma maneira que produz conjuntos cv de trem / teste estatisticamente independentes? Por exemplo, se houver medições repetidas nos dados, elas sempre terminam no mesmo conjunto?
  • A precisão de 95,83% em um cv 5 vezes maior que 150 amostras está alinhada com 5 erradas de 130 amostras de treinamento para os 5 modelos substitutos ou 25 casos errados para 5 * 130 amostras de treinamento.
  • A precisão do teste de 98,21% é mais difícil de explicar: durante uma execução do CV, cada caso deve ser testado uma vez. Portanto, os números possivelmente relatados devem estar em etapas de 100% / 150. 98,21% corresponde a 2,68 casos errados (2 e 3 errados em 150 casos de teste fornecem 98,67 e 98,00% de precisão, respectivamente).

  • Se você pode extrair seu modelo, calcule as precisões relatadas externamente.

  • Quais são as precisões relatadas para entrada aleatória?
  • Faça uma validação cruzada externa: divida seus dados e entregue apenas a parte de treinamento ao programa. Preveja os dados de teste "externos" e calcule a precisão. Isso está alinhado com a saída do programa?
  • Certifique-se de que a "precisão do teste" relatada seja proveniente de dados independentes (validação cruzada dupla / aninhada): se o seu programa faz otimização orientada a dados (por exemplo, escolhendo os "melhores" recursos ao comparar vários modelos), isso é mais parecido com erro de treinamento (bondade de ajuste) do que como um erro de generalização.

Concordo com o @mbq que o erro de treinamento quase nunca é útil no aprendizado de máquina. Mas você pode estar em uma das poucas situações em que é realmente útil: se o programa seleciona um modelo "melhor" comparando precisões, mas possui apenas erros de treinamento para escolher, é necessário verificar se o erro de treinamento realmente permite uma análise sensata. escolha.
O @mbq descreveu o melhor cenário para modelos indistinguíveis. No entanto, também ocorrem situações piores: assim como a precisão do teste, a precisão do treinamento também está sujeita a variações, mas possui um viés otimista em comparação com a precisão da generalização que geralmente é de interesse. Isso pode levar a uma situação em que os modelos não podem ser distinguidos, embora tenham realmente um desempenho diferente. Mas suas precisões de treinamento (ou CV interno) são muito próximas para distingui-las devido ao seu viés otimista. Por exemplo, os métodos iterativos de seleção de recursos podem estar sujeitos a problemas que podem até persistir nas precisões internas da validação cruzada (dependendo de como essa validação cruzada é implementada).

Portanto, se esse problema surgir, acho uma boa idéia verificar se uma escolha sensata pode resultar das precisões que o programa usa para a decisão. Isso significaria verificar se a precisão interna da cv (que é supostamente usada para a seleção do melhor modelo) não é ou não muito otimista em relação a uma cv feita externamente com divisão estatisticamente independente. Novamente, dados sintéticos e / ou aleatórios podem ajudar a descobrir o que o programa realmente faz.

Um segundo passo é verificar se as diferenças observadas para as divisões estatisticamente independentes são significativas, como o @mbq já apontou.

Sugiro que você calcule qual diferença de precisão você precisa observar com o tamanho de amostra especificado para obter uma diferença estatisticamente significativa. Se a variação observada for menor, não será possível decidir qual algoritmo é melhor com o conjunto de dados fornecido: otimização adicional não faz sentido.


Há ótimas informações aqui para digerir. Em primeiro lugar, lamento não ter fornecido os números exatos, pois não esperava que você chegasse a números tão detalhados e também queria me concentrar em apenas um tópico. de qualquer forma, tenho 73 dados de treinamento e 58 de teste. estes não são estatisticamente separados, eles foram tirados por mim em momentos diferentes. As amostras de treinamento são primeiramente coletadas no algoritmo de seleção de recurso (o método wrapper fs também possui cv interno de 5 vezes) e, em seguida, 5 vezes e a melhor precisão é obtida e o modelo é salvo. e esse modelo é usado para calcular a precisão do teste.
Ercu

16

A precisão de um conjunto de treinamento não faz sentido no aprendizado de máquina. Ignore isto.


obrigado! Eu tenho muitos resultados com a mesma melhor precisão de teste, então não posso comparar os resultados agora (eu também consideraria a precisão do treinamento para comparar se você não disse isso :). então, em vez de dividir para teste e treinamento, a validação cruzada múltipla em todos os conjuntos de dados é mais apropriada para o meu caso comparar os resultados? ou preciso de outra métrica?
21413 ercu

1
CV é certamente uma boa ideia; de qualquer forma, observe que pode haver vários "melhores" algoritmos ou conjuntos de parâmetros (no sentido de que eles fornecem a mesma precisão ou estatisticamente indistinguível do melhor caso) - isso também não é um problema. Melhor ainda, isso significa que você está obtendo resultados estáveis ​​- um ótimo resultado pode sugerir que você ajustou demais o modelo pelos parâmetros de escolha da cereja.

8
É útil conhecer a precisão do conjunto de treinamento para estimar a quantidade de sobreajuste que seu algoritmo preditivo realizou (calculando a diferença de precisão entre os conjuntos de treinamento e teste).
precisa

Você poderia explicar o porquê?
inf

1
Por definição, os métodos de ML são sobre desempenho em dados não vistos, portanto, eles não dão garantias sobre esse resultado (não se espera que o modelo reimplemente o mecanismo subjacente aos dados, como na modelagem estatística). Na prática, muitos métodos dão previsões excessivamente precisas, portanto são apenas enganosas.

6

Existem alguns problemas sérios na maneira como você resolveu isso. Primeiro, a divisão de dados não é confiável, a menos que o tamanho total da amostra seja enorme. Você obteria resultados diferentes se dividir novamente. Entre outras coisas, você não está considerando intervalos de confiança nas estimativas de precisão. Segundo, a validação cruzada 5 vezes não é suficientemente precisa. Pode ser necessário repeti-lo 100 vezes para obter uma precisão adequada. Terceiro, você escolheu como pontuação de precisão uma regra descontínua de pontuação imprópria (proporção classificada corretamente). Uma regra de pontuação inadequada levará à seleção do modelo errado.


3

Supondo que não haja falhas na implementação dos algoritmos, vejamos o problema.

Imagine pegar um pequeno subconjunto dos dados de treinamento e executar o algoritmo de aprendizado nele. Obviamente, vai se sair muito bem. Sempre é possível extrair um subconjunto que atinge quase 98% de precisão.

Agora, seus dados de teste são muito semelhantes a este subconjunto? Se sim, você precisa coletar mais dados, espero que um pouco mais variados. Do ponto de vista da polarização-variação, eu diria que sua variação é alta.


1

Você tem muitos recursos (1000) para o número de amostras que você tem (150). Você precisa aumentar suas amostras ou diminuir seu número de recursos.

Dizem que geralmente o número de recursos ^ 2 = número de amostras necessárias. Então você precisa de pelo menos milhões de amostras.


0

Isso pode acontecer usando qualquer algoritmo de ML e até classificadores personalizados. Tente diferentes esquemas de validação cruzada com dobras k, ou seja, 2 ou 10 vezes. Com k mais alto, espera-se que o erro de teste seja reduzido.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.