Fundamentos do Machine Learning com Python

0/25 aulas0%
projeto

Construção e Treinamento de um Modelo de ML no Projeto (Scikit-learn)

Aprenda sobre construção e treinamento de um modelo de ml no projeto (scikit-learn)

90 min
Aula 3 de 5

Construção e Treinamento de um Modelo de ML no Projeto (Scikit-learn)

Olá, futuro especialista em Machine Learning! 👋 Nesta aula crucial do nosso módulo de Projeto Prático, vamos mergulhar na etapa central de qualquer projeto de ML: a construção e o treinamento do seu modelo. Até agora, você aprendeu a preparar seus dados; agora é hora de usá-los para dar vida a um modelo preditivo!

Utilizaremos a biblioteca Scikit-learn (também conhecida como sklearn), a ferramenta padrão ouro em Python para Machine Learning, que segue uma API consistente e intuitiva, facilitando muito o nosso trabalho.


🎯 1. Introdução: Do Dado ao Modelo Inteligente

Depois de gastar um tempo valioso limpando, transformando e selecionando features, o próximo passo lógico é escolher um algoritmo de Machine Learning e "ensinar" a ele os padrões presentes nos seus dados. Este processo, conhecido como treinamento do modelo, é onde o algoritmo aprende a mapear as features de entrada para o valor ou categoria de saída que você deseja prever.

Nesta aula, cobriremos as etapas fundamentais para construir e treinar um modelo usando o Scikit-learn, garantindo que você siga as melhores práticas para obter resultados confiáveis e reprodutíveis.


📚 2. Explicação Detalhada com Exemplos

Vamos seguir um fluxo de trabalho comum no Scikit-learn, usando um exemplo prático de regressão para prever um valor contínuo.

2.1. Preparação dos Dados (Recapitulando)

Antes de construir o modelo, precisamos ter nossos dados prontos:

  • Features (X): As variáveis de entrada que o modelo usará para fazer previsões.
  • Target (y): A variável de saída que o modelo tentará prever.

Para este exemplo, vamos simular alguns dados.

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import joblib # Para salvar e carregar o modelo
 
# 📚 Gerando dados de exemplo para regressão
np.random.seed(42) # Para reprodutibilidade
X = np.random.rand(100, 3) * 10 # 100 amostras, 3 features
y = 2 * X[:, 0] + 1.5 * X[:, 1] - 0.5 * X[:, 2] + np.random.randn(100) * 2 + 5 # y = f(X) + ruído
 
print("Formato de X:", X.shape)
print("Formato de y:", y.shape)

2.2. Divisão dos Dados: Treino e Teste 📊

Uma das melhores práticas mais importantes em Machine Learning é dividir seus dados em conjuntos de treino e teste.

  • Conjunto de Treino: Usado para treinar o modelo.
  • Conjunto de Teste: Usado para avaliar o desempenho do modelo em dados não vistos. Isso nos dá uma estimativa mais realista de como o modelo se comportará no mundo real.

A função train_test_split do Scikit-learn é perfeita para isso!

# 🚀 Dividindo os dados em conjuntos de treino e teste
# test_size=0.2 significa que 20% dos dados serão para teste
# random_state=42 garante que a divisão seja a mesma toda vez que você rodar o código
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
 
print(f"Dados de Treino: X_train={X_train.shape}, y_train={y_train.shape}")
print(f"Dados de Teste: X_test={X_test.shape}, y_test={y_test.shape}")

2.3. Escolhendo e Instanciando o Modelo 🤖

O Scikit-learn oferece uma vasta gama de algoritmos para diferentes tipos de problemas (regressão, classificação, clustering, etc.). A escolha do modelo depende do seu problema e das características dos seus dados.

Para nosso exemplo de regressão, vamos usar a Regressão Linear, um modelo simples e interpretável.

  1. Importe o modelo: from sklearn.linear_model import LinearRegression
  2. Instancie o modelo: model = LinearRegression(fit_intercept=True)
    • Aqui, fit_intercept é um hiperparâmetro. Hiperparâmetros são configurações do algoritmo que não são aprendidas a partir dos dados, mas sim definidas pelo usuário. Eles controlam o comportamento do processo de aprendizado.
# 🧠 Escolhendo e instanciando o modelo
# Para regressão, vamos usar a Regressão Linear
# Documentação oficial: https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html
model = LinearRegression(fit_intercept=True) # fit_intercept=True é o padrão e geralmente uma boa prática
print("Modelo instanciado:", model)

2.4. Treinando o Modelo (Fit) 💪

Esta é a etapa onde o modelo "aprende" com os dados de treino. O método fit() é universal no Scikit-learn para treinar qualquer modelo. Ele recebe as features de treino (X_train) e os targets de treino (y_train).

# 🏋️‍♀️ Treinando o modelo com os dados de treino
model.fit(X_train, y_train)
 
print(f"Coeficientes (pesos) do modelo: {model.coef_}")
print(f"Intercepto do modelo: {model.intercept_}")

2.5. Fazendo Previsões 🔮

Após o treinamento, o modelo está pronto para fazer previsões em novos dados. Usamos o método predict() para isso, passando as features do conjunto de teste (X_test).

# 📈 Fazendo previsões nos dados de teste
y_pred = model.predict(X_test)
 
print("Primeiras 5 previsões:", y_pred[:5])
print("Primeiros 5 valores reais (y_test):", y_test[:5])

2.6. Avaliando o Modelo 📊

