Seleção de recursos e validação cruzada

76

Recentemente, tenho lido muito neste site (@Aniko, @Dikran Marsupial, @Erik) e em outros lugares sobre o problema de sobreajuste que ocorre com a validação cruzada - (Smialowski et al. 2010 Bioinformatics, Hastie, Elements of statistics learning). A sugestão é que qualquer seleção de recurso supervisionado (usando correlação com rótulos de classe) realizada fora da estimativa de desempenho do modelo usando validação cruzada (ou outro método de estimativa de modelo, como inicialização) pode resultar em sobreajuste.

Isso me parece pouco intuitivo - certamente, se você selecionar um conjunto de recursos e avaliar seu modelo usando apenas os recursos selecionados usando validação cruzada, estará obtendo uma estimativa imparcial do desempenho generalizado do modelo nesses recursos (isso pressupõe que a amostra em estudo seja representativa da população)?

Com este procedimento, não é possível reivindicar um conjunto de recursos ideal, mas é possível relatar o desempenho do conjunto de recursos selecionado em dados invisíveis como válido?

Aceito que a seleção de recursos com base em todo o conjunto de dados possa resultar em algum vazamento de dados entre os conjuntos de teste e trem. Mas se o conjunto de recursos for estático após a seleção inicial e nenhuma outra sintonia estiver sendo feita, certamente é válido relatar as métricas de desempenho validadas cruzadamente?

No meu caso, tenho 56 recursos e 259 casos e, portanto, #cases> #features. Os recursos são derivados dos dados do sensor.

Desculpas se minha pergunta parece derivada, mas esse parece ser um ponto importante a ser esclarecido.

Editar: ao implementar a seleção de recursos dentro da validação cruzada no conjunto de dados detalhado acima (graças às respostas abaixo), posso confirmar que a seleção de recursos antes da validação cruzada neste conjunto de dados introduziu uma significanteviés. Esse viés / sobreajuste foi maior ao fazer isso para uma formulação de 3 classes, em comparação com uma formulação de 2 classes. Eu acho que o fato de eu ter usado a regressão gradual para a seleção de recursos aumentou esse ajuste excessivo; para fins de comparação, em um conjunto de dados diferente, porém relacionado, comparei uma rotina seqüencial de seleção de recursos avançados executada antes da validação cruzada com os resultados que eu havia obtido anteriormente com a seleção de recursos no CV. Os resultados entre os dois métodos não diferiram dramaticamente. Isso pode significar que a regressão passo a passo é mais propensa a sobreajuste do que o FS sequencial ou pode ser uma peculiaridade desse conjunto de dados.

BGreene
fonte
7
Eu não acho que é (bastante) o que Hastie, et al. estão defendendo. O argumento geral é que, se a seleção de recurso usa a resposta , é melhor incluí-la como parte do seu procedimento de CV. Se você faz a triagem de preditores, por exemplo, observando suas variações de amostra e excluindo os preditores com pequenas variações, tudo bem como um procedimento único.
cardeal
3
+1, no entanto, mesmo nesse caso, a validação cruzada não representa a variação no processo de seleção de recursos, o que pode ser um problema se a seleção de recursos for instável. Se você executar a triagem primeiro, a variabilidade no desempenho em cada dobra sub-representará a verdadeira variabilidade. Se você realizar a triagem em cada dobra, aumentará adequadamente a variabilidade no desempenho em cada dobra. Eu ainda sempre realizaria a triagem em cada dobra se pudesse pagar a despesa computacional.
Dikran Marsupial
1
Penso que a afirmação "QUALQUER seleção de recurso executada antes da estimativa de desempenho do modelo usando validação cruzada pode resultar em ajuste excessivo". é uma citação ou deturpação do que Hastie e outros sugeririam. Se você alterar a palavra "anterior" para "sem", faz mais sentido. Além disso, a sentença parece sugerir que a validação cruzada é a única maneira de testar legitimamente a adequação das variáveis ​​selecionadas. O bootstrap, por exemplo, pode ser outra abordagem legítima .
Michael Chernick
@MichaelChernick - concordou. Eu editei acima para refletir melhor meu significado.
BGreene
1
@Greene: há uma discussão recente sobre esse assunto que pode ser lida em goo.gl/C8BUa .
Alekk

Respostas:

69

Se você executar a seleção de recursos em todos os dados e validar cruzadamente, os dados de teste em cada dobra do procedimento de validação cruzada também foram utilizados para escolher os recursos e é isso que influencia a análise de desempenho.

