Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Лінійна Регресія | Більш Просунуті Концепції
Основи PyTorch

bookЛінійна Регресія

Ми використаємо реальний набір даних для реалізації лінійної регресії у PyTorch. Набір даних містить два стовпці:

  • 'Number of Appliances': кількість приладів у домогосподарстві (вхідна ознака, X);
  • 'Electricity Bill': відповідна сума рахунку за електроенергію (цільовий вихід, Y).

1. Завантаження та огляд набору даних

Набір даних зберігається у файлі CSV. Ми завантажимо його за допомогою pandas та переглянемо перші кілька рядків:

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. Підготовка даних для PyTorch

Далі необхідно виділити стовпці вхідних даних X та цільових значень Y, перетворити їх у тензори PyTorch та змінити форму на двовимірні тензори для забезпечення сумісності з операціями 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. Визначення лінійної моделі

Модуль nn.Linear у PyTorch визначає повнозв'язний шар, що виконує y = xWT + b. Це базовий елемент нейронних мереж, який можна комбінувати з іншими шарами для створення складніших архітектур.

Основні параметри:

  • 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.

Цей процес повторюється протягом заданої кількості епох для мінімізації втрат і покращення продуктивності моделі.

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

Параметри моделі, а саме її ваги та зміщення, можна отримати за допомогою атрибутів .weight та .bias:

weights = model.weight.item()
biases = model.bias.item()
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 3

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Awesome!

Completion rate improved to 5

bookЛінійна Регресія

Свайпніть щоб показати меню

Ми використаємо реальний набір даних для реалізації лінійної регресії у PyTorch. Набір даних містить два стовпці:

  • 'Number of Appliances': кількість приладів у домогосподарстві (вхідна ознака, X);
  • 'Electricity Bill': відповідна сума рахунку за електроенергію (цільовий вихід, Y).

1. Завантаження та огляд набору даних

Набір даних зберігається у файлі CSV. Ми завантажимо його за допомогою pandas та переглянемо перші кілька рядків:

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. Підготовка даних для PyTorch

Далі необхідно виділити стовпці вхідних даних X та цільових значень Y, перетворити їх у тензори PyTorch та змінити форму на двовимірні тензори для забезпечення сумісності з операціями 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. Визначення лінійної моделі

Модуль nn.Linear у PyTorch визначає повнозв'язний шар, що виконує y = xWT + b. Це базовий елемент нейронних мереж, який можна комбінувати з іншими шарами для створення складніших архітектур.

Основні параметри:

  • 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.

Цей процес повторюється протягом заданої кількості епох для мінімізації втрат і покращення продуктивності моделі.

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

Параметри моделі, а саме її ваги та зміщення, можна отримати за допомогою атрибутів .weight та .bias:

weights = model.weight.item()
biases = model.bias.item()
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 3
some-alt