Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Faça como eu fiz: ajustando modelos de machine learning

# =========================================================
# Atividade: Ajustando modelos de Machine Learning
# Parte 1: Ajuste de Hiperparâmetros (Grid Search) - California Housing
# Parte 2: Seleção de Features (Random Forest) - Diabetes
# =========================================================

# ---------------------------------------------------------
# PARTE 1 - GRID SEARCH: Árvore de Decisão (California Housing)
# ---------------------------------------------------------
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_squared_error

# Carregando o conjunto de dados
dados_habitacao = fetch_california_housing()
atributos = dados_habitacao.data
alvo = dados_habitacao.target

# Separando 25% dos dados para teste
atributos_treino, atributos_teste, alvo_treino, alvo_teste = train_test_split(
    atributos, alvo, test_size=0.25, random_state=7
)

# Grade de hiperparâmetros a ser testada (valores diferentes do material)
grade_parametros = {
    'max_depth': [4, 6, 8, 12, None],
    'min_samples_split': [2, 4, 8, 15],
    'min_samples_leaf': [1, 3, 5],
    'criterion': ['squared_error', 'friedman_mse']
}

arvore = DecisionTreeRegressor(random_state=7)

busca_grid = GridSearchCV(
    estimator=arvore,
    param_grid=grade_parametros,
    cv=4,
    scoring='neg_mean_squared_error',
    n_jobs=-1
)

busca_grid.fit(atributos_treino, alvo_treino)

print("=== PARTE 1: Grid Search - Árvore de Decisão ===")
print(f"Melhor combinação de hiperparâmetros: {busca_grid.best_params_}")

# Avaliando o modelo otimizado nos dados de teste
melhor_modelo = busca_grid.best_estimator_
previsoes = melhor_modelo.predict(atributos_teste)
erro_quadratico = mean_squared_error(alvo_teste, previsoes)
print(f"Erro quadrático médio (teste): {erro_quadratico:.4f}")
print()

# ---------------------------------------------------------
# PARTE 2 - SELEÇÃO DE FEATURES: Random Forest (Diabetes)
# ---------------------------------------------------------
from sklearn.datasets import load_diabetes
from sklearn.ensemble import RandomForestRegressor
import matplotlib.pyplot as plt
import numpy as np

# Carregando o conjunto de dados de diabetes
dados_diabetes = load_diabetes()
atributos_d = dados_diabetes.data
alvo_d = dados_diabetes.target
nomes_atributos = dados_diabetes.feature_names

atributos_d_treino, atributos_d_teste, alvo_d_treino, alvo_d_teste = train_test_split(
    atributos_d, alvo_d, test_size=0.25, random_state=7
)

# Treinando o Random Forest
floresta = RandomForestRegressor(n_estimators=200, random_state=7)
floresta.fit(atributos_d_treino, alvo_d_treino)

# Extraindo e ordenando a importância de cada feature (do maior para o menor)
importancias = floresta.feature_importances_
indices_ordenados = np.argsort(importancias)[::-1]

print("=== PARTE 2: Seleção de Features - Random Forest ===")
print("Ranking de importância das características:")
for posicao, indice in enumerate(indices_ordenados, start=1):
    print(f"{posicao}º - {nomes_atributos[indice]}: {importancias[indice]:.4f}")

# Gráfico de barras horizontais, já ordenado por importância
plt.figure(figsize=(10, 6))
plt.barh(
    [nomes_atributos[i] for i in indices_ordenados],
    importancias[indices_ordenados],
    color='teal'
)
plt.title("Importância das características na previsão de diabetes")
plt.xlabel("Grau de importância")
plt.ylabel("Característica")
plt.gca().invert_yaxis()
plt.tight_layout()
plt.show()
1 resposta

Oi, Everton. Tudo bem com você?

Obrigado por compartilhar sua solução sobre o ajuste de modelos de machine learning. Seu código atende ao objetivo da atividade ao aplicar o Grid Search para ajustar os hiperparâmetros da árvore de decisão no conjunto California Housing e utilizar o Random Forest para identificar a importância das variáveis no conjunto Diabetes. Também é interessante observar que você utilizou valores diferentes dos apresentados no material, o que demonstra iniciativa para explorar outras combinações e comparar o impacto delas no desempenho do modelo.

A separação entre treino e teste, a configuração do GridSearchCV, a utilização do melhor estimador para avaliação e a extração das importâncias das features foram realizadas de forma adequada. Além disso, a ordenação das características e a visualização em gráfico facilitam bastante a interpretação dos resultados obtidos.

Na sua análise, quais características apareceram como as mais importantes e por que você acredita que elas tiveram maior influência nas previsões do modelo?

Parabéns pelo desenvolvimento da atividade. Continue compartilhando suas soluções e experiências. O fórum permanece à disposição para ajudar sempre que precisar.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!