Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Demora para treinar o modelo usando o RandomizedSearchCV

Peguei um dataset do kaglge, fiz a limpeza e agora estou usando o RandomizedSearchCV para verificar os melhores hiperparâmetros. No entanto, o treinamento está demorando demais. O dataset contém 30.000 linhas mais ou menos. Estes foram os parâmetros:

 parametros_random={'n_estimators':[50,100,150],
                   'criterion':['gini', 'entropy', 'log_loss'],
                   'max_depth':[10,15,20],
                   'max_features':['sqrt', 'log2', None]}

E então foi feito isso:

randomized_search_cv=RandomizedSearchCV(estimator=RandomForestClassifier(random_state=2),
             param_distributions=parametros_random,
             n_iter=50,
             scoring='recall',
             n_jobs=-1,
             cv=cv)

E por fim, treinei o randomized:

randomized_search_cv.fit(X_treino,y_treino)

O tempo de reprodução do treinamento do randomized está excedendo 20 minutos. Gostaria de saber se tem algum jeito para acelerar mais o processo. (PS: tentei reduzir a amostra de dados, no entanto, afetou o desempenho do modelo)

2 respostas
solução!

O treinamento do RandomizedSearchCV pode ser otimizado de várias formas sem comprometer o desempenho do modelo. Aqui estão algumas sugestões para acelerar o processo:

1. Reduzir o Número de Iterações (n_iter)

Atualmente, n_iter=50, o que pode ser um valor alto considerando que RandomizedSearchCV já faz uma busca aleatória. Tente reduzir para algo entre 10 e 20 para ver se ainda encontra bons hiperparâmetros sem testar tantas combinações.

2. Ajustar o Número de n_estimators

Os valores de n_estimators (50, 100, 150) influenciam diretamente o tempo de treinamento. Para acelerar, pode ser interessante testar valores menores, como [50, 75, 100].

3. Usar cv=3 ao Invés de cv=5 ou cv=10

Se cv (cross-validation) estiver alto, como 5 ou 10, tente reduzir para 3, o que diminuirá drasticamente o tempo de treinamento sem perder muita qualidade.

4. Remover None de max_features

O parâmetro max_features tem a opção None, o que faz com que o modelo utilize todos os recursos, podendo ser mais lento. Tente manter apenas sqrt e log2.

5. Usar verbose=1 para Monitorar o Treinamento

Adicionar verbose=1 no RandomizedSearchCV ajudará a ver o progresso do treinamento e entender se algum conjunto de hiperparâmetros está tornando o processo mais lento.

6. Experimentar HalvingRandomSearchCV

O HalvingRandomSearchCV é uma alternativa mais rápida que elimina combinações ruins logo no início do processo, reduzindo o tempo de busca.

Exemplo de implementação:

python

Copiar código

from sklearn.experimental import enable_halving_search_cv from sklearn.model_selection import HalvingRandomSearchCV halving_search = HalvingRandomSearchCV( estimator=RandomForestClassifier(random_state=2), param_distributions=parametros_random, factor=2, scoring='recall', n_jobs=-1, cv=3, verbose=1 ) halving_search.fit(X_treino, y_treino)

Isso pode acelerar muito o processo, mantendo bons resultados.

Se o problema continuar, podemos testar outras estratégias mais avançadas. Me avise se precisar de mais otimizações!

Da uma olhada estas divas podem ajudar