Tuning de Hiperparâmetros com GridSearch e RandomizedSearch em Python
GridSearchCV
e RandomizedSearchCV
.1. Conceitos Fundamentais
Hiperparâmetro: parâmetro do modelo definido antes do treinamento, como
n_estimators
em Random Forest ouC
em SVM.Grid Search: busca exaustiva por combinações de hiperparâmetros especificadas.
Randomized Search: busca aleatória em um espaço de hiperparâmetros, útil quando há muitas combinações possíveis.
2. GridSearchCV Avançado
2.1 Exemplo básico
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
param_grid = {
"n_estimators": [100, 200, 300],
"max_depth": [5, 10, None],
"min_samples_split": [2, 5]
}
clf = RandomForestClassifier(random_state=42)
grid_search = GridSearchCV(clf, param_grid, cv=5, scoring="accuracy")
grid_search.fit(X_train, y_train)
print("Melhores parâmetros:", grid_search.best_params_)
print("Melhor acurácia:", grid_search.best_score_)
cv=5
→ validação cruzada em 5 foldsscoring="accuracy"
→ métrica de performance utilizada
2.2 GridSearch com Pipelines
Integrar pré-processamento e modelo no mesmo pipeline garante consistência:
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
pipeline = Pipeline([
("scaler", StandardScaler()),
("classifier", RandomForestClassifier(random_state=42))
])
param_grid = {
"classifier__n_estimators": [100, 200],
"classifier__max_depth": [5, 10]
}
grid_search = GridSearchCV(pipeline, param_grid, cv=5)
grid_search.fit(X_train, y_train)
Prefixo
classifier__
indica hiperparâmetro do step específico do pipeline.
3. RandomizedSearchCV Avançado
3.1 Exemplo básico
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint
param_dist = {
"n_estimators": randint(50, 300),
"max_depth": [5, 10, None],
"min_samples_split": randint(2, 10)
}
random_search = RandomizedSearchCV(
clf, param_distributions=param_dist, n_iter=20, cv=5, scoring="accuracy", random_state=42
)
random_search.fit(X_train, y_train)
print("Melhores parâmetros:", random_search.best_params_)
n_iter=20
→ define quantas combinações serão testadasrandint
euniform
permitem exploração de ranges contínuos ou discretos
3.2 Vantagens do RandomizedSearch
Mais eficiente para espaços grandes de hiperparâmetros
Permite testar mais parâmetros com menos custo computacional
Pode ser combinado com pipelines complexos e pré-processamento heterogêneo
4. Estratégias Profissionais de Tuning
Escalonamento dos dados antes de usar modelos sensíveis (SVM, KNN).
Pré-processamento dentro de pipeline para evitar vazamento de dados.
Validação cruzada estratificada (
StratifiedKFold
) para datasets desbalanceados.
from sklearn.model_selection import StratifiedKFold
cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
grid_search = GridSearchCV(clf, param_grid, cv=cv)
RandomizedSearch primeiro, seguido de GridSearch refinado para otimização final.
Métricas múltiplas: considerar F1-score, ROC-AUC ou outras métricas além de acurácia.
Parallelização: usar
n_jobs=-1
para utilizar todos os núcleos disponíveis:
grid_search = GridSearchCV(clf, param_grid, cv=5, n_jobs=-1)
Persistência de resultados: salvar modelos e resultados do tuning:
import joblib
joblib.dump(grid_search.best_estimator_, "modelo_otimizado.pkl")
5. Aplicações Profissionais
Classificação de clientes ou churn
Modelos financeiros e risco de crédito
Previsão de demanda e séries temporais
Classificação de imagens e textos usando Random Forest, Gradient Boosting ou SVM
6. Conclusão
Tuning de hiperparâmetros com GridSearch e RandomizedSearch é essencial para maximizar performance de modelos.
Estratégias avançadas incluem:
Integração com pipelines complexos
Pré-processamento heterogêneo
Validação cruzada estratificada
Combinação de Randomized + GridSearch
Seguindo boas práticas, é possível criar modelos robustos e confiáveis, prontos para produção e aplicação profissional.
Comentários
Postar um comentário