使用 Numpy 自定义数据集,使用pytorch框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测,对预测结果计算精确度和召回率及F1分数

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 分数。

相关推荐
IT_陈寒2 小时前
JavaScript 性能优化:5 个被低估的 V8 引擎技巧让你的代码快 200%
前端·人工智能·后端
Juchecar3 小时前
一文讲清 PyTorch 中反向传播(Backpropagation)的实现原理
人工智能
黎燃3 小时前
游戏NPC的智能行为设计:从规则驱动到强化学习的演进
人工智能
机器之心3 小时前
高阶程序,让AI从技术可行到商业可信的最后一公里
人工智能·openai
martinzh3 小时前
解锁RAG高阶密码:自适应、多模态、个性化技术深度剖析
人工智能
机器之心4 小时前
刚刚,李飞飞空间智能新成果震撼问世!3D世界生成进入「无限探索」时代
人工智能·openai
scilwb4 小时前
Isaac Sim机械臂教程 - 阶段1:基础环境搭建与机械臂加载
人工智能·开源
舒一笑4 小时前
TorchV企业级AI知识引擎的三大功能支柱:从构建到运营的技术解析
人工智能
掘金酱4 小时前
🎉 2025年8月金石计划开奖公示
前端·人工智能·后端
鹏多多5 小时前
纯前端人脸识别利器:face-api.js手把手深入解析教学
前端·javascript·人工智能