Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Regressão Linear | Conceitos Mais Avançados
Essenciais do PyTorch

bookRegressão Linear

Usaremos um conjunto de dados real para implementar a regressão linear no PyTorch. O conjunto de dados contém duas colunas:

  • 'Number of Appliances': o número de aparelhos em uma residência (característica de entrada, X);
  • 'Electricity Bill': o valor correspondente da conta de energia elétrica (saída alvo, Y).

1. Carregando e Inspecionando o Conjunto de Dados

O conjunto de dados está armazenado em um arquivo CSV. Vamos carregá-lo usando pandas e inspecionar as primeiras linhas:

12345
import pandas as pd # Load the dataset bills_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/electricity_bills.csv') # Display the first five rows print(bills_df.head())
copy

2. Preparando os Dados para o PyTorch

Em seguida, é necessário extrair as colunas de entrada X e alvo Y, convertê-las em tensores do PyTorch e redimensioná-las para tensores 2D para garantir compatibilidade com as operações do PyTorch:

12345678910
import torch import pandas as pd # Load the dataset bills_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/electricity_bills.csv') # Extract input (Number of Appliances) and target (Electricity Bill) X = torch.tensor(bills_df['Number of Appliances'].values).float().reshape(-1, 1) Y = torch.tensor(bills_df['Electricity Bill'].values).float().reshape(-1, 1) # Print the shapes of X and Y print(f"Shape of X: {X.shape}") print(f"Shape of Y: {Y.shape}")
copy

3. Definindo o Modelo Linear

O módulo nn.Linear no PyTorch define uma camada totalmente conectada, realizando y = xWT + b. É um bloco fundamental em redes neurais e pode ser combinado com outras camadas para arquiteturas mais complexas.

Seus principais parâmetros são:

  • in_features: número de características de entrada (variáveis independentes);
  • out_features: número de características de saída (valores previstos).

Para regressão linear simples, como neste caso, prevê-se uma única saída com base em uma entrada. Assim:

  • in_features=1: uma variável de entrada;
  • out_features=1: um valor previsto.
import torch.nn as nn
# Define the linear regression model
model = nn.Linear(in_features=1, out_features=1)

4. Definindo a Função de Perda e o Otimizador

Utilizaremos o erro quadrático médio (MSE) como função de perda e o gradiente descendente estocástico (SGD) como otimizador, com a taxa de aprendizado igual a 0.005.

A função de perda MSE pode ser definida utilizando a classe nn.MSELoss, e o SGD utilizando a respectiva classe do módulo torch.optim.

import torch.optim as optim
# Define the loss function (MSE)
loss_fn = nn.MSELoss()
# Define the optimizer (SGD)
optimizer = optim.SGD(model.parameters(), lr=0.005)

5. Treinando o Modelo

O treinamento envolve a realização de um passo para frente e um passo para trás por um número especificado de épocas.

  • Passo para frente: esta etapa calcula as previsões do modelo com base nos dados de entrada e calcula a perda comparando as previsões com os valores reais do alvo;
  • Passo para trás: esta etapa calcula os gradientes utilizando a retropropagação (com base na perda) e atualiza os pesos e vieses do modelo utilizando um algoritmo de otimização, que neste caso é o SGD.

Esse processo se repete pelo número especificado de épocas para minimizar a perda e melhorar o desempenho do modelo.

1234567891011121314151617181920212223242526272829303132333435
import torch import torch.nn as nn import torch.optim as optim import pandas as pd # Load the dataset bills_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/electricity_bills.csv') # Extract input (Number of Appliances) and target (Electricity Bill) X = torch.tensor(bills_df['Number of Appliances'].values).float().reshape(-1, 1) Y = torch.tensor(bills_df['Electricity Bill'].values).float().reshape(-1, 1) # Define the linear regression model model = nn.Linear(in_features=1, out_features=1) # Define the loss function (MSE) loss_fn = nn.MSELoss() # Define the optimizer (SGD) optimizer = optim.SGD(model.parameters(), lr=0.005) # Training loop epochs = 100 for epoch in range(epochs): # Forward pass Y_pred = model(X) loss = loss_fn(Y_pred, Y) # Backward pass optimizer.zero_grad() # Reset gradients loss.backward() # Compute gradients # Update parameters optimizer.step() if (epoch + 1) % 10 == 0: print(f"Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}") # Final parameters print(f"Trained weight: {model.weight.item()}") print(f"Trained bias: {model.bias.item()}")
copy

Os parâmetros do modelo, ou seja, seus pesos e viéses, podem ser acessados usando os atributos .weight e .bias:

weights = model.weight.item()
biases = model.bias.item()
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 3

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Awesome!

