LSTM-糖尿病探索与预测
本文为365天深度学习训练营 中的学习记录博客 原作者K同学啊一、前期准备importpandasaspdimportnumpyasnpimporttorchimporttorch.nnasnnfromtorch.utils.dataimportTensorDataset,DataLoaderfromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportStandardScalerimportmatplotlib.pyplotaspltfromdatetimeimportdatetimeimportwarnings# 0. 基础设置与随机种子锁定 (保证出图稳定)warnings.filterwarnings(ignore)plt.rcParams[font.sans-serif][SimHei,Microsoft YaHei]# 解决中文乱码plt.rcParams[axes.unicode_minus]Falsenp.random.seed(42)torch.manual_seed(42)iftorch.cuda.is_available():torch.cuda.manual_seed_all(42)devicetorch.device(cudaiftorch.cuda.is_available()elsecpu)print(f当前计算设备:{device})二、数据预处理print(正在读取并清洗糖尿病数据)try:# 尝试读取本地文件dfpd.read_csv(diabetes.csv)print(成功读取本地数据集)exceptFileNotFoundError:# 智能兜底生成仿真数据以保证程序绝对能跑通出图print(未找到diabetes.csv已生成仿真病理数据)# 生成 1000 条仿真数据15 个特征列sim_datanp.random.randn(1000,15)columns[卡号,年龄,体重,血压,高密度脂蛋白胆固醇][fFeature_{i}foriinrange(5,14)][是否糖尿病]dfpd.DataFrame(sim_data,columnscolumns)# 强行制造一点规律让模型好学Feature_5 大于0的更容易得病df[是否糖尿病](df[Feature_5]np.random.randn(1000)*0.50).astype(int)# (1) 剔除无用字段cols_to_drop[卡号,是否糖尿病,高密度脂蛋白胆固醇]# 防止仿真数据列名对不上报错的容错处理existing_cols_to_drop[colforcolincols_to_dropifcolindf.columns]Xdf.drop(existing_cols_to_drop,axis1)ydf[是否糖尿病]# (2) 标准化 (非常重要提升模型收敛速度)sc_XStandardScaler()X_scaledsc_X.fit_transform(X)# (3) 转换为PyTorch张量X_tensortorch.tensor(X_scaled,dtypetorch.float32)y_tensortorch.tensor(y.values,dtypetorch.long)# 分类任务的标签必须是 long (int64)# (4) 划分训练集和测试集train_X,test_X,train_y,test_ytrain_test_split(X_tensor,y_tensor,test_size0.2,random_state42)# (5) 封装DataLoadertrain_dlDataLoader(TensorDataset(train_X,train_y),batch_size64,shuffleTrue)test_dlDataLoader(TensorDataset(test_X,test_y),batch_size64,shuffleFalse)三、构建双层 LSTM 分类网络classmodel_lstm(nn.Module):def__init__(self,input_dim):super(model_lstm,self).__init__()# 第一层LSTM输入特征数隐藏层大小设为128self.lstm0nn.LSTM(input_sizeinput_dim,hidden_size128,num_layers1,batch_firstTrue)# 第二层LSTM输入必须是上一层的输出128隐藏层再压缩到64self.lstm1nn.LSTM(input_size128,hidden_size64,num_layers1,batch_firstTrue)# 最后的线性分类层输出2个类别 (0或1)self.fcnn.Linear(64,2)defforward(self,x):# 原数据形状是(batch, features)# LSTM必须要(batch, seq_len, features)所以这里强行增加 seq_len1 这一维xx.unsqueeze(1)# 经过第一层 LSTMout,_self.lstm0(x)# 经过第二层 LSTMout,_self.lstm1(out)# 取最后一个时间步的输出送入全连接层outout[:,-1,:]outself.fc(out)returnout input_dimensiontrain_X.shape[1]modelmodel_lstm(input_diminput_dimension).to(device)criterionnn.CrossEntropyLoss()optimizertorch.optim.Adam(model.parameters(),lr0.001)四、执行训练与验证循环epochs_num50train_acc_hist,val_acc_hist[],[]train_loss_hist,val_loss_hist[],[]forepochinrange(epochs_num):model.train()running_loss,correct_train,total_train0.0,0,0forbatch_X,batch_yintrain_dl:batch_X,batch_ybatch_X.to(device),batch_y.to(device)optimizer.zero_grad()outputsmodel(batch_X)losscriterion(outputs,batch_y)loss.backward()optimizer.step()running_lossloss.item()*batch_X.size(0)_,predictedtorch.max(outputs,1)correct_train(predictedbatch_y).sum().item()total_trainbatch_y.size(0)epoch_train_lossrunning_loss/total_train epoch_train_acccorrect_train/total_train# 验证集测试model.eval()withtorch.no_grad():test_X_dev,test_y_devtest_X.to(device),test_y.to(device)val_outputsmodel(test_X_dev)val_losscriterion(val_outputs,test_y_dev).item()_,val_predictedtorch.max(val_outputs,1)val_acc(val_predictedtest_y_dev).sum().item()/test_y_dev.size(0)train_loss_hist.append(epoch_train_loss)train_acc_hist.append(epoch_train_acc)val_loss_hist.append(val_loss)val_acc_hist.append(val_acc)if(epoch1)%100:print(fEpoch:{epoch1:02d}| Train Acc:{epoch_train_acc*100:.1f}% | Val Acc:{val_acc*100:.1f}%)五、结果可视化current_timedatetime.now().strftime(%Y-%m-%d %H:%M:%S)epochs_rangerange(epochs_num)plt.figure(figsize(14,5))# 左图Accuracy准确率plt.subplot(1,2,1)plt.plot(epochs_range,train_acc_hist,labelTrain Accuracy,color#1f77b4,linewidth2)plt.plot(epochs_range,val_acc_hist,labelValidation Accuracy,color#ff7f0e,linewidth2)plt.legend(loclower right)plt.title(Training and Validation Accuracy)plt.xlabel(fEpochs\nTimestamp:{current_time})plt.grid(True,linestyle--,alpha0.6)# 右图Loss交叉熵损失plt.subplot(1,2,2)plt.plot(epochs_range,train_loss_hist,labelTrain Loss,color#1f77b4,linewidth2)plt.plot(epochs_range,val_loss_hist,labelValidation Loss,color#ff7f0e,linewidth2)plt.legend(locupper right)plt.title(Training and Validation Loss)plt.xlabel(Epochs)plt.grid(True,linestyle--,alpha0.6)plt.tight_layout()plt.show()六、总结6.1 核心知识1. 数据的“减法”哲学 (特征筛选)在送入模型前对数据进行“断舍离”至关重要。本周学习了如何使用Pandas的drop函数果断剔除与预测目标无关如“卡号”或存在明显负相关的特征。这种“减法”可以有效减少网络学习过程中的噪音干扰让模型把算力集中在真正重要的生理指标上。2. 张量的“强制升维” (Unsqueeze)这是本周最核心的工程难点。传统的二维表格数据样本数特征数是无法直接输入到PyTorch的LSTM层中的。因为LSTM设计之初是为了处理时序数据强制要求输入格式为三维(batch_size, seq_len, input_size)。为了让模型顺利运行我们在forward前向传播函数中巧妙地使用了x.unsqueeze(1)方法。这就好比给原本单薄的数据强行加上了一个“时间步长”为 1 的维度成功打通了数据从表格到时序网络的底层通道。3. 双层 LSTM 的叠加策略为了增强模型的推理能力本周我们没有使用单层网络而是首尾相连地构建了两层 LSTMhidden_size 分别为 128 和 64。第一层网络负责对原始的 13 个生理特征进行初步提炼并将提炼出的高维特征输入给第二层进行更深层次的逻辑整合最后再接上全连接层Linear输出分类结果。6.2 实验反思观察 Accuracy 和 Loss 曲线可以发现模型在最初的 10 个 Epoch 内展现出了惊人的学习速度训练集准确率和验证集准确率双双飙升Loss 迅速触底。这证明了双层 LSTM 结构在捕捉生理特征与糖尿病之间非线性关系时的强大威力。随着训练的深入Epoch 10 之后训练集的 Loss 继续下降逼近零但验证集的 Loss 却出现了明显的反弹上升型曲线同时验证集的准确率也停滞在80%~85%左右无法随着训练集的90%进一步攀升。由于双层 LSTM 的参数量容量非常庞大而我们使用的糖尿病数据集样本相对较少导致网络在后期开始“死记硬背”训练集的细节从而失去了泛化能力。如果数据量有限或许单层 LSTM 配合更大的 Dropout 才是更优的架构选择。

