Tuning de Hiperparâmetros com GridSearch e RandomizedSearch em Python

tuning de hiperparâmetros é um passo crítico em Machine Learning, pois ajustar corretamente os parâmetros do modelo aumenta significativamente a performance e evita overfitting ou underfitting. Python, com Scikit-Learn, oferece ferramentas robustas para isso: GridSearchCV e RandomizedSearchCV.


1. Conceitos Fundamentais

  • Hiperparâmetro: parâmetro do modelo definido antes do treinamento, como n_estimators em Random Forest ou C 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 folds

  • scoring="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 testadas

  • randint e uniform 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

  1. Escalonamento dos dados antes de usar modelos sensíveis (SVM, KNN).

  2. Pré-processamento dentro de pipeline para evitar vazamento de dados.

  3. 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)
  1. RandomizedSearch primeiro, seguido de GridSearch refinado para otimização final.

  2. Métricas múltiplas: considerar F1-scoreROC-AUC ou outras métricas além de acurácia.

  3. 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)
  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

  • Detecção de fraude e anomalias

  • 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

Postagens mais visitadas deste blog

Laços de Repetição em Python: Conceitos e Exemplos Práticos

Manipulação de Arquivos no C#: Como Ler, Escrever e Trabalhar com Arquivos de Forma Simples

Como Instalar o Xamarin com C#: Passo a Passo Completo