Completion rate improved to 5

bookRegressão Linear

Deslize para mostrar o menu

Usaremos um conjunto de dados real para implementar a regressão linear no PyTorch. O conjunto de dados contém duas colunas:

  • 'Number of Appliances': o número de aparelhos em uma residência (característica de entrada, X);
  • 'Electricity Bill': o valor correspondente da conta de energia elétrica (saída alvo, Y).

1. Carregando e Inspecionando o Conjunto de Dados

O conjunto de dados está armazenado em um arquivo CSV. Vamos carregá-lo usando pandas e inspecionar as primeiras linhas:

12345
import pandas as pd # Load the dataset bills_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/electricity_bills.csv') # Display the first five rows print(bills_df.head())
copy

2. Preparando os Dados para o PyTorch

Em seguida, é necessário extrair as colunas de entrada X e alvo Y, convertê-las em tensores do PyTorch e redimensioná-las para tensores 2D para garantir compatibilidade com as operações do PyTorch:

12345678910
import torch import pandas as pd # Load the dataset bills_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/electricity_bills.csv') # Extract input (Number of Appliances) and target (Electricity Bill) X = torch.tensor(bills_df['Number of Appliances'].values).float().reshape(-1, 1) Y = torch.tensor(bills_df['Electricity Bill'].values).float().reshape(-1, 1) # Print the shapes of X and Y print(f"Shape of X: {X.shape}") print(f"Shape of Y: {Y.shape}")
copy

3. Definindo o Modelo Linear

O módulo nn.Linear no PyTorch define uma camada totalmente conectada, realizando y = xWT + b. É um bloco fundamental em redes neurais e pode ser combinado com outras camadas para arquiteturas mais complexas.

Seus principais parâmetros são:

  • in_features: número de características de entrada (variáveis independentes);
  • out_features: número de características de saída (valores previstos).

Para regressão linear simples, como neste caso, prevê-se uma única saída com base em uma entrada. Assim:

  • in_features=1: uma variável de entrada;
  • out_features=1: um valor previsto.
import torch.nn as nn
# Define the linear regression model
model = nn.Linear(in_features=1, out_features=1)

4. Definindo a Função de Perda e o Otimizador

Utilizaremos o erro quadrático médio (MSE) como função de perda e o gradiente descendente estocástico (SGD) como otimizador, com a taxa de aprendizado igual a 0.005.

A função de perda MSE pode ser definida utilizando a classe nn.MSELoss, e o SGD utilizando a respectiva classe do módulo torch.optim.

import torch.optim as optim
# Define the loss function (MSE)
loss_fn = nn.MSELoss()
# Define the optimizer (SGD)
optimizer = optim.SGD(model.parameters(), lr=0.005)

5. Treinando o Modelo

O treinamento envolve a realização de um passo para frente e um passo para trás por um número especificado de épocas.

  • Passo para frente: esta etapa calcula as previsões do modelo com base nos dados de entrada e calcula a perda comparando as previsões com os valores reais do alvo;
  • Passo para trás: esta etapa calcula os gradientes utilizando a retropropagação (com base na perda) e atualiza os pesos e vieses do modelo utilizando um algoritmo de otimização, que neste caso é o SGD.

Esse processo se repete pelo número especificado de épocas para minimizar a perda e melhorar o desempenho do modelo.

1234567891011121314151617181920212223242526272829303132333435
import torch import torch.nn as nn import torch.optim as optim import pandas as pd # Load the dataset bills_df = pd.read_csv('https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_2/electricity_bills.csv') # Extract input (Number of Appliances) and target (Electricity Bill) X = torch.tensor(bills_df['Number of Appliances'].values).float().reshape(-1, 1) Y = torch.tensor(bills_df['Electricity Bill'].values).float().reshape(-1, 1) # Define the linear regression model model = nn.Linear(in_features=1, out_features=1) # Define the loss function (MSE) loss_fn = nn.MSELoss() # Define the optimizer (SGD) optimizer = optim.SGD(model.parameters(), lr=0.005) # Training loop epochs = 100 for epoch in range(epochs): # Forward pass Y_pred = model(X) loss = loss_fn(Y_pred, Y) # Backward pass optimizer.zero_grad() # Reset gradients loss.backward() # Compute gradients # Update parameters optimizer.step() if (epoch + 1) % 10 == 0: print(f"Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}") # Final parameters print(f"Trained weight: {model.weight.item()}") print(f"Trained bias: {model.bias.item()}")
copy

Os parâmetros do modelo, ou seja, seus pesos e viéses, podem ser acessados usando os atributos .weight e .bias:

weights = model.weight.item()
biases = model.bias.item()
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 3
some-alt