使用PyTorch实现逻辑回归:从训练到模型保存与性能评估

1. 引入必要的库

首先,需要引入必要的库。PyTorch用于构建和训练模型,pandas和numpy用于数据处理,scikit-learn用于计算性能指标。

python 复制代码
import torch
import torch.nn as nn
import torch.optim as optim
import pandas as pd
import numpy as np
from sklearn.metrics import accuracy_score, recall_score, f1_score

2. 加载自定义数据集

假设有一个CSV文件custom_dataset.csv,其中包含特征(自变量)和标签(因变量)。我们使用pandas来加载数据,并进行预处理。

python 复制代码
# 加载自定义数据集
data = pd.read_csv('custom_dataset.csv')

# 假设数据集中有多列特征和一个二分类标签
X = data.iloc[:, :-1].values.astype(np.float32)  # 特征
y = data.iloc[:, -1].values.astype(np.float32)   # 标签

# 将标签转换为0和1
y = np.where(y == 'positive', 1, 0)

3. 构建逻辑回归模型

使用PyTorch来构建逻辑回归模型。

python 复制代码
# 构建逻辑回归模型
class LogisticRegression(nn.Module):
    def __init__(self, num_features):
        super(LogisticRegression, self).__init__()
        self.linear = nn.Linear(num_features, 1)
    
    def forward(self, x):
        return torch.sigmoid(self.linear(x))

# 初始化模型
num_features = X.shape[1]
model = LogisticRegression(num_features)

4. 定义损失函数和优化器

我们使用二元交叉熵损失函数和随机梯度下降(SGD)优化器。

python 复制代码
# 定义损失函数和优化器
criterion = nn.BCELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

5. 训练模型

使用自定义数据集训练模型。

python 复制代码
# 将数据转换为PyTorch的张量
X_tensor = torch.tensor(X)
y_tensor = torch.tensor(y.reshape(-1, 1))

# 训练模型
num_epochs = 100
batch_size = 32
for epoch in range(num_epochs):
    for i in range(0, len(X), batch_size):
        X_batch = X_tensor[i:i+batch_size]
        y_batch = y_tensor[i:i+batch_size]
        
        # 前向传播
        outputs = model(X_batch)
        loss = criterion(outputs, y_batch)
        
        # 反向传播和优化
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        
    if (epoch+1) % 10 == 0:
        print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item()}')

6. 保存模型

训练完成后,我们可以使用PyTorch的state_dict方法保存模型。

python 复制代码
# 保存模型
torch.save(model.state_dict(), 'logistic_regression_model.pth')

7. 加载模型并进行预测

在需要时,我们可以使用PyTorch的load方法加载模型,并进行预测。

python 复制代码
# 加载模型
model = LogisticRegression(num_features)
model.load_state_dict(torch.load('logistic_regression_model.pth'))
model.eval()

# 进行预测
with torch.no_grad():
    X_test = torch.tensor(X[:5])
    predictions = model(X_test)
    predicted_labels = (predictions > 0.5).float().numpy().flatten()

print("Predicted Labels:", predicted_labels)

8. 性能评估

计算预测结果的精确度、召回率和F1分数。

python 复制代码
# 假设前5个样本为测试集,真实标签如下
y_true = y[:5]

# 计算性能指标
accuracy = accuracy_score(y_true, predicted_labels)
recall = recall_score(y_true, predicted_labels)
f1 = f1_score(y_true, predicted_labels)

print(f'Accuracy: {accuracy:.4f}')
print(f'Recall: {recall:.4f}')
print(f'F1 Score: {f1:.4f}')
相关推荐
HuashuiMu花水木6 分钟前
PyTorch笔记3----------统计学相关函数
人工智能·pytorch·笔记
算家计算15 分钟前
6 亿参数玩转 20 + 语言!OuteTTS-1.0-0.6B本地部署教程,轻量模型也能 hold 住跨语言合成
人工智能·开源
柠檬味拥抱15 分钟前
USB‑C 式的工具联接:MCP 的模块化及通用标准探讨
人工智能
柠檬味拥抱20 分钟前
模块化控制协议(MCP)在网络中增强智能体执行效率的研究
人工智能
神经星星24 分钟前
AI 论文周报 | Chai-2刷新抗体设计效率,命中率提高100倍;多篇ICML入围论文一键速览
人工智能·深度学习·机器学习
产品经理独孤虾29 分钟前
人工智能大模型如何助力产品经理优化商品定价策略
人工智能·大模型·产品经理·电子商务·数字营销·智能营销·价格策略
阿里云大数据AI技术1 小时前
数据 + 模型 驱动 AI Native 应用发展
大数据·数据库·人工智能
大明哥_2 小时前
100 个 Coze 精品案例:Coze 全自动情感治愈视频混剪。用 Coze 工作流帮您节约 99% 的时间,从此告别手动!!
人工智能·agent
杨浦老苏2 小时前
IntelliSSH:AI驱动的远程服务器管理软件
人工智能·docker·ai·ssh·群晖
昵称是6硬币2 小时前
(DETR)End-to-End Object Detection with Transformers论文精读(逐段解析)
人工智能·深度学习·目标检测·计算机视觉·transformer