Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Lineær Regression | Mere Avancerede Begreber
PyTorch Essentials

bookLineær Regression

Vi vil bruge et rigtigt datasæt til at implementere lineær regression i PyTorch. Datasættet indeholder to kolonner:

  • 'Number of Appliances': antallet af apparater i en husstand (inputfunktion, X);
  • 'Electricity Bill': det tilsvarende elregningsbeløb (måloutput, Y).

1. Indlæsning og inspektion af datasættet

Datasættet er gemt i en CSV-fil. Vi indlæser det ved hjælp af pandas og inspicerer de første par rækker:

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. Forberedelse af data til PyTorch

Dernæst skal vi udtrække inputkolonnen X og målkolonnen Y, konvertere dem til PyTorch-tensorer og omforme dem til 2D-tensorer for at sikre kompatibilitet med PyTorchs operationer:

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. Definition af den lineære model

Modulet nn.Linear i PyTorch definerer et fuldt forbundet lag, der udfører y = xWT + b. Det er en grundlæggende byggesten i neurale netværk og kan kombineres med andre lag for mere komplekse arkitekturer.

Dets vigtigste parametre er som følger:

  • in_features: antal inputfunktioner (uafhængige variabler);
  • out_features: antal outputfunktioner (forudsagte værdier).

For simpel lineær regression, som i dette tilfælde, forudsiges en enkelt output baseret på én input. Derfor:

  • in_features=1: én inputvariabel;
  • out_features=1: én forudsagt værdi.
import torch.nn as nn
# Define the linear regression model
model = nn.Linear(in_features=1, out_features=1)

4. Definition af tab-funktion og optimeringsalgoritme

Vi anvender mean squared error (MSE) som tab-funktion og stochastic gradient descent (SGD) som optimeringsalgoritme med en læringsrate sat til 0.005.

MSE-tab kan defineres ved brug af nn.MSELoss-klassen, og SGD ved brug af den tilsvarende klasse fra torch.optim-modulet.

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. Træning af modellen

Træning indebærer at udføre et forward pass og et backward pass i et angivet antal epoker.

  • Forward pass: dette trin beregner modellens forudsigelser baseret på inputdata og beregner tabet ved at sammenligne forudsigelserne med de faktiske målværdier;
  • Backward pass: dette trin beregner gradienter ved hjælp af backpropagation (baseret på tabet) og opdaterer modellens vægte og bias ved hjælp af en optimeringsalgoritme, som i dette tilfælde er SGD.

Denne proces gentages for det angivne antal epoker for at minimere tabet og forbedre modellens ydeevne.

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

Parametrene for modellen, nemlig dens vægte og bias, kan tilgås ved hjælp af attributterne .weight og .bias:

weights = model.weight.item()
biases = model.bias.item()
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 3

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

bookLineær Regression

Stryg for at vise menuen

Vi vil bruge et rigtigt datasæt til at implementere lineær regression i PyTorch. Datasættet indeholder to kolonner:

  • 'Number of Appliances': antallet af apparater i en husstand (inputfunktion, X);
  • 'Electricity Bill': det tilsvarende elregningsbeløb (måloutput, Y).

1. Indlæsning og inspektion af datasættet

Datasættet er gemt i en CSV-fil. Vi indlæser det ved hjælp af pandas og inspicerer de første par rækker:

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. Forberedelse af data til PyTorch

Dernæst skal vi udtrække inputkolonnen X og målkolonnen Y, konvertere dem til PyTorch-tensorer og omforme dem til 2D-tensorer for at sikre kompatibilitet med PyTorchs operationer:

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. Definition af den lineære model

Modulet nn.Linear i PyTorch definerer et fuldt forbundet lag, der udfører y = xWT + b. Det er en grundlæggende byggesten i neurale netværk og kan kombineres med andre lag for mere komplekse arkitekturer.

Dets vigtigste parametre er som følger:

  • in_features: antal inputfunktioner (uafhængige variabler);
  • out_features: antal outputfunktioner (forudsagte værdier).

For simpel lineær regression, som i dette tilfælde, forudsiges en enkelt output baseret på én input. Derfor:

  • in_features=1: én inputvariabel;
  • out_features=1: én forudsagt værdi.
import torch.nn as nn
# Define the linear regression model
model = nn.Linear(in_features=1, out_features=1)

4. Definition af tab-funktion og optimeringsalgoritme

Vi anvender mean squared error (MSE) som tab-funktion og stochastic gradient descent (SGD) som optimeringsalgoritme med en læringsrate sat til 0.005.

MSE-tab kan defineres ved brug af nn.MSELoss-klassen, og SGD ved brug af den tilsvarende klasse fra torch.optim-modulet.

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. Træning af modellen

Træning indebærer at udføre et forward pass og et backward pass i et angivet antal epoker.

  • Forward pass: dette trin beregner modellens forudsigelser baseret på inputdata og beregner tabet ved at sammenligne forudsigelserne med de faktiske målværdier;
  • Backward pass: dette trin beregner gradienter ved hjælp af backpropagation (baseret på tabet) og opdaterer modellens vægte og bias ved hjælp af en optimeringsalgoritme, som i dette tilfælde er SGD.

Denne proces gentages for det angivne antal epoker for at minimere tabet og forbedre modellens ydeevne.

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

Parametrene for modellen, nemlig dens vægte og bias, kan tilgås ved hjælp af attributterne .weight og .bias:

weights = model.weight.item()
biases = model.bias.item()
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 3
some-alt