Por Que Ajustar Modelos?
Um modelo treinado nem sempre oferece o melhor desempenho possível. Existem dois fatores críticos que influenciam esse resultado:
- Hiperparâmetros inadequados diminuem a precisão do modelo
- Variáveis irrelevantes adicionam ruído às previsões
Portanto, precisamos responder: Quais são os melhores valores de hiperparâmetros? Quais features realmente importam?
Técnica 1: Grid Search para Ajuste de Hiperparâmetros
Passo a passo no Google Colab:
from sklearn.datasets import fetch_california_housing
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.preprocessing import LabelBinarizer
import numpy as np
# Carregar dados
data = fetch_california_housing()
X = data.data
y = (data.target > np.median(data.target)).astype(int)
# Dividir dados
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Definir parâmetros a testar
param_grid = {
'max_depth': [3, 5, 7, 10],
'min_samples_split': [2, 5, 10],
'min_samples_leaf': [1, 2, 4]
}
# Grid Search
grid_search = GridSearchCV(DecisionTreeClassifier(random_state=42), param_grid, cv=5)
grid_search.fit(X_train, y_train)
print(f"Melhores parâmetros: {grid_search.best_params_}")
print(f"Melhor score: {grid_search.best_score_:.4f}")
print(f"Score no teste: {grid_search.score(X_test, y_test):.4f}")
Técnica 2: Feature Importance para Seleção de Características
Aplicando ao dataset Pima Indians Diabetes:
from sklearn.datasets import load_diabetes
from sklearn.ensemble import RandomForestRegressor
import pandas as pd
# Carregar dados de diabetes
diabetes = load_diabetes()
X = diabetes.data
y = diabetes.target
# Treinar modelo
modelo = RandomForestRegressor(random_state=42)
modelo.fit(X, y)
# Extrair importância das features
importancia = modelo.feature_importances_
features = diabetes.feature_names
# Organizar em ordem decrescente
df_importancia = pd.DataFrame({
'Feature': features,
'Importância': importancia
}).sort_values('Importância', ascending=False)
print(df_importancia)
# Visualizar
import matplotlib.pyplot as plt
plt.barh(df_importancia['Feature'], df_importancia['Importância'])
plt.xlabel('Importância')
plt.title('Importância das Features na Previsão de Diabetes')
plt.show()