Лінійна Регресія
Ми використаємо реальний набір даних для реалізації лінійної регресії у 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()
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
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()
Дякуємо за ваш відгук!