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?
fonte
Respostas:
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:
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.
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.
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:
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 .
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
fonte
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.
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.
fonte
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.
fonte