Usarei o dataset Pima Indians Diabetes para Classificação (prever se o paciente tem ou não diabetes) e o dataset California Housing para Regressão (prever o preço médio das casas).
O que é o Grid Search?
Imagine que você está regulando um rádio: você gira o botão de sintonia e o de volume até achar o som perfeito. O Grid Search faz isso automaticamente, testando exaustivamente uma "grade" de combinações de hiperparâmetros (como a profundidade da árvore) para ver qual gera a maior precisão.
1. Classificação: Pima Indians Diabetes + Grid Search
O objetivo aqui é encontrar a melhor configuração para uma Árvore de Decisão prever o diagnóstico de diabetes.
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.tree import DecisionTreeRegressor # Alterado para DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor # Adicionado RandomForestRegressor
from sklearn.datasets import load_diabetes # Usando carregador similar ou CSV local
import pandas as pd
# Carregando o dataset de diabetes para definir X e y
data = load_diabetes()
X = pd.DataFrame(data.data, columns=data.feature_names)
y = pd.Series(data.target)
# Carregamento hipotético do Pima (assumindo X e y definidos)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Definindo os parâmetros para testar para RandomForestRegressor
param_grid = {
'n_estimators': [10, 50, 100], # Número de árvores na floresta
'max_depth': [3, 5, 10, None],
'min_samples_split': [2, 5, 10],
'criterion': ['squared_error', 'friedman_mse', 'poisson'] # Critérios para regressão
}
grid_search = GridSearchCV(RandomForestRegressor(random_state=42), param_grid, cv=5, n_jobs=-1) # Alterado para RandomForestRegressor
grid_search.fit(X_train, y_train)
print(f"Melhores parâmetros (RandomForestRegressor): {grid_search.best_params_}")
print(f"Melhor Score (RandomForestRegressor): {grid_search.best_score_:.2f}")
Os melhores parâmetros encontrados para o RandomForestRegressor são:
{'criterion':
'squared_error',
'max_depth': 3,
'min_samples_split': 2,
'n_estimators': 100
}.
Melhor Score (RandomForestRegressor): 0.41
2. Regressão: California Housing + Importância das Features
No caso da habitação na Califórnia, queremos prever o valor do imóvel. Após treinar o modelo, gostaria de identificar o que influencia a previsão.
A Árvore de Decisão calcula o quanto cada variável reduziu os erro nos nós.
MedInc (Renda Média): Quase sempre a variável mais crítica.
AveOccup (Ocupação Média): O número de pessoas por residência.
Longitude/Latitude: A localização geográfica é determinante.
Implementação do Grid Search
Para realizar o ajuste de hiperparâmetros com Grid Search e analisar a Importância das Features no dataset California Housing, seguimos um fluxo de trabalho que busca o equilíbrio entre a complexidade do modelo e a precisão das previsões.
O GridSearchCV testa todas as combinações possíveis de hiperparâmetros que você definir. Para uma Árvore de Decisão, os parâmetros mais comuns são a profundidade máxima e o número mínimo de amostras por folha.
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.tree import DecisionTreeRegressor
# Carregando os dados
data = fetch_california_housing()
X, y = data.data, data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Definindo o "Grid" de parâmetros
param_grid = {
'max_depth': [3, 5, 10, 20],
'min_samples_split': [2, 10, 20],
'criterion': ['squared_error', 'friedman_mse']
}
grid_search = GridSearchCV(DecisionTreeRegressor(), param_grid, cv=5)
grid_search.fit(X_train, y_train)
print(f"Melhores parâmetros: {grid_search.best_params_}")
Melhores parâmetros: {'criterion': 'friedman_mse', 'max_depth': 10, 'min_samples_split': 20}
Identificando a Importância das Features
Após o fit, o modelo armazena a importância de cada variável baseada na redução da impureza de Gini ou, no caso de regressão, na redução do Erro Quadrático Médio (MSE).
MedInc (Median Income): Frequentemente detém mais de 70% da "importância". Isso ocorre porque a renda é o preditor direto do poder de compra em um mercado imobiliário.
Localização (Lat/Long): Em modelos de árvore, a latitude e longitude ajudam a "segmentar" o mapa da Califórnia. O modelo aprende que coordenadas específicas que reduzem drasticamente o erro da previsão.
AveOccup: Reflete a densidade. Valores muito altos podem indicar habitações multifamiliares ou áreas mais pobres, o que impacta negativamente o preço.