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

1. 引入必要的库

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

python 复制代码
import paddle
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

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. 构建逻辑回归模型

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

python 复制代码
# 构建逻辑回归模型
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)优化器。

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

5. 训练模型

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

python 复制代码
# 将数据转换为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方法保存模型。

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

7. 加载模型并进行预测

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

python 复制代码
# 加载模型
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. 结果可视化

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

python 复制代码
# 这里假设我们在训练过程中记录了损失值
# plt.plot(loss_values, label='Loss')
# plt.title('Model Loss')
# plt.xlabel('Epochs')
# plt.ylabel('Loss')
# plt.legend()
# plt.show()
相关推荐
智慧物业老杨1 小时前
物业日常巡查的数智化重构:从“打卡式巡检“到“闭环式风控“
android·java·人工智能·系统架构·rxjava
吴佳浩4 小时前
Skill 为什么不同于 Tool?Agent 技能库的自演进与动态加载机制
人工智能·agent·ai编程
大模型任我行7 小时前
谷歌:“课程学习”融入扩散模型强化学习
人工智能·语言模型·自然语言处理·论文笔记
AIGCmagic社区7 小时前
具身智能专题:机器人也有Scaling Law?智元GE-Act 2.0用3万小时真机数据给出答案
人工智能·aigc·具身智能
Rosanci8 小时前
谷歌浏览器插件开发实战指南:从 Hello World 到上架发布
大数据·人工智能·chrome·程序人生
明月_清风8 小时前
AI 越来越强,程序员真正的价值到底是什么?
人工智能·后端
m0_466525299 小时前
云从科技上线云起ModelHub:AI团队时代的模型算力基础设施
大数据·人工智能·科技
火山引擎开发者社区9 小时前
OpenViking:给 Codex 加上长期记忆
人工智能
荆棘鸟智能9 小时前
城市感知设备怎么统一接入?从多协议网关到设备模型的中间件架构设计
人工智能·算法·边缘计算
火山引擎开发者社区9 小时前
当 AI 内容真假难辨,谁来为真实签名 —— 证书中心 C2PA 内容可信溯源服务正式发布
人工智能