Eu tenho um conjunto de dados de 140000 exemplos e 30 recursos para os quais estou treinando vários classificadores para uma classificação binária (SVM, Regressão Logística, Floresta Aleatória etc.)
Em muitos casos, o ajuste de hiperparâmetros em todo o conjunto de dados usando a pesquisa em grade ou aleatória é muito dispendioso no tempo.
Comecei a usar a seguinte técnica
- Subamostra meu conjunto de dados
- Use a fração obtida para ajustar os hiperparâmetros em
- Use os parâmetros obtidos para treinar um modelo usando o conjunto de dados inteiro
Para avaliar cada conjunto de parâmetros na segunda etapa, utilizo sklearn
s GridSearchCV
com cv = 10. Para avaliar o modelo final que criei na terceira etapa, utilizo sklearn
's cross_val_predict
. Nesse sentido, avalio meus modelos deixando 10% por cento dos dados de fora, treino com os demais e medo a precisão preditiva dos 10%, iterativamente, 10 vezes, depois calculando a média das pontuações.
O que me preocupou é que a precisão da previsão que recebo do treinamento em todo o conjunto de dados é muito próxima da avaliação que recebo ao ajustar os parâmetros para o melhor conjunto de parâmetros (cada conjunto de parâmetros testado gera uma pontuação obtida com a média de 10- resultados de validação com dobra cruzada).
Na maioria das vezes, a precisão que foi cross_val_predict
medida usando todos os exemplos de treinamento (conjunto de dados completo) está um pouco acima do que a avaliação dos melhores parâmetros retornou.
Para ilustrar isso aqui, está a avaliação de um conjunto de parâmetros (em um conjunto de dados menor do que o que descrevi acima, mas o efeito é o mesmo)
Best parameters set found on development set:
{'kernel': 'rbf', 'C': 9, 'gamma': 0.1}
Scores for all sets of parameters
0.851 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.5}
0.852 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.1}
0.829 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.001}
0.853 (+/-0.006) for {'kernel': 'rbf', 'C': 9, 'gamma': 0.1}
...
E aqui estão as pontuações médias (de cross_val_predict
) que recebi do treinamento em todo o conjunto de dados usando os melhores parâmetros
precision recall f1-score support
0 0.86 0.85 0.86 15417
1 0.86 0.87 0.87 16561
avg / total 0.86 0.86 0.86 31978
acc score: 0.863750078179
roc au score: 0.863370490059
[[13147 2270]
[ 2087 14474]]
Como você pode ver, o treinamento em todo o conjunto de dados melhora os resultados. Também validei que o modelo mal ajustado (por exemplo, usando os valores padrão ou aleatórios para C
e gamma
) leva a uma precisão de previsão muito pior.
No geral, acho que ajustar os hiperparâmetros em um subconjunto não é o ideal, mas pode levar a resultados relativamente bons sem ter que esperar muito tempo. Por exemplo, antes de usar essa abordagem, usei o optunity
pacote para ajustar o hiperparâmetro em todo o conjunto de dados. Esse procedimento levaria de 3 a 5 dias para ser concluído e produziria resultados com precisão muito boa ou recuperação muito boa, mas não com ambas, portanto, para cada classe, a precisão ou a recuperação foram realmente altas (mais altas do que as outras os classificadores alcançaram) a medição do F1 foi realmente baixa. Pelo contrário, o uso da abordagem posterior leva a algumas horas de treinamento e a uma melhor medição da F1.
Minhas preocupações são:
Limito a precisão da minha classificação? Evito usar todo o poder de previsão que meu conjunto de dados pode oferecer ajustando apenas um subconjunto? Se esse dano de desempenho está acontecendo, é de alguma forma limitado por algum fator?
fonte
Respostas:
Além da resposta de Jim (+1): Para alguns classificadores, os valores de hiperparâmetros dependem do número de exemplos de treinamento, por exemplo, para um SVM linear, o problema primordial de otimização é
sujeito a
Observe que o problema de otimização é basicamente uma medida do termo de ajuste incorreto dos dados (a soma acima de ) e um termo de regularização, mas o parâmetro de regrularização usual é colocado com o termo de ajuste incorreto dos dados. Obviamente, quanto maior o número de padrões de treinamento que tivermos, maior será a soma e menor será o para manter o mesmo equilíbrio com a magnitude dos pesos. CξEu C
Algumas implementações do SVM reparameteram como
para compensar, mas alguns não. Portanto, um ponto adicional a considerar é se os hiperparâmetros ótimos dependem do número de exemplos de treinamento ou não.
Concordo com Jim que a superavaliação do critério de seleção de modelo provavelmente será um problema, mas se você tiver dados suficientes, mesmo na subamostra, isso poderá não ser um problema substancial.
fonte
R: Sim, porque você corre o risco de realizar ajustes excessivos (os hiperparâmetros) nesse conjunto de testes específico resultante da divisão de teste de trem que você escolheu.
R: Sim, mas a sabedoria comum do aprendizado de máquina é: com seus hiperparâmetros ótimos, digamos , reinstale seus modelos em todo o conjunto de dados e faça desse modelo seu modelo final para casos futuros novos e não vistos.λ∗
A: veja resposta anterior.
A: idem.
R: Observe que isso é diferente do que é solicitado no título. O CV de 10 vezes itera mais de 10 divisões do trem de teste para chegar a uma estimativa "generalizada" (menos tendenciosa) da generalização (medida neste caso pela precisão). O CV de dez vezes aborda exatamente o problema de que falo na primeira resposta.
R: esta é uma medida "dentro da amostra" que pode ser otimista. Mas não esqueça que você tem muitos casos e relativamente poucos recursos, para que esse viés de otimismo não seja um problema. Pepita de aprendizado de máquina: "o melhor regularizador é mais dados".
A: veja resposta anterior. Veja as plotagens do hiperparâmetro: o ajuste diminui o erro e em quanto? Pelo que você está dizendo, o ajuste não está fazendo muito.
Você pode testar isso da seguinte maneira. Faça uma divisão de teste de trem de 70% a 30%. Compare o desempenho preditivo de:
Deixe os dois modelos preverem o conjunto de testes. Se o desempenho estiver muito próximo, o ajuste não está fazendo muito. Se o desempenho for diferente em favor do modelo ajustado, continue com a abordagem de ajuste.
fonte
Vou responder por redes neurais artificiais (RNAs).
Os hiperparâmetros das RNAs podem definir seu processo de aprendizado (por exemplo, taxa de aprendizado ou tamanho do mini lote) ou sua arquitetura (por exemplo, número de unidades ou camadas ocultas).
Ajustar os hiperparâmetros arquitetônicos em um subconjunto do seu conjunto de treinamento provavelmente não é uma boa idéia (a menos que seu conjunto de treinamento realmente não tenha diversidade, ou seja, aumentar o tamanho do conjunto de treinamento não aumenta o desempenho da ANN), pois os hiperparâmetros arquitetônicos alteram a capacidade da RNA.
Eu ficaria menos preocupado em ajustar os hiperparâmetros que definem o processo de aprendizado em um subconjunto do seu conjunto de treinamento, mas acho que se deve validá-lo empiricamente.
fonte
Este artigo trata do tópico de obter outros conjuntos de dados menores / para o ajuste de conjuntos de dados maiores: https://papers.nips.cc/paper/5086-multi-task-bayesian-optimization.pdf
Eu acho que não é uma má idéia, em contraste com o que Jim disse .
fonte
Você pode usar algoritmos de otimização de hiperparâmetros que suportam avaliações multifidelidade, ou seja, avaliações em subconjuntos de seus dados, a fim de obter uma estimativa aproximada, mas útil, dos valores ideais de hiperparâmetros para todo o conjunto de dados. Tais abordagens geralmente permitem reduzir o custo computacional total necessário para executar a otimização do hiperparâmetro.
fonte
Você pode dar uma olhada em https://link.springer.com/chapter/10.1007/978-3-319-53480-0_27, na qual investigamos os efeitos da amostragem aleatória no ajuste de hiperparâmetros SVM usando 100 real- conjuntos de dados mundiais ...
fonte