Considere este exemplo. Geramos alguns dados de destino lançando uma moeda 10 vezes e registrando se ela cai como cara ou coroa. Em seguida, geramos 20 recursos lançando a moeda 10 vezes para cada recurso e anotando o que obtemos. Em seguida, realizamos a seleção de recursos escolhendo o recurso que corresponde aos dados de destino o mais próximo possível e os usamos como nossa previsão. Se validarmos cruzadamente, obteremos uma taxa de erro esperada um pouco menor que 0,5. Isso ocorre porque escolhemos o recurso com base em uma correlação sobre o conjunto de treinamento e o conjunto de testes em cada dobra do procedimento de validação cruzada. No entanto, a taxa de erro real será de 0,5, pois os dados de destino são simplesmente aleatórios. Se você executar a seleção de recurso independentemente em cada dobra da validação cruzada, o valor esperado da taxa de erro será 0.

A idéia principal é que a validação cruzada é uma maneira de estimar o desempenho da generalização de um processo para a construção de um modelo; portanto, é necessário repetir todo o processo em cada dobra. Caso contrário, você terá uma estimativa tendenciosa ou uma subestimação da variação da estimativa (ou ambas).

HTH

Aqui está um código MATLAB que executa uma simulação Monte-Carlo dessa configuração, com 56 recursos e 259 casos, para corresponder ao seu exemplo, a saída que ele fornece é:

Estimador enviesado: erate = 0,429210 (0,397683 - 0,451737)

Estimador imparcial: erate = 0,499689 (0,397683 - 0,590734)

O estimador tendencioso é aquele em que a seleção de características é realizada antes da validação cruzada, o estimador imparcial é aquele em que a seleção de características é realizada independentemente em cada dobra da validação cruzada. Isso sugere que o viés pode ser bastante grave nesse caso, dependendo da natureza da tarefa de aprendizado.

NF    = 56;
NC    = 259;
NFOLD = 10;
NMC   = 1e+4;

% perform Monte-Carlo simulation of biased estimator

erate = zeros(NMC,1);

for i=1:NMC

   y = randn(NC,1)  >= 0;
   x = randn(NC,NF) >= 0;

   % perform feature selection

   err       = mean(repmat(y,1,NF) ~= x);
   [err,idx] = min(err);

   % perform cross-validation

   partition = mod(1:NC, NFOLD)+1;
   y_xval    = zeros(size(y));

   for j=1:NFOLD

      y_xval(partition==j) = x(partition==j,idx(1));

   end

   erate(i) = mean(y_xval ~= y);

   plot(erate);
   drawnow;

end

erate = sort(erate);

fprintf(1, '  Biased estimator: erate = %f (%f - %f)\n', mean(erate), erate(ceil(0.025*end)), erate(floor(0.975*end)));

% perform Monte-Carlo simulation of unbiased estimator

erate = zeros(NMC,1);

for i=1:NMC

   y = randn(NC,1)  >= 0;
   x = randn(NC,NF) >= 0;

   % perform cross-validation

   partition = mod(1:NC, NFOLD)+1;
   y_xval    = zeros(size(y));

   for j=1:NFOLD

      % perform feature selection

      err       = mean(repmat(y(partition~=j),1,NF) ~= x(partition~=j,:));
      [err,idx] = min(err);

      y_xval(partition==j) = x(partition==j,idx(1));

   end

   erate(i) = mean(y_xval ~= y);

   plot(erate);
   drawnow;

end

erate = sort(erate);

fprintf(1, 'Unbiased estimator: erate = %f (%f - %f)\n', mean(erate), erate(ceil(0.025*end)), erate(floor(0.975*end)));
Dikran Marsupial
fonte
3
Obrigado - isso é muito útil. Se você seguir a abordagem sugerida, como avalia seu modelo final? Como você terá vários conjuntos de recursos, como você escolhe o conjunto final de recursos? Historicamente, também relatei resultados com base em uma única validação cruzada com os parâmetros e os recursos do modelo escolhidos.
BGreene
16
É melhor visualizar a validação cruzada como uma avaliação do desempenho de um procedimento para ajustar um modelo, em vez do próprio modelo. A melhor coisa a fazer é normalmente executar a validação cruzada como acima e, em seguida, criar seu modelo final usando o conjunto de dados inteiro, usando o mesmo procedimento usado em cada dobra do procedimento de validação cruzada.
Dikran Marsupial
2
Nesse caso, reportamos os resultados da classificação com base na validação cruzada (potencialmente muitos conjuntos de recursos diferentes), mas ainda informamos que o modelo contém apenas um desses conjuntos de recursos, ou seja, os resultados da classificação validada cruzadamente não correspondem necessariamente ao conjunto de recursos?
BGreene
10
Essencialmente, sim, a validação cruzada apenas estima o desempenho esperado de um processo de construção de modelo, não o modelo em si. Se o conjunto de recursos variar muito de uma dobra da validação cruzada para outra, é uma indicação de que a seleção de recursos é instável e provavelmente não muito significativa. Geralmente, é melhor usar a regularização (por exemplo, regressão de crista) do que a seleção de recursos, especialmente se o último for instável.
Dikran Marsupial
3
Este é um post tão importante. Incrível quantos não aplicam isso.
Chris A.
12

Para adicionar uma descrição ligeiramente diferente e mais geral do problema:

