O aumento do número de recursos resulta em queda de precisão, mas aumento de prec / recall

15

Eu sou novo no Machine Learning. No momento, estou usando um classificador Naive Bayes (NB) para classificar textos pequenos em 3 classes como positivos, negativos ou neutros, usando NLTK e python.

Depois de realizar alguns testes, com um conjunto de dados composto de 300.000 instâncias (16.924 positivos 7.477 negativos e 275.599 neutros), descobri que, quando aumento o número de recursos, a precisão diminui, mas a precisão / recuperação para classes positivas e negativas aumenta. esse é um comportamento normal para um classificador NB? Podemos dizer que seria melhor usar mais recursos?

Alguns dados:

Features: 50    
Accuracy: 0.88199
F_Measure Class Neutral 0.938299
F_Measure Class Positive 0.195742
F_Measure Class Negative 0.065596

Features: 500   
Accuracy: 0.822573
F_Measure Class Neutral 0.904684
F_Measure Class Positive 0.223353
F_Measure Class Negative 0.134942

Desde já, obrigado...

Editar 26/11/2011

Testei três estratégias diferentes de seleção de recursos (MAXFREQ, FREQENT, MAXINFOGAIN) com o classificador Naive Bayes. Primeiro, aqui estão as medidas de precisão e F1 por classe:

insira a descrição da imagem aqui

Em seguida, plotei o erro de trem e o erro de teste com um conjunto de treinamento incremental, ao usar MAXINFOGAIN com os 100 principais e os 1000 principais recursos:

insira a descrição da imagem aqui

Então, parece-me que, embora a mais alta precisão seja alcançada com o FREQENT, o melhor classificador é aquele que usa MAXINFOGAIN, isso é certo ? Ao usar os 100 principais recursos, temos um viés (o erro de teste está próximo do erro de treinamento) e adicionar mais exemplos de treinamento não ajudará. Para melhorar isso, precisaremos de mais recursos. Com 1000 recursos, o viés é reduzido, mas o erro aumenta ... Tudo bem? Devo precisar adicionar mais recursos? Eu realmente não sei como interpretar isso ...

Obrigado novamente...

kanzen_master
fonte
1
Depende do que você quer dizer com "melhor classificador", se sua tarefa for criar um classificador com boa precisão geral, eu escolheria FREQENT. Por outro lado, se, como na maioria das tarefas raras de classificação de classe, você quiser classificar melhor a classe rara (que poderia ser a classe "negativa" ou a "positiva"), eu escolheria MAXINFOGAIN. Eu acho que a interpretação das suas curvas de aprendizado está correta: com 100 recursos, você tem viés e pode adicioná-los, com 1000, você tem variação e pode removê-los. Talvez você possa fazer uma troca entre 100 e 1000 recursos para obter melhores resultados.
Simone
Obrigado pela sua ajuda, Simone! Eu entendi tudo, menos a última parte ... Você poderia me dizer como vê a alta variação com os 1000 recursos? Como a diferença entre os erros de teste e comboios não parece ser que muito ainda se parece com viés para mim ...
kanzen_master
Eu coloquei alguns exemplos na minha resposta. Quando as curvas não estão tão próximas, o problema é classificado como com alta variação . No seu caso, talvez eu tenha lhe dito isso porque, com menos recursos, você obtém melhores desempenhos e, portanto, com 1000 recursos, é provável que seja um problema de alta variação. Em vez de plotar os resultados dos algoritmos de seleção de recursos com medidas calculadas no conjunto de treinamento, tente dividir seus dados em treinamento (2/3 deles) e validação, depois execute a seleção de recursos no conjunto de treinamento e avalie-o no conjunto de teste . Você deve encontrar um máximo no meio da trama.
Simone
Obrigado pela resposta. O terceiro exemplo de sua postagem atualizada (bom resultado, trem, curvas de erro de teste não é nem muito próximo nem muito longe) se parece com a curva de aprendizado que plotei usando 1000 recursos, então pensei que usar cerca de 1000 recursos seria um "bom resultado". No entanto, neste caso, o erro é maior, o que não é bom. Mas, apenas olhando para a distância entre as curvas, não consigo ver alta variação com 1000 recursos ... (A propósito, eu já estou dividindo os dados em 2/3 como conjunto de treinamento, 1/3 como conjunto de teste, executando o recurso seleção no conjunto de treinamento e avaliação do conjunto de teste ...)
kanzen_master
1
ESTÁ BEM. Eu sou muito novo em aprender curvas e seus exemplos foram realmente interessantes e me fizeram ter uma ideia sobre eles. Assim, obrigado D T. Sim, pode haver viés em ambos os casos. De acordo com mim, você tem um conjunto de dados muito distorcido e, em vez de testar a precisão, é importante dar uma olhada no F-measure. Analisando suas tramas, parece que quanto mais recursos você tiver, melhor será; de fato, a medida F melhora. Ouvi dizer que na classificação de texto, se os recursos são a palavra frequência no seu texto, é comum usar muitos recursos; btw eu não estou acostumado com isso e não posso te dizer mais.
Simone

