Лінійна Регресія
Ми використаємо реальний набір даних для реалізації лінійної регресії у PyTorch. Набір даних містить два стовпці:
'Number of Appliances'
: кількість приладів у домогосподарстві (вхідна ознака,X
);'Electricity Bill'
: відповідна сума рахунку за електроенергію (цільовий вихід,Y
).
1. Завантаження та огляд набору даних
Набір даних зберігається у файлі CSV. Ми завантажимо його за допомогою pandas
та переглянемо перші кілька рядків:
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. Підготовка даних для PyTorch
Далі необхідно виділити стовпці вхідних даних X
та цільових значень Y
, перетворити їх у тензори PyTorch та змінити форму на двовимірні тензори для забезпечення сумісності з операціями 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. Визначення лінійної моделі
Модуль nn.Linear
у PyTorch визначає повнозв'язний шар, що виконує y = xW
Основні параметри:
in_features
: кількість вхідних ознак (незалежних змінних);out_features
: кількість вихідних ознак (прогнозованих значень).
Для простої лінійної регресії, як у нашому випадку, прогнозується одне вихідне значення на основі однієї вхідної ознаки. Тобто:
in_features=1
: одна вхідна змінна;out_features=1
: одне прогнозоване значення.
import torch.nn as nn
# Define the linear regression model
model = nn.Linear(in_features=1, out_features=1)
4. Визначення функції втрат і оптимізатора
Ми використаємо середньоквадратичну помилку (MSE) як функцію втрат і стохастичний градієнтний спуск (SGD) як оптимізатор із швидкістю навчання 0.005
.
Втрати MSE можна визначити за допомогою класу nn.MSELoss
, а SGD — за допомогою відповідного класу з модуля 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. Навчання моделі
Навчання включає виконання прямого проходу та зворотного проходу протягом заданої кількості епох.
- Прямий прохід: цей крок обчислює передбачення моделі на основі вхідних даних і обчислює втрати, порівнюючи передбачення з фактичними цільовими значеннями;
- Зворотний прохід: цей крок обчислює градієнти за допомогою зворотного поширення помилки (на основі втрат) і оновлює ваги та зсуви моделі за допомогою алгоритму оптимізації, яким у нашому випадку є SGD.
Цей процес повторюється протягом заданої кількості епох для мінімізації втрат і покращення продуктивності моделі.
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()}")
Параметри моделі, а саме її ваги та зміщення, можна отримати за допомогою атрибутів .weight
та .bias
:
weights = model.weight.item()
biases = model.bias.item()
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
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
Лінійна Регресія
Свайпніть щоб показати меню
Ми використаємо реальний набір даних для реалізації лінійної регресії у PyTorch. Набір даних містить два стовпці:
'Number of Appliances'
: кількість приладів у домогосподарстві (вхідна ознака,X
);'Electricity Bill'
: відповідна сума рахунку за електроенергію (цільовий вихід,Y
).
1. Завантаження та огляд набору даних
Набір даних зберігається у файлі CSV. Ми завантажимо його за допомогою pandas
та переглянемо перші кілька рядків:
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. Підготовка даних для PyTorch
Далі необхідно виділити стовпці вхідних даних X
та цільових значень Y
, перетворити їх у тензори PyTorch та змінити форму на двовимірні тензори для забезпечення сумісності з операціями 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. Визначення лінійної моделі
Модуль nn.Linear
у PyTorch визначає повнозв'язний шар, що виконує y = xW
Основні параметри:
in_features
: кількість вхідних ознак (незалежних змінних);out_features
: кількість вихідних ознак (прогнозованих значень).
Для простої лінійної регресії, як у нашому випадку, прогнозується одне вихідне значення на основі однієї вхідної ознаки. Тобто:
in_features=1
: одна вхідна змінна;out_features=1
: одне прогнозоване значення.
import torch.nn as nn
# Define the linear regression model
model = nn.Linear(in_features=1, out_features=1)
4. Визначення функції втрат і оптимізатора
Ми використаємо середньоквадратичну помилку (MSE) як функцію втрат і стохастичний градієнтний спуск (SGD) як оптимізатор із швидкістю навчання 0.005
.
Втрати MSE можна визначити за допомогою класу nn.MSELoss
, а SGD — за допомогою відповідного класу з модуля 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. Навчання моделі
Навчання включає виконання прямого проходу та зворотного проходу протягом заданої кількості епох.
- Прямий прохід: цей крок обчислює передбачення моделі на основі вхідних даних і обчислює втрати, порівнюючи передбачення з фактичними цільовими значеннями;
- Зворотний прохід: цей крок обчислює градієнти за допомогою зворотного поширення помилки (на основі втрат) і оновлює ваги та зсуви моделі за допомогою алгоритму оптимізації, яким у нашому випадку є SGD.
Цей процес повторюється протягом заданої кількості епох для мінімізації втрат і покращення продуктивності моделі.
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()}")
Параметри моделі, а саме її ваги та зміщення, можна отримати за допомогою атрибутів .weight
та .bias
:
weights = model.weight.item()
biases = model.bias.item()
Дякуємо за ваш відгук!