Régression Linéaire
Nous utiliserons un jeu de données réel pour implémenter la régression linéaire avec PyTorch. Le jeu de données contient deux colonnes :
'Number of Appliances'
: le nombre d'appareils électroménagers dans un foyer (variable d'entrée,X
) ;'Electricity Bill'
: le montant correspondant de la facture d'électricité (variable cible,Y
).
1. Chargement et inspection du jeu de données
Le jeu de données est stocké dans un fichier CSV. Nous allons le charger avec pandas
et examiner les premières lignes :
12345import 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())
2. Préparation des données pour PyTorch
Ensuite, il convient d'extraire les colonnes d'entrée X
et de cible Y
, de les convertir en tenseurs PyTorch, puis de les remodeler en tenseurs 2D afin d'assurer leur compatibilité avec les opérations de PyTorch :
12345678910import 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}")
3. Définition du modèle linéaire
Le module nn.Linear
de PyTorch définit une couche entièrement connectée, réalisant y = xW
Ses paramètres principaux sont les suivants :
in_features
: nombre de caractéristiques d'entrée (variables indépendantes) ;out_features
: nombre de caractéristiques de sortie (valeurs prédites).
Pour une régression linéaire simple, comme dans notre cas, on prédit une seule sortie à partir d'une seule entrée. Ainsi :
in_features=1
: une variable d'entrée ;out_features=1
: une valeur prédite.
import torch.nn as nn
# Define the linear regression model
model = nn.Linear(in_features=1, out_features=1)
4. Définition de la fonction de perte et de l'optimiseur
Nous utiliserons la moyenne des erreurs quadratiques (MSE) comme fonction de perte et la descente de gradient stochastique (SGD) comme optimiseur avec un taux d'apprentissage égal à 0.005
.
La perte MSE peut être définie à l'aide de la classe nn.MSELoss
, et SGD à l'aide de la classe correspondante du module 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. Entraînement du modèle
L'entraînement consiste à effectuer un passage avant et un passage arrière pendant un nombre spécifié d'époques.
- Passage avant : cette étape calcule les prédictions du modèle à partir des données d'entrée et calcule la perte en comparant les prédictions aux valeurs cibles réelles ;
- Passage arrière : cette étape calcule les gradients à l'aide de la rétropropagation (basée sur la perte) et met à jour les poids et biais du modèle à l'aide d'un algorithme d'optimisation, qui est SGD dans notre cas.
Ce processus se répète pour le nombre d'époques spécifié afin de minimiser la perte et d'améliorer les performances du modèle.
1234567891011121314151617181920212223242526272829303132333435import 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()}")
Les paramètres du modèle, à savoir ses poids et biais, sont accessibles via les attributs .weight
et .bias
:
weights = model.weight.item()
biases = model.bias.item()
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
Can you explain how to interpret the trained weight and bias values?
How can I use the trained model to make predictions on new data?
What does the loss value tell us about the model's performance?
Awesome!
Completion rate improved to 5
Régression Linéaire
Glissez pour afficher le menu
Nous utiliserons un jeu de données réel pour implémenter la régression linéaire avec PyTorch. Le jeu de données contient deux colonnes :
'Number of Appliances'
: le nombre d'appareils électroménagers dans un foyer (variable d'entrée,X
) ;'Electricity Bill'
: le montant correspondant de la facture d'électricité (variable cible,Y
).
1. Chargement et inspection du jeu de données
Le jeu de données est stocké dans un fichier CSV. Nous allons le charger avec pandas
et examiner les premières lignes :
12345import 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())
2. Préparation des données pour PyTorch
Ensuite, il convient d'extraire les colonnes d'entrée X
et de cible Y
, de les convertir en tenseurs PyTorch, puis de les remodeler en tenseurs 2D afin d'assurer leur compatibilité avec les opérations de PyTorch :
12345678910import 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}")
3. Définition du modèle linéaire
Le module nn.Linear
de PyTorch définit une couche entièrement connectée, réalisant y = xW
Ses paramètres principaux sont les suivants :
in_features
: nombre de caractéristiques d'entrée (variables indépendantes) ;out_features
: nombre de caractéristiques de sortie (valeurs prédites).
Pour une régression linéaire simple, comme dans notre cas, on prédit une seule sortie à partir d'une seule entrée. Ainsi :
in_features=1
: une variable d'entrée ;out_features=1
: une valeur prédite.
import torch.nn as nn
# Define the linear regression model
model = nn.Linear(in_features=1, out_features=1)
4. Définition de la fonction de perte et de l'optimiseur
Nous utiliserons la moyenne des erreurs quadratiques (MSE) comme fonction de perte et la descente de gradient stochastique (SGD) comme optimiseur avec un taux d'apprentissage égal à 0.005
.
La perte MSE peut être définie à l'aide de la classe nn.MSELoss
, et SGD à l'aide de la classe correspondante du module 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. Entraînement du modèle
L'entraînement consiste à effectuer un passage avant et un passage arrière pendant un nombre spécifié d'époques.
- Passage avant : cette étape calcule les prédictions du modèle à partir des données d'entrée et calcule la perte en comparant les prédictions aux valeurs cibles réelles ;
- Passage arrière : cette étape calcule les gradients à l'aide de la rétropropagation (basée sur la perte) et met à jour les poids et biais du modèle à l'aide d'un algorithme d'optimisation, qui est SGD dans notre cas.
Ce processus se répète pour le nombre d'époques spécifié afin de minimiser la perte et d'améliorer les performances du modèle.
1234567891011121314151617181920212223242526272829303132333435import 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()}")
Les paramètres du modèle, à savoir ses poids et biais, sont accessibles via les attributs .weight
et .bias
:
weights = model.weight.item()
biases = model.bias.item()
Merci pour vos commentaires !