Respostas:

18

Precisão vs medida F

Primeiro de tudo, quando você usa uma métrica, deve saber como jogar. A precisão mede a proporção de instâncias classificadas corretamente em todas as classes. Isso significa que, se uma classe ocorre com mais frequência do que outra, a precisão resultante é claramente dominada pela precisão da classe dominante. No seu caso, se alguém construir um Modelo M que apenas predizer "neutro" para cada instância, a precisão resultante será

acc=neutral(neutral+positive+negative)=0,9188

Bom, mas inútil.

Portanto, a adição de recursos melhorou claramente o poder do NB de diferenciar as classes, mas, ao prever "positivo" e "negativo", um erro classifica os neutros e, portanto, a precisão diminui (grosso modo). Esse comportamento é independente do NB.

Mais ou menos recursos?

Em geral, não é melhor usar mais recursos, mas usar os recursos certos. Mais recursos é melhor na medida em que um algoritmo de seleção de recursos tem mais opções para encontrar o subconjunto ideal (sugiro explorar: seleção de recursos com validação cruzada ). No que diz respeito ao NB, uma abordagem rápida e sólida (mas menos que ótima) é usar o InformationGain (Ratio) para classificar os recursos em ordem decrescente e selecionar os k principais.

Novamente, este conselho (exceto InformationGain) é independente do algoritmo de classificação.

EDIT 27.11.11

Houve muita confusão em relação ao viés e variação para selecionar o número correto de recursos. Por isso, recomendo a leitura das primeiras páginas deste tutorial: tradeoff Bias-Variance . A essência principal é:

  • Viés alto significa que o modelo está abaixo do ideal, ou seja, o erro de teste é alto (menos adequado, como Simone coloca)
  • Alta variação significa que o modelo é muito sensível à amostra usada para construir o modelo . Isso significa que o erro depende muito do conjunto de treinamento usado e, portanto, a variação do erro (avaliada em diferentes dobras de validação cruzada) será extremamente diferente. (sobreajuste)

As curvas de aprendizado plotadas indicam de fato o viés, pois o erro é plotado. No entanto, o que você não pode ver é a variação, pois o intervalo de confiança do erro não é plotado.

Exemplo: ao executar uma validação cruzada de três vezes 6 vezes (sim, é recomendável repetir com particionamento de dados diferente, Kohavi sugere 6 repetições), você obtém 18 valores. Eu agora esperaria que ...

  • Com um pequeno número de recursos, o erro médio (viés) será menor, no entanto, a variação do erro (dos 18 valores) será maior.
  • com um número alto de recursos, o erro médio (viés) será maior, mas a variação do erro (dos 18 valores) será menor.