Se você fizer qualquer tipo de pré-processamento orientado a dados , por exemplo,

  1. otimização de parâmetros guiada por validação cruzada / fora da inicialização
  2. redução de dimensionalidade com técnicas como PCA ou PLS para produzir dados para o modelo (por exemplo, PLS-LDA, PCA-LDA)
  3. ...

e deseja usar a validação cruzada / validação out-of-bootstrap (/ hold out) para estimar o desempenho do modelo final , o pré-processamento controlado por dados precisa ser feito nos dados de treinamento substitutos, ou seja, separadamente para cada modelo substituto.

Se o pré-processamento controlado por dados for do tipo 1., isso levará à validação cruzada "dupla" ou "aninhada": a estimativa do parâmetro é feita em uma validação cruzada usando apenas o conjunto de treinamento da validação cruzada "externa". O ElemStatLearn tem uma ilustração ( https://web.stanford.edu/~hastie/Papers/ESLII.pdf Página 222 da impressão 5).

Você pode dizer que o pré-processamento é realmente parte da construção do modelo. apenas pré-processamento realizado

  • independentemente para cada caso ou
  • independentemente do conjunto de dados real

pode ser retirado do loop de validação para salvar os cálculos.

Portanto, o contrário: se o seu modelo é completamente construído por conhecimento externo a um conjunto de dados específico (por exemplo, você decide antecipadamente pelo seu conhecimento especializado que os canais de medição 63 - 79 não podem ajudar a resolver o problema, é claro que você pode excluir esses canais , construa o modelo e faça a validação cruzada.O mesmo, se você fizer uma regressão PLS e decidir, por sua experiência, que 3 variáveis ​​latentes são uma escolha razoável (mas não tente se 2 ou 5 lv dão melhores resultados), poderá vá em frente com uma validação normal fora da inicialização / cruzada.

cbeleites
fonte
Infelizmente, o link para impressão 5 do livro ElemStatLearn não está funcionando. Fiquei me perguntando se a ilustração a que você estava se referindo ainda está na mesma página. Mencione também a legenda.
Rradd88 31/05
Portanto, se eu tiver dois conjuntos de dados, a seleção / engenharia de recursos em um deles e o CV no outro, não haveria problemas?
Milos
1
@Milos: não, desde que esses recursos se tornem parâmetros fixos para os modelos de validação cruzada, isso deve ser bom. Essa seria uma configuração apropriada de geração de hipóteses (= desenvolvimento de recursos no conjunto de dados A) / teste de hipóteses (= medição do desempenho dos recursos agora fixos com o conjunto de dados B).
Cbeleites
@cbeleites Sim, era isso que eu pretendia fazer. Determine os recursos em A, corrija-os e faça a validação cruzada para os modelos em B. Obrigado. :)
Milos
@Milos: lembre-se, no entanto, de que sua argumentação para o desempenho alcançado é ainda melhor se você treinar completamente seu modelo em A e depois usar B apenas para testes.
Cbeleites
5

Vamos tentar torná-lo um pouco intuitivo. Considere este exemplo: Você tem um dependente binário e dois preditores binários. Você quer um modelo com apenas um preditores. Ambos os preditores têm uma chance de dizer que 95% é igual ao dependente e uma chance de 5% de discordar do dependente.

Agora, por acaso em seus dados, um preditor é igual ao dependente de todos os dados em 97% das vezes e o outro apenas em 93% das vezes. Você escolherá o preditor com 97% e construirá seus modelos. Em cada dobra da validação cruzada, você terá o modelo dependente = preditor, porque quase sempre está certo. Portanto, você obterá um desempenho previsto de 97%.

Agora, você poderia dizer, ok, isso é apenas má sorte. Mas se os preditores forem construídos como acima, você terá 75% de chance de pelo menos um deles ter uma precisão> 95% em todo o conjunto de dados e esse será o escolhido. Então você tem uma chance de 75% de superestimar o desempenho.

Na prática, não é nada trivial estimar o efeito. É perfeitamente possível que sua seleção de recursos selecione os mesmos recursos em cada dobra, como se você o fizesse em todo o conjunto de dados e, portanto, não haverá viés. O efeito também se torna menor se você tiver muito mais amostras, mas recursos. Pode ser instrutivo usar os dois lados com seus dados e ver como os resultados diferem.

Você também pode reservar uma quantidade de dados (digamos 20%), usar o seu caminho e o caminho correto para obter estimativas de desempenho validando cruzadamente os 80% e ver qual previsão de desempenho se mostra mais precisa quando você transfere seu modelo para o 20 % dos dados reservados. Observe que, para que isso funcione, a seleção de recursos antes do CV também precisará ser feita apenas nos 80% dos dados. Caso contrário, não simulará a transferência do seu modelo para dados fora da sua amostra.

Erik
fonte
Você poderia elaborar mais sobre a maneira correta de fazer a seleção de recursos com seu exemplo intuitivo? Obrigado.
uared1776 27/08