A seleção de recursos deve ser realizada apenas nos dados de treinamento (ou todos os dados)?

10

A seleção de recursos deve ser realizada apenas nos dados de treinamento (ou todos os dados)? Passei por algumas discussões e artigos como Guyon (2003) e Singhi e Liu (2006) , mas ainda não tenho certeza sobre a resposta certa.

Minha configuração da experiência é a seguinte:

  • Conjunto de dados: 50 controles saudáveis ​​e 50 pacientes com doenças (recursos do cca 200 que podem ser relevantes para a previsão da doença).
  • A tarefa é diagnosticar doenças com base nos recursos disponíveis.

O que eu faço é

  1. Pegue um conjunto de dados inteiro e execute a seleção de recursos (FS). Eu mantenho apenas os recursos selecionados para processamento adicional
  2. Divida para testar e treinar, treine o classificador usando dados de trem e recursos selecionados. Em seguida, aplique o classificador para testar os dados (novamente usando apenas os recursos selecionados). A validação de deixar um fora é usada.
  3. obter precisão de classificação
  4. Média: repita 1) -3) N vezes. (100).N=50.

Concordo que fazer FS em um conjunto de dados inteiro pode apresentar algum viés, mas minha opinião é que ele é "calculado em média" durante a média (etapa 4). Isso está correto? (A variação da precisão é )<2%

1 Guyon, I. (2003) "Uma Introdução à Seleção de Variáveis ​​e Recursos", The Journal of Machine Learning Research, vol. 3, pp. 1157-1182
2 Singhi, SK e Liu, H. (2006) "Viés de seleção de subconjuntos de recursos para aprendizado de classificação", continuação da ICML '06 Anais da 23ª conferência internacional sobre aprendizado de máquina, pp. 849-856

pedro29
fonte

Respostas:

12

O procedimento que você está usando resultará em estimativas de desempenho otimistas, porque você usa os dados do conjunto de testes usado nas etapas 2 e 3 para decidir quais recursos serão usados ​​na etapa 1. A repetição do exercício reduz a variação da estimativa de desempenho, não a viés, então o viés não será calculado em média. Para obter uma estimativa de desempenho imparcial, os dados de teste não devem ser utilizados de forma alguma para fazer escolhas sobre o modelo, incluindo a seleção de recursos.

Uma abordagem melhor é usar a validação cruzada aninhada, para que a validação cruzada externa forneça uma estimativa do desempenho obtido usando um método de construção do modelo (incluindo seleção de recurso) e a validação cruzada interna seja usada para selecionar os recursos independentemente em cada dobra da validação cruzada externa. Em seguida, construa seu modelo preditivo final usando todos os dados.

Como você tem mais recursos do que casos, é muito provável que você ajuste demais os dados simplesmente pela seleção de recursos. É um mito que a seleção de recursos melhore o desempenho preditivo; portanto, se é nisso que você está interessado (em vez de identificar os recursos relevantes como um fim em si mesmo), provavelmente será melhor usar a regressão de crista e não executar nenhum recurso seleção. Isso provavelmente fornecerá melhor desempenho preditivo do que a seleção de recursos, desde que o parâmetro cume seja selecionado com cuidado (eu uso a minimização da estatística PRESS de Allen - ou seja, a estimativa do erro quadrático médio).

Para mais detalhes, consulte Ambroise e McLachlan , e minha resposta a esta pergunta .

Dikran Marsupial
fonte
Obrigado pela resposta. Na verdade, estou interessado em ambos, para encontrar os recursos relevantes e melhorar o desempenho preditivo. Nos meus experimentos (SVM para classificação), a seleção de recursos melhorou significativamente a precisão da previsão (no entanto, como você observou, isso pode ser resultado de um ajuste excessivo dos dados). Presumo que, por regressão de cordilheira, você quer dizer algo conhecido também como regularização de Tikhonov?
pedro29
sim, a regressão de crista é apenas regressão linear normal com um termo de penalidade baseado na norma quadrática dos pesos. Para a maioria dos problemas, ele funciona tão bem quanto o SVM, mas é mais fácil de implementar (e você pode resolver o erro de validação cruzada de exclusão única, essencialmente de graça, que pode ser usado para ajustar os hiperparâmetros).
Dikran Marsupial
a propósito, qual é a diferença entre regularização de cume e seleção de recurso? Quero dizer, no final do dia, ambos indicam "o melhor subconjunto" de preditores de um determinado conjunto de preditores.
pedro29
A regressão de cume não identifica um subconjunto de recursos, a forma de regressão penalizada LASSO ou LARS. Essa seria a minha escolha do método de seleção de recursos, pois é menos suscetível a ajustes excessivos, pois o termo de penalidade impõe uma ordem nos recursos que entram e saem do modelo, para que haja menos graus de liberdade do que apenas procurar exaustivamente o melhor conjunto de opções. recursos.
Dikran Marsupial
3

