使用PaddlePaddle实现逻辑回归:从训练到模型保存与加载

server/2025/2/4 4:05:35/

1. 引入必要的库

首先,需要引入必要的库。PaddlePaddle用于构建和训练模型,pandas和numpy用于数据处理,matplotlib用于结果的可视化。

import paddle
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

2. 加载自定义数据集

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

# 加载自定义数据集
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. 构建逻辑回归模型

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

# 构建逻辑回归模型
class LogisticRegression(paddle.nn.Layer):def __init__(self, num_features):super(LogisticRegression, self).__init__()self.linear = paddle.nn.Linear(num_features, 1)def forward(self, x):return paddle.sigmoid(self.linear(x))# 初始化模型
num_features = X.shape[1]
model = LogisticRegression(num_features)

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

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

# 定义损失函数和优化器
criterion = paddle.nn.BCELoss()
optimizer = paddle.optimizer.SGD(learning_rate=0.01, parameters=model.parameters())

5. 训练模型

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

# 将数据转换为PaddlePaddle的张量
X_tensor = paddle.to_tensor(X)
y_tensor = paddle.to_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)# 反向传播和优化loss.backward()optimizer.step()optimizer.clear_grad()if (epoch+1) % 10 == 0:print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.numpy()}')

6. 保存模型

训练完成后,可以使用PaddlePaddle的save方法保存模型。

# 保存模型
paddle.save(model.state_dict(), 'logistic_regression_model.pdparams')

7. 加载模型并进行预测

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

# 加载模型
model = LogisticRegression(num_features)
model.set_state_dict(paddle.load('logistic_regression_model.pdparams'))
model.eval()# 进行预测
X_test = paddle.to_tensor(X[:5])
predictions = model(X_test)
predicted_labels = (predictions > 0.5).astype(int)print("Predicted Labels:", predicted_labels.numpy().flatten())

8. 结果可视化

如果需要,可以绘制训练过程中的损失变化曲线,以帮助理解模型的性能。

# 这里假设我们在训练过程中记录了损失值
# plt.plot(loss_values, label='Loss')
# plt.title('Model Loss')
# plt.xlabel('Epochs')
# plt.ylabel('Loss')
# plt.legend()
# plt.show()


http://www.ppmy.cn/server/164797.html

相关文章

【算法学习笔记】36:中国剩余定理(Chinese Remainder Theorem)求解线性同余方程组

中国剩余定理 假定存在 m 1 . . m k m_1..m_k m1​..mk​两两互质,中国剩余定理旨在求解这样的线性同余方程组中的 x x x: x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) . . . x ≡ a k ( m o d m k ) x \equiv a_1~(mod~m_1) \\ x \equiv a_2~(mod…

【面经】字节南京一面部分题目记录

南京字节一面题,可能因为项目不太匹配,全程八股比较多,也有两道手撕代码题,强度还是有的。为了方便大家学习,大部分答案由GPT整理,有些题给出了我认为回答比较好的博客链接。 文章目录 一、python2 和 pyth…

C# 继承与多态详解

.NET学习资料 .NET学习资料 .NET学习资料 在 C# 面向对象编程中,继承与多态是两个极为关键的特性,它们赋予了程序强大的复用性和灵活性。理解并掌握这两个特性,是成为一名优秀 C# 开发者的必经之路。 一、C# 继承 1.1 继承的定义与概念 …

Pyside6(PyQT5)的QSqlQueryModel的常用方法

QSqlQueryModel 是 PySide6 中一个用于执行 SQL 查询并处理查询结果的模型类。它可以方便地将查询结果展示在视图组件中,如 QTableView 或 QListView。以下是 QSqlQueryModel 的一些常用方法: 1. setQuery(query, dbNone) 参数: query: SQL 查询字符串…

C++——list的了解和使用

目录 引言 forward_list与list 标准库中的list 一、list的常用接口 1.list的迭代器 2.list的初始化 3.list的容量操作 4.list的访问操作 5.list的修改操作 6.list的其他操作 二、list与vector的对比 结束语 引言 本篇博客要介绍的是STL中的list。 求点赞收藏评论…

Elasticsearch 指南 [8.17] | Search APIs

Search API 返回与请求中定义的查询匹配的搜索结果。 http GET /my-index-000001/_search Request GET /<target>/_search GET /_search POST /<target>/_search POST /_search Prerequisites 如果启用了 Elasticsearch 安全功能&#xff0c;针对目标数据流…

TikTok 推出了一款 IDE,用于快速构建 AI 应用

字节跳动(TikTok 的母公司)刚刚推出了一款名为 Trae 的新集成开发环境(IDE)。 Trae 基于 Visual Studio Code(VS Code)构建,继承了这个熟悉的平台,并加入了 AI 工具,帮助开发者更快、更轻松地构建应用——有时甚至无需编写任何代码。 如果你之前使用过 Cursor AI,T…

NLP模型大对比:Transformer >Seq2Seq > LSTM > RNN > n-gram

结论 Transformer 大于 传统的Seq2Seq 大于 LSTM 大于 RNN 大于 传统的n-gram n-gram VS Transformer 我们可以用一个 图书馆查询 的类比来解释它们的差异&#xff1a; 一、核心差异对比 维度n-gram 模型Transformer工作方式固定窗口的"近视观察员"全局关联的&q…