A avaliação é crucial para entender quão bem o seu modelo está performando e se ele é adequado para o seu problema. Para problemas de regressão, métricas comuns incluem:

  • Mean Squared Error (MSE): Média dos erros quadráticos. Penaliza erros maiores.
  • Root Mean Squared Error (RMSE): Raiz quadrada do MSE. Mais interpretável, na mesma escala do target.
  • R-squared (R²): Coeficiente de determinação. Indica a proporção da variância na variável dependente que é previsível a partir das variáveis independentes. Varia de 0 a 1 (ou menos para modelos muito ruins), onde 1 é um ajuste perfeito.
# 🔍 Avaliando o desempenho do modelo
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse) # RMSE é a raiz quadrada do MSE
r2 = r2_score(y_test, y_pred)
 
print(f"Mean Squared Error (MSE): {mse:.2f}")
print(f"Root Mean Squared Error (RMSE): {rmse:.2f}")
print(f"R-squared (R²): {r2:.2f}")
 
# Um R² próximo de 1 indica um bom ajuste. Um MSE/RMSE baixo também é desejável.

2.7. Persistência do Modelo (Salvando e Carregando) 💾

Depois de treinar um modelo e ficar satisfeito com seu desempenho, você não quer ter que treiná-lo novamente toda vez que precisar usá-lo. A persistência do modelo permite salvar o modelo treinado em um arquivo e carregá-lo posteriormente.

A biblioteca joblib é a opção recomendada pelo Scikit-learn para modelos grandes ou que contenham muitos objetos NumPy. pickle é uma alternativa mais genérica.

# 💾 Salvando o modelo treinado
model_filename = 'linear_regression_model.joblib'
joblib.dump(model, model_filename)
print(f"Modelo salvo como '{model_filename}'")
 
# 🔄 Carregando o modelo salvo
loaded_model = joblib.load(model_filename)
print("Modelo carregado:", loaded_model)
 
# ✅ Verificando se o modelo carregado funciona
y_pred_loaded = loaded_model.predict(X_test)
mse_loaded = mean_squared_error(y_test, y_pred_loaded)
print(f"MSE com modelo carregado: {mse_loaded:.2f}")
# Deve ser o mesmo MSE que calculamos antes, confirmando que o modelo foi carregado corretamente.

📋 3. Exercícios e Desafios (Projeto Prático)

Agora é a sua vez de colocar a mão na massa! 🚀

Para este projeto prático, você trabalhará com um dataset real de preços de casas (um problema clássico de regressão).

Tarefas:

  • 1. Carregue o Dataset:

    • Utilize o dataset California Housing do Scikit-learn.
    • from sklearn.datasets import fetch_california_housing
    • housing = fetch_california_housing(as_frame=True)
    • Separe X (features) e y (target MedHouseVal).
  • 2. Divida os Dados:

    • Divida X e y em conjuntos de treino e teste (80% treino, 20% teste).
    • Use random_state=42 para reprodutibilidade.
  • 3. Experimente Diferentes Modelos de Regressão:

    • Modelo A: Regressão Linear
      • Instancie e treine um LinearRegression.
      • Faça previsões.
      • Calcule e imprima o MSE, RMSE e .
    • Modelo B: Árvore de Decisão para Regressão
      • Importe DecisionTreeRegressor de sklearn.tree.
      • Instancie e treine um DecisionTreeRegressor (experimente com max_depth como 5 ou 10).
      • Faça previsões.
      • Calcule e imprima o MSE, RMSE e .
    • Modelo C: Random Forest para Regressão
      • Importe RandomForestRegressor de sklearn.ensemble.
      • Instancie e treine um RandomForestRegressor (experimente com n_estimators=100, random_state=42).
      • Faça previsões.
      • Calcule e imprima o MSE, RMSE e .
  • 4. Compare os Modelos:

    • Qual modelo teve o melhor desempenho (menor MSE/RMSE, maior R²)?
    • Pense sobre as vantagens e desvantagens de cada um (complexidade, interpretabilidade).
  • 5. Salve o Melhor Modelo:

    • Salve o modelo que teve o melhor desempenho em um arquivo .joblib.
  • 6. Carregue e Teste o Modelo Salvo:

    • Carregue o modelo salvo e faça uma previsão simples para verificar se ele funciona.

📝 4. Resumo e Próximos Passos

Parabéns! Você acaba de dar um passo gigantesco na construção de modelos de Machine Learning. Nesta aula, você aprendeu a:

  • Dividir seus dados em conjuntos de treino e teste para uma avaliação justa.
  • Escolher e instanciar um algoritmo de ML do Scikit-learn.
  • Treinar seu modelo usando o método fit().
  • Fazer previsões com o método predict().
  • Avaliar o desempenho do seu modelo usando métricas relevantes.
  • Salvar e carregar modelos treinados para reutilização.

Este é o ciclo fundamental de construção de modelos. No entanto, o Machine Learning é um campo de otimização contínua.

Próximos Passos:

  • Otimização de Hiperparâmetros: Como escolher os melhores valores para max_depth ou n_estimators? Veremos técnicas como GridSearchCV e RandomizedSearchCV.
  • Validação Cruzada: Uma técnica mais robusta para avaliar o desempenho do modelo e evitar overfitting.
  • Pipelines de ML: Como organizar todas as etapas (pré-processamento, modelo) em um fluxo de trabalho único e eficiente.
  • Implantação de Modelos: Como levar seu modelo treinado para produção, onde ele pode ser usado por outras aplicações.

Continue praticando, experimentando diferentes modelos e explorando a vasta documentação do Scikit-learn. O aprendizado contínuo é a chave para se tornar um mestre em Machine Learning! 🚀

© 2025 Escola All Dev. Todos os direitos reservados.

Construção e Treinamento de um Modelo de ML no Projeto (Scikit-learn) - Fundamentos do Machine Learning com Python | escola.all.dev.br