1. 導入必要的庫
首先,導入我們需要的庫:Numpy、Pytorch 和相關工具包。
import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim
from sklearn.metrics import accuracy_score, recall_score, f1_score
2. 自定義數據集
使用 Numpy 創建一個簡單的線性可分數據集,并將其轉換為 Pytorch 張量。
# 創建數據集
X = np.random.rand(100, 2) # 100 個樣本,2 個特征
y = (X[:, 0] + X[:, 1] > 1).astype(int) # 標簽,若特征之和大于1則為 1,否則為 0# 轉換為 PyTorch 張量
X_train = torch.tensor(X, dtype=torch.float32)
y_train = torch.tensor(y, dtype=torch.long)
3. 定義邏輯回歸模型
在 Pytorch 中定義一個簡單的邏輯回歸模型。
class LogisticRegressionModel(nn.Module):def __init__(self, input_dim):super(LogisticRegressionModel, self).__init__()self.linear = nn.Linear(input_dim, 2) # 二分類問題def forward(self, x):return self.linear(x)
4. 初始化模型、損失函數和優化器
# 初始化模型
model = LogisticRegressionModel(input_dim=2)# 損失函數與優化器
criterion = nn.CrossEntropyLoss() # 交叉熵損失函數
optimizer = optim.SGD(model.parameters(), lr=0.01)
5. 訓練模型
訓練模型并保存訓練好的權重。
epochs = 100
for epoch in range(epochs):# 前向傳播outputs = model(X_train)loss = criterion(outputs, y_train)# 反向傳播optimizer.zero_grad()loss.backward()optimizer.step()if (epoch+1) % 20 == 0:print(f"Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}")# 保存模型
torch.save(model.state_dict(), 'logistic_regression.pth')
6. 加載模型并進行預測
加載保存的模型并進行預測。
# 加載模型
model = LogisticRegressionModel(input_dim=2)
model.load_state_dict(torch.load('logistic_regression.pth'))
model.eval() # 設為評估模式# 預測
with torch.no_grad():y_pred = model(X_train)_, predicted = torch.max(y_pred, 1)
7. 計算精確度、召回率和 F1 分數
使用 sklearn
中的評估函數計算精確度、召回率和 F1 分數。
accuracy = accuracy_score(y_train, predicted)
recall = recall_score(y_train, predicted)
f1 = f1_score(y_train, predicted)print(f"Accuracy: {accuracy:.4f}")
print(f"Recall: {recall:.4f}")
print(f"F1 Score: {f1:.4f}")
8. 總結
這篇博客展示了如何使用 Numpy 自定義數據集,利用 Pytorch 框架實現邏輯回歸模型,并進行訓練。訓練后的模型被保存,并在加載后進行預測,最后計算了精確度、召回率和 F1 分數。