Esse comportamento do erro / viés é exatamente o que vemos em seus gráficos. Não podemos fazer uma declaração sobre a variação. O fato de as curvas estarem próximas umas das outras pode ser uma indicação de que o conjunto de testes é grande o suficiente para mostrar as mesmas características do conjunto de treinamento e, portanto, que o erro medido pode ser confiável, mas isso é (pelo menos tanto quanto eu entendi não é suficiente para fazer uma declaração sobre a variação (do erro!).

Ao adicionar mais e mais exemplos de treinamento (mantendo o tamanho do conjunto de testes fixo), eu esperaria que a variação de ambas as abordagens (número pequeno e alto de recursos) diminua.

Ah, e não se esqueça de calcular o infogain para a seleção de recursos usando apenas os dados da amostra de treinamento! É tentado usar os dados completos para a seleção de recursos e, em seguida, executar o particionamento de dados e aplicar a validação cruzada, mas isso levará ao sobreajuste. Não sei o que você fez, este é apenas um aviso que nunca se deve esquecer.

Steffen
fonte
1
Muito obrigado pela sua resposta, explicação muito clara. Estou usando o ganho máximo de informações como minha estratégia de seleção de recursos e testando usando a validação cruzada de 5 vezes. Eu acho que, para saber quais os principais recursos de k que devo usar, eu preciso testar iterativamente o algoritmo, aumentando o número de recursos a cada vez e pegando o k que fornece o maior f_score. No entanto, acho que é provável que "top k" mude dependendo do conjunto de dados ... certo?
kanzen_master
1
Corrigir. Mas se o novo conjunto de dados for semelhante ao antigo (os mesmos recursos com as mesmas distribuições), k permanecerá o mesmo. Você pode adicionar um algoritmo genético para pesquisar o espaço de possíveis soluções mais rapidamente ou (ainda melhor) usar um algoritmo genético para encontrar o subconjunto de recursos ideal independente do InformationGain ... tantas maneiras de percorrer.
Steffen
1
De acordo com as palestras de Stanford, se você observar curvas de treinamento e teste bem separadas variando o número de exemplos de treinamento, na verdade isso significa que há variação. Obviamente, uma abordagem melhor seria estimar os intervalos de confiança.
Simone
1
@DT 1. Não conheço a palestra, portanto não consigo conectar a explicação de Andrewg à minha, desculpe. 2. Não. Pequeno número de recursos => sobreajuste => viés baixo, alta variação. Alto número de recursos => underfitting => viés alto, baixa variação. Eu realmente sugiro traçar a variação do erro das dobras de CV para diferentes números de recursos e exemplos de treinamento.
Steffen
2
1. steffen, a palestra está disponível aqui: ml-class.org/course/video/preview_list (parte X, seção "Curvas de aprendizado") 2. Entendo. Eu estava pensando que quando muitos recursos aprendidos durante o treinamento => o modelo fica complexo e supera o conjunto de treinamento => Variação ...
kanzen_master
5

Para saber se é útil usar mais recursos, traçaria as curvas de aprendizado. Acho que isso está claramente explicado na 10ª unidade da classe Machine Learning de Stanford, denominada "Aconselhar para aplicar o aprendizado de máquina", que você pode encontrar aqui: http://www.ml-class.org/course/video/preview_list .

Traçando curvas de aprendizado, você pode entender se o seu problema é o alto viés ou a alta variação. Desde que você aumente o número de exemplos de treinamento, plote o erro de treinamento e o erro de teste (ou seja, precisão 1), este último é o erro do seu classificador estimado em um conjunto de dados diferente. Se essas curvas estiverem próximas uma da outra, você tem um problema de alta polarização e provavelmente seria benéfico inserir mais recursos. Por outro lado, se suas curvas estiverem bastante separadas, desde que você aumente o número de exemplos de treinamento, você terá um problema de alta variação. Nesse caso, você deve diminuir o número de recursos que está usando.

Editar

Vou adicionar alguns exemplos de curvas de aprendizado. Estas são curvas de aprendizado obtidas com uma regressão logística regularizada. Gráficos diferentes estão relacionados a diferentesλ

λ , temos sobreajuste, portanto alta variação .

Alta variação

λ com underfitting, portanto, alto viés .

Viés alto

λ=1

Bom resultado

Simone
fonte
Ótimo! Muito obrigado! Como as duas respostas foram realmente úteis, mas não posso marcar as duas como respostas, vou marcar a primeira como a resposta. Mas esta é definitivamente a melhor maneira de verificar, eu acho.
kanzen_master
A propósito, estou tentando traçar a curva de aprendizado de um classificador que usa os 100 principais recursos com a pontuação máxima de ganho de informação. Ao aumentar o tamanho do conjunto de dados de treinamento, quero plotar erro de treinamento e erro de teste. Quais devem ser os tamanhos para o conjunto inicial de dados do trem (a ser aumentado gradualmente) e para o conjunto de dados de teste (estático para todos os testes)? Obrigado mais uma vez ...
kanzen_master
2
Divida seu conjunto de dados em um conjunto de treinamento e um conjunto de teste. Comece com muito poucos registros de treinamento e continue a adicionar registros. Para cada iteração, calcule o erro do conjunto de treinamento com os registros que você usou para treinar seu classificador e, em seguida, calcule o erro do conjunto de testes sempre com todos os registros de teste. Eu sei que este é um método padrão usado na prática comum. Seria interessante ver seus resultados! Saúde, Simone.
Simone
1
Simone, atualizei o primeiro post com alguns resultados de precisão, medidas de F1 e curvas de aprendizado, e minha interpretação no final, você poderia conferir? Obrigado ...
kanzen_master