Como aplicar adequadamente a validação cruzada no contexto da seleção de parâmetros de aprendizado para máquinas de vetores de suporte?


9

O maravilhoso pacote libsvm fornece uma interface python e um arquivo "easy.py" que pesquisa automaticamente parâmetros de aprendizado (custo e gama) que maximizam a precisão do classificador. Dentro de um determinado conjunto de parâmetros de aprendizado do candidato, a precisão é operacionalizada pela validação cruzada, mas acho que isso prejudica o objetivo da validação cruzada. Ou seja, na medida em que os próprios parâmetros de aprendizado possam ser escolhidos de uma maneira que possa causar um excesso de ajuste dos dados, acho que uma abordagem mais apropriada seria aplicar a validação cruzada no nível da própria pesquisa: realize a pesquisa em um conjunto de dados de treinamento e avalie a precisão final do SVM resultante dos parâmetros de aprendizado finalmente escolhidos por avaliação em um conjunto de dados de teste separado. Ou estou faltando alguma coisa aqui?

Respostas:


10

Se você aprender os hiperparâmetros nos dados completos do treinamento e depois validar de forma cruzada, obterá uma estimativa de desempenho otimizada, porque os dados de teste em cada dobra já terão sido usados ​​na configuração dos hiperparâmetros, portanto, os hiperparâmetros Os parâmetros selecionados são selecionados em parte porque se adequam aos dados no conjunto de testes. O viés otimista introduzido dessa maneira pode ser inesperadamente grande. Consulte Cawley e Talbot, "Sobre adaptação excessiva na seleção de modelos e viés de seleção subsequente na avaliação de desempenho", JMLR 11 (Jul): 2079-2107, 2010.(Particularmente seção 5.3). A melhor coisa a fazer é a validação cruzada aninhada. A idéia básica é que você valide cruzadamente todo o método usado para gerar o modelo; portanto, trate a seleção do modelo (escolhendo os hiperparâmetros) como simplesmente parte do procedimento de ajuste do modelo (onde os parâmetros são determinados) e você não pode ir muito errado.

Se você usar a validação cruzada no conjunto de treinamento para determinar os hiperparâmetros e, em seguida, avaliar o desempenho de um modelo treinado usando esses parâmetros em todo o conjunto de treinamento, usando um conjunto de teste separado, isso também será bom (desde que você tenha dados suficientes para ajustar de forma confiável o modelo e estimar o desempenho usando partições separadas).


Boa referência!
5113 Andrew

No segundo parágrafo, como você incorporaria a seleção de recursos também? Seria bom para: i) fazer a otimização de hiper parâmetros, como você disse acima (obtendo parâmetros otimizados ideais) ii) executar a seleção de recursos em outra rodada de validação cruzada para obter um conjunto dos principais preditores (a seleção de recursos é executada nos dados de treinamento particionados em um conjunto de subtraining e validação usando qualquer método de reamostragem usado na otimização de hiperparâmetros). iii) treinar um modelo com o hiperparâmetro superior e o preditor superior definidos em dados completos de treinamento. Teste em conjunto de teste separado.
sma

para ser um pouco mais claro em ii) executar a seleção de recursos em outra rodada de validação cruzada para obter um conjunto dos principais preditores (os dados de treinamento são divididos em subtraining e conjunto de validação por meio do método de reamostragem usado na otimização de hiperparâmetros. em seguida, a seleção de recursos é executada em subtraining data).
sma

Como alternativa, é possível fazer a seleção de recursos primeiro por meio de validação cruzada para obter o conjunto de recursos principais e, em seguida, fazer o ajuste de hiperparâmetros de quaisquer modelos de interesse usando o conjunto de recursos principais (como acima na validação cruzada)? Em seguida, treine os modelos com seus hiper parâmetros ideais em dados completos de treinamento, apenas com o conjunto de recursos principais já determinado, e teste em conjunto de testes separado?
sma

0

Não acho que a validação cruzada seja mal utilizada no caso do LIBSVM porque é feita no nível dos dados de teste. Tudo o que faz é validação cruzada k-fold e procure o melhor parâmetro para o kernel RBF. Deixe-me saber que você não concorda.


A seleção dos hiperparâmetros não deve envolver os dados do teste de forma alguma, pois isso levará a uma estimativa de desempenho otimista e tendenciosa. Essencialmente, a escolha dos hiperparâmetros deve ser tratada como parte integrante do ajuste do SVM; portanto, o procedimento de teste também deve testar o erro devido à seleção dos hiperparâmetros; veja meu artigo que mencionei na minha resposta à pergunta (é acesso aberto).
Dikran Marsupial
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.