Ao treinar um modelo de machine learning, surgem questões importantes:
Como encontrar os melhores parâmetros para um modelo?
Como identificar quais variáveis realmente influenciam as previsões?
Para responder a isso, utilizamos duas técnicas principais:
Ajuste de Hiperparâmetros → busca dos melhores valores internos do modelo.
Seleção de Features → identificação das variáveis mais relevantes.
Vamos aplicar essas ideias em dois cenários:
Regressão com o dataset California Housing
Regressão/estimativa com o dataset diabetes (scikit-learn)
Ajuste de hiperparâmetros com Grid Search (Decision Tree)
##### Carregamento e preparação dos dados #####
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
# Carrega o dataset de preços de imóveis da Califórnia
california = fetch_california_housing()
# X = variáveis independentes (features)
X = california.data
# y = variável alvo (preço do imóvel)
y = california.target
# Divide em treino (70%) e teste (30%)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42
)
##### Grid Search para otimização do modelo #####
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import GridSearchCV
# Definição dos hiperparâmetros que serão testados
param_grid = {
'max_depth': [3, 5, 7, 10], # profundidade da árvore
'min_samples_split': [2, 5, 10], # mínimo para dividir nó
'min_samples_leaf': [1, 2, 4] # mínimo por folha
}
# Modelo base
model = DecisionTreeRegressor()
# Grid Search com validação cruzada
grid_search = GridSearchCV(
model,
param_grid,
cv=5,
scoring='neg_mean_squared_error'
)
# Treina todas as combinações possíveis
grid_search.fit(X_train, y_train)
# Melhor conjunto de parâmetros encontrado
print("Melhores parâmetros:", grid_search.best_params_)
Seleção de features com Random Forest
##### Preparação dos dados #####
import pandas as pd
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
# Carrega dataset de diabetes
diabetes = load_diabetes()
X = diabetes.data
y = diabetes.target
# Divide em treino e teste
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42
)
##### Treinando Random Forest e extraindo importância #####
from sklearn.ensemble import RandomForestRegressor
import matplotlib.pyplot as plt
# Criação e treino do modelo
model = RandomForestRegressor(random_state=42)
model.fit(X_train, y_train)
# Importância das features
importances = model.feature_importances_
feature_names = diabetes.feature_names
##### Visualização da importância das variáveis #####
plt.figure(figsize=(10, 6))
plt.barh(feature_names, importances)
plt.title("Importância das Features")
plt.xlabel("Importância")
plt.ylabel("Variável")
plt.show()