笔记3:逻辑回归(分批次训练)
转自:https://www.cnblogs.com/miraclepbc/p/14332084.html
相关库导入
import torch
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from torch import nn
%matplotlib inline
数据读入及预处理
data = pd.read_csv('E:/datasets/dataset/credit-a.csv', header = None)
X_data = data.iloc[:, :-1].values
X = torch.from_numpy(X_data).type(torch.float32)
Y_data = data.iloc[:, -1].replace(-1, 0).values.reshape(-1, 1)
Y = torch.from_numpy(Y_data).type(torch.float32)
这里有几个关键点:
- 数据没有表头,因此在读入的时候要设置 header = None
- data.iloc[] 可以获得相应的数据。返回的是Series类型,用values可以获得数值数组
- 类别是-1和1,二分类问题,因此可以用replace()方法将标签为-1的转换为0
- 要注意转换数据的shape,以及数据的类型
模型定义
model = nn.Sequential(
nn.Linear(15, 1),
nn.Sigmoid()
)
loss_func = nn.BCELoss()
optimizer = torch.optim.Adam(model.parameters(), lr = 0.0001)
关键点:
- nn.Sequential() 定义一个模型序列
- 损失函数使用交叉熵损失函数
- 优化器使用Adam
相关参数定义
batch_size = 16
num_batch = len(data) // batch_size
epochs = 1000
模型训练
for epoch in range(epochs):
for batch in range(num_batch):
start = batch * batch_size
end = start + batch_size
x = X[start: end]
y = Y[start: end]
y_pred = model(x)
loss = loss_func(y_pred, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
这里使用的是手动切分数据
训练结果
model.modules #查看模型架构
model.state_dict() # 查看训练得到的参数
((model(X).data.numpy() > 0.5).astype('int') == Y.numpy()).mean() # 查看正确率,输出结果为 0.8667687595712098
注意:
- 模型训练之后,model(X)已经不是单纯的数据了,而是包含data,grad,grad_fn
- 与 0.5 比较之后,返回bool值,因此需要类型转换一下
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2023-06-04 Kubescape入门