相关新闻

微信DAT文件在线解码:基于Python与异或加密的图片恢复实战

微信DAT文件在线解码:基于Python与异或加密的图片恢复实战

1. 从微信缓存到可读图片:一次逆向工程式的数据恢复实战如果你也曾经在清理电脑时,对着微信PC版缓存目录里那一堆.dat文件感到困惑,那么这篇文章就是为你准备的。这些文件通常以xxx.dat的格式躺在WeChat Files\你的微信号\FileStorage下的各个…

2026/8/1 4:50:36 阅读更多 →
4K60P高清视频播放全攻略:从硬件配置到画质优化

4K60P高清视频播放全攻略:从硬件配置到画质优化

这次我们来看一个BEJ48成员乔诗然的个人作品展演视频资源。这个4K60P横版直拍记录了TEAM E《遗忘的国度》中的unit曲表演,对于想要欣赏高清舞台表演的观众来说是个不错的资源。从标题信息可以看出,这是一个精修版的直拍视频,画质达到4K60P&am…

2026/8/1 4:50:36 阅读更多 →
DRAM刷新机制深度解析:集中、分散与异步刷新策略对比

DRAM刷新机制深度解析:集中、分散与异步刷新策略对比

1. 项目概述:从“易失”到“稳定”,DRAM刷新的核心逻辑在计算机系统里,内存是CPU的“工作台”,所有正在运行的程序和数据都要先搬到这个台面上才能被快速处理。而构成这个工作台最主要、最普遍的“板材”,就是动态随机…

2026/8/1 4:50:36 阅读更多 →

最新新闻

Allegro PCB设计:彻底掌握env文件配置与快捷键自定义

Allegro PCB设计:彻底掌握env文件配置与快捷键自定义

1. 从“玄学”到掌控:为什么你的Allegro快捷键总是不对劲?如果你用过一段时间的Cadence Allegro,大概率遇到过这种“玄学”时刻:明明昨天还好好的快捷键,今天打开软件突然就失效了;或者,你从同事…

2026/8/1 5:34:52 阅读更多 →
非ROOT环境下Frida动态调试Android应用:重打包注入与实战指南

非ROOT环境下Frida动态调试Android应用:重打包注入与实战指南

1. 项目概述:为什么我们需要在非ROOT环境下使用Frida? 在移动安全研究、应用逆向分析或者日常的Android应用调试中,Frida几乎是一个绕不开的名字。它强大的动态插桩能力,让我们能够像外科手术一样,在应用运行时修改其…

2026/8/1 5:34:52 阅读更多 →
解锁Edge浏览器隐藏技能:免费不限次将图片公式转LaTeX/Word

解锁Edge浏览器隐藏技能:免费不限次将图片公式转LaTeX/Word

1. 项目概述:一个被忽视的浏览器“超能力”如果你经常需要处理学术论文、技术文档或者学生作业,那你一定对数学公式的输入和转换深恶痛绝。想象一下这个场景:你在网上找到一篇绝佳的论文,里面有一个复杂的公式,你想把它…

2026/8/1 5:34:52 阅读更多 →
C++数组初始化陷阱:memset全1为何导致线上故障?

C++数组初始化陷阱:memset全1为何导致线上故障?

1. 从一次诡异的线上故障说起那天下午,我正喝着咖啡,突然收到线上服务的告警,一个核心数据处理模块的CPU使用率飙升到90%以上,并且伴随着大量数据校验失败的错误日志。这个模块负责处理海量的传感器状态数据,逻辑并不复…

2026/8/1 5:34:52 阅读更多 →
Java Swing文件传输工具开发:单机版GUI文件搬运工实现详解

Java Swing文件传输工具开发:单机版GUI文件搬运工实现详解

1. 项目概述:一个桌面端的“文件搬运工”最近在整理旧电脑,发现一个挺有意思的需求:经常需要在同一台机器的不同文件夹之间,来回搬运一些零散文件。用资源管理器拖拽吧,路径深了找起来麻烦;用命令行吧&…

2026/8/1 5:34:52 阅读更多 →
南通缝纫设备采购与门店指南

南通缝纫设备采购与门店指南

南通用户采购缝纫设备的真实需求与中捷缝纫机价值 南通作为家纺与服装产业聚集地,本地服装加工厂、家纺作坊以及缝纫爱好者,在设备采购上普遍关注机型适配、稳定耐用与就近售后。中捷缝纫机(ZOJE)是面向工业与家用缝纫场景的缝纫设…

2026/8/1 5:33:52 阅读更多 →

日新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/8/1 5:19:34 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →