Como a seleção de recursos e a otimização do hiperparâmetro devem ser solicitadas no pipeline de aprendizado de máquina?


14

Meu objetivo é classificar os sinais dos sensores. O conceito da minha solução até agora é: i) Recursos de engenharia a partir do sinal bruto ii) Seleção de recursos relevantes com o ReliefF e uma abordagem de clustering iii) Aplicação de NN, floresta aleatória e SVM

No entanto, estou preso em um dilema. Em ii) e iii), existem hiperparâmetros como k-Neigbours mais próximo para ReliefF ou o comprimento da janela, para o qual o sinal do sensor é avaliado, ou o número de unidades ocultas em cada camada de NN

Existem três problemas que vejo aqui: 1) Os parâmetros de seleção do recurso de ajuste influenciarão o desempenho do classificador 2) A otimização dos hiperparâmetros do classificador influenciará a escolha dos recursos. 3) Avaliar cada combinação possível de configuração é intratável.

Portanto, minhas perguntas são: a) Posso fazer uma suposição simplificadora, os parâmetros de seleção do recurso de ajuste podem ser dissociados dos parâmetros do classificador de ajuste? b) Existem outras soluções possíveis?


Penso que dissociar o ajuste de seleção de recursos e o ajuste de classificador é válido, uma vez que a heurítica para reliefF visa maximizar a variação entre classes e minimizar a variação dentro da classe, o que também indica um bom classificador. Portanto, ajustar os parâmetros ideais para o relevoF também torna um bom classificador mais 'provável'. No entanto, ter uma formulação matemática para apoiar essa ideia seria muito bom.
Grunwalski

Uma variante específica desta pergunta: A seleção de recurso deve fazer parte da rotina de validação cruzada (como em: para cada conjunto de hiperparâmetros de classificador: # para cada execução de CV de dobra em k: 1) seleção de recurso, 2) escala de recurso, 3) ajuste do classificador 4) prever no conjunto de teste?
Nikolas Rieble

1
@NikolasRieble Acabei de escrever uma resposta para a pergunta original e também incluí a sua pergunta na resposta
Dennis Soemers

Respostas:


14

Como você já observou a si mesmo, sua escolha de recursos (seleção de recursos) pode ter um impacto sobre quais hiperparâmetros para o seu algoritmo são ótimos e quais parâmetros que você seleciona para seu algoritmo podem ter um impacto sobre qual opção de recursos seria ideal.

Portanto, sim, se você realmente se preocupa em extrair todos os por cento do desempenho do seu modelo e pode pagar a quantidade necessária de computação, a melhor solução é provavelmente fazer a seleção de recursos e o ajuste de hiperparâmetros "ao mesmo tempo". Isso provavelmente não é fácil (dependendo de como você seleciona os recursos). A maneira como eu imagino que funcione seria como ter diferentes conjuntos de recursos como candidatos e tratar a seleção de um conjunto de recursos dentre todos esses conjuntos de candidatos como um hiperparâmetro adicional.

Na prática, isso pode não ser realmente viável. Em geral, se você não puder avaliar todas as combinações possíveis, recomendo:

  1. Otimize livremente os hiperparâmetros, apenas para garantir que você não atribua valores extremamente ruins a alguns hiperparâmetros. Isso geralmente pode ser feito manualmente, se você tiver uma boa compreensão intuitiva de seus hiperparâmetros ou com um procedimento muito breve de otimização de hiperparâmetros, usando apenas um monte de recursos que você sabe que são decentemente bons.

  2. Seleção de recurso, com hiperparâmetros que talvez não sejam 100% otimizados, mas pelo menos não extremamente terríveis. Se você já possui pelo menos um algoritmo de aprendizado de máquina configurado de maneira decente, ter bons recursos será significativamente mais importante para o seu desempenho do que os hiperparâmetros de otimização micro. Exemplos extremos: se você não possui recursos, não pode prever nada. Se você tem um recurso de trapaça que contém o rótulo da classe, pode classificar tudo perfeitamente.

  3. Otimize os hiperparâmetros com os recursos selecionados na etapa acima. Esse deve ser um bom conjunto de recursos agora, onde pode valer a pena otimizar um pouco os hiperparams.


Para abordar a questão adicional que Nikolas postou nos comentários, analisando como todas essas coisas (seleção de recursos, otimização de hiperparâmetros) interagem com a validação cruzada k-fold: Eu diria que depende.

Sempre que você usa dados em uma das dobras para qualquer coisa e avalia o desempenho nessa mesma dobra, você obtém uma estimativa tendenciosa do seu desempenho (você superestima o desempenho). Portanto, se você usar dados em todas as dobras para a etapa de seleção de recursos e avaliar o desempenho em cada uma dessas dobras, obterá estimativas tendenciosas do desempenho de cada uma delas (o que não é bom). Da mesma forma, se você tiver otimização por hiperparâmetro orientada a dados e usar dados de certas dobras (ou todas as dobras) e depois avaliar essas mesmas dobras, obterá novamente estimativas tendenciosas de desempenho. As soluções possíveis são:

  1. Repita o pipeline completo dentro de cada dobra separadamente (por exemplo, dentro de cada dobra, faça a seleção de recursos + otimização do hiperparâmetro e modelo de treinamento). Isso significa que a validação cruzada k-fold fornece estimativas imparciais do desempenho desse pipeline completo .

  2. Divida seu conjunto de dados inicial em um '' conjunto de dados de pré-processamento '' e um '' conjunto de dados de treinamento / teste ''. Você pode fazer sua seleção de recursos + otimização de hiperparâmetros no '' conjunto de dados de pré-processamento ''. Em seguida, você corrige os recursos e hiperparâmetros selecionados e realiza a validação cruzada com dobras k no '' conjunto de dados de treinamento / teste ''. Isso significa que a validação cruzada k-fold fornece estimativas imparciais do desempenho do seu algoritmo ML, considerando os valores fixos do conjunto de recursos e do hiperparâmetro .

Observe como as duas soluções resultam em estimativas de desempenho ligeiramente diferentes. Qual é o mais interessante depende do seu caso de uso, depende de como você planeja implementar suas soluções de aprendizado de máquina na prática. Se você é, por exemplo, uma empresa que pretende ter o pipeline completo de seleção de recursos, otimização de hiperparâmetros e treinamento, executando automaticamente todos os dias / semana / mês / ano / o que for, você também estará interessado no desempenho completo pipeline e você desejará a primeira solução.

Se, por outro lado, você puder apenas fazer a seleção de recursos + otimização do hiperparâmetro uma única vez na sua vida, e depois treinar regularmente regularmente seu algoritmo (com os valores do conjunto de recursos e do hiperparâmetro fixados), então o desempenho apenas dessa etapa será o que você está interessado, e você deve ir para a segunda solução


Você também pode fornecer referências?
Nikolas Rieble

1
Há algumas fotos de um livro conhecido neste post: nodalpoint.com/not-perform-feature-selection . Eles parecem concordar com a minha '' possível solução 1 ''. Não tenho uma referência necessariamente para o outro caso, além de ... eu mesmo? Eu fiz fornecer meu raciocínio / motivação lá, que na minha opinião cheques para fora, de modo que é a referência: D
Dennis Soemers

1
Esse capítulo da ESL deve ser 100% de leitura obrigatória para qualquer modelador preditivo.
Matthew Drury

Portanto, no que diz respeito ao Soln 1, como você obtém seu conjunto de recursos final e os hiperparâmetros do modelo após executar a seleção de recursos (fs) e a otimização do hiperparam (ho) em vários iters do cv? Além disso, quando executamos isso em uma iteração de cv, executamos o fs primeiro e depois usamos esses recursos?
sma

1
O @skim CV é geralmente usado apenas para obter uma boa estimativa de desempenho. Normalmente, você não começaria a usar diretamente nenhum dos modelos treinados em um dos conjuntos de dobras . Se você achar que o desempenho estimado pelo CV é satisfatório, execute o pipeline completo mais uma vez no conjunto completo de dados de treinamento (incluindo, novamente, seleção de recursos e ajuste de hiperparam). O conjunto de recursos + hyperparams + modelo que você começa de que é o que você colocaria "em produção"K1
Dennis Soemers

4

Ninguém mencionou abordagens que fazem o ajuste de hiperparâmetros e a seleção de recursos da mesma forma, então vou falar sobre isso. Nesse caso, você deve projetar todos os recursos que deseja no início e incluí-los todos.

As pesquisas agora na comunidade de estatísticas tentaram fazer da seleção de recursos um critério de ajuste. Basicamente, você penaliza um modelo de forma que seja incentivado a escolher apenas alguns recursos que o ajudam a fazer a melhor previsão. Mas você adiciona um parâmetro de ajuste para determinar o tamanho de uma penalidade a ser aplicada.

Em outras palavras, você permite que o modelo escolha os recursos para você e você tem mais ou menos o controle do número de recursos. Na verdade, isso reduz a computação porque você não precisa mais decidir quais recursos, mas quantos recursos e o modelo faz o resto.

Então, quando você faz a validação cruzada no parâmetro, efetua a validação cruzada também na seleção de recursos.

Já existem muitos modelos de ML que incorporam essa seleção de recurso de uma maneira ou de outra.

  • Máquinas de vetores de suporte duplamente regularizadas que são como SVM normal, mas com seleção de recursos
  • Rede elástica que lida com regressão linear
  • Regularização de abandono em redes neurais (não tem referência para este)
  • A floresta aleatória normalmente faz subconjuntos aleatórios dos recursos, de modo que lida com a seleção de recursos para você

Em resumo, as pessoas tentaram incorporar o ajuste de parâmetros e a seleção de recursos ao mesmo tempo para reduzir a complexidade e poder fazer a validação cruzada.


0

Eu acho que você está pensando demais lá. A seleção de recursos, que faz parte da engenharia de recursos, geralmente é útil, mas alguns recursos redundantes não são muito prejudiciais no estágio inicial de um sistema de aprendizado de máquina. Portanto, a melhor prática é que você gere todos os recursos significativos primeiro, depois use-os para selecionar algoritmos e ajustar modelos. Depois de ajustar o modelo, você pode aparar o conjunto de recursos ou decidir usar novos recursos.

O procedimento de aprendizado de máquina é na verdade um processo de iteração, no qual você apresenta engenharia, depois tenta com alguns algoritmos, depois ajusta os modelos e volta até ficar satisfeito com o resultado.


Você quer dizer que está tentando até que funcione: D
Grunwalski

Tentando um procedimento de ML, não aleatoriamente. Na verdade, ML é, na verdade, um pouco de hackers em si.
THN
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.