Apenas como um adendo às respostas aqui, tenho dois links que realmente me ajudaram a entender por que esse não é um bom procedimento:

Editar: conforme solicitado, uma breve explicação do conteúdo dos links:

Suponha que eu esteja treinando um classificador e possua um conjunto de dados de 1000 amostras, com 1 milhão de recursos cada. Não posso processar todos eles, por isso preciso de menos recursos (por exemplo, posso calcular 300 recursos). Também tenho um conjunto de testes de 100 amostras para estimar com precisão minha precisão fora da amostra no mundo real.

Se eu filtrar meus 1 milhão de recursos até 300, selecionando esses recursos com uma correlação mais alta com os alvos de todo o conjunto de dados, cometi um erro (porque estou introduzindo um overfitting que não pode ser detectado posteriormente pela Validação Cruzada). Meu conjunto estendido mostrará isso devolvendo um valor de precisão ruim.

De acordo com os links acima, a maneira correta de fazer isso é dividir meu conjunto de dados em um conjunto de treinamento e um conjunto de Validação Cruzada e, em seguida, ajustar meu modelo (filtrando recursos, etc.) com base nesse conjunto de treinamento e na pontuação de CV associada. Se eu estiver usando dobras em K, devo ajustar do zero toda vez que fizer uma divisão / dobra e, em seguida, calcular a média dos resultados.

Programaticamente, você faz o seguinte:

  • Mantenha de lado uma parte do seu conjunto de dados como um conjunto de espera.
  • Divida o restante do seu conjunto de dados (doravante denominado T1) em dobras em K.
  • Em um loop for de i = 1 a K, faça o seguinte:
    • selecione a i-ésima vez como seu conjunto de CV e as amostras restantes como seu conjunto de treinamento (doravante chamado Ti).
    • Faça a engenharia de recursos e a seleção de recursos que desejar: filtre recursos, combine-os etc.
    • Converta o seu conjunto de CV (a dobra atual, chamada CVi) e o seu conjunto de treinamento atual Ti em um com os recursos apropriados.
    • Treine seu modelo no conjunto de treinamento Ti
    • Obtenha a pontuação da dobra atual, CVi. Anexe esta pontuação a uma lista contendo todas as pontuações.
  • Agora, sua lista tem a pontuação de cada dobra, então você calcula a média, obtendo a pontuação de K-folds.

É realmente importante que você execute a engenharia de recursos dentro do loop, no conjunto de sub-treinamento Ti, e não no conjunto de treinamento completo T1.

A razão para isso é que, quando você ajusta / engenheiro de recursos para o Ti, você testa no CVi, o que não é visto para esse modelo. Considerando que, se você encaixar / engenheiro de recursos em T1, qualquer CV que você escolher terá que ser um subconjunto T1 e, portanto, você será otimista, ou seja, sofrerá excesso de ajustes, porque estará treinando e testando nas mesmas amostras de dados.

Uma resposta muito boa do StackExchange é essa , que realmente explica mais detalhadamente e com um exemplo do código. Também veja isso como um adendo.

Abhishek Divekar
fonte
11
Você poderia incluir um breve resumo do conteúdo desses links? Preferimos respostas independentes, caso contrário, elas podem ser muito vulneráveis ​​ao "linkrot" se os links mudarem de local. Como alternativa, podemos converter isso em um comentário para você.
Silverfish
@Silverfish Done
Abhishek Divekar
Então, dentro do loop for, é possível ter diferentes recursos selecionados para diferentes dobras?
stackunderflow
2

O bootstrap de "otimismo" do Efron-Gong é muito bom para isso. A idéia é usar todos os dados disponíveis para desenvolver o modelo preditivo e usar todos os dados para estimar o desempenho futuro provável desse mesmo modelo. E o tamanho da amostra é muito pequeno por um fator de 100 para que qualquer abordagem de amostra dividida funcione.

Y

Frank Harrell
fonte