深度学习实战41-基于LSTM-GRU模型搭建对糖尿病数据的预测与应用

大家好,我是微学AI,今天给大家介绍一下深度学习实战41-基于LSTM-GRU模型搭建对糖尿病数据的预测与应用,本文将向大家介绍一种基于LSTM-GRU的糖尿病预测模型,包括模型的原理、中文糖尿病csv数据样例、利用PyTorch框架进行模型训练与预测的实现、以及训练过程中准确率和损失值的打印的全流程。

文章目录:

  1. 介绍
  2. LSTM与GRU的原理
  3. 数据样例
  4. 数据加载
  5. 模型构建
  6. 模型训练与预测
  7. 结论

1. 介绍

随着糖尿病患者数量的上升,对糖尿病的预测和控制变得越来越重要。近年来,深度学习方法在时间序列数据的分析上取得了显著的进展,其中基于长短时记忆网络(LSTM)和门控循环单元(GRU)的模型在许多应用中表现优异。本文将介绍一种基于LSTM-GRU的糖尿病预测模型,通过对中文糖尿病csv数据进行分析,利用PyTorch框架进行模型的训练与预测。

2. LSTM与GRU的原理

2.1 LSTM

长短时记忆网络(LSTM)是一种特殊的循环神经网络(RNN),能够学习长序列数据中的依赖关系。LSTM通过引入门控机制解决了传统RNN在处理长序列时梯度消失和梯度爆炸的问题。

LSTM包含三个门:输入门、遗忘门和输出门。输入门决定输入的信息是否被加入到记忆细胞中,遗忘门决定记忆细胞中的过去信息是否被保留,输出门决定最终的输出值。

2.2 GRU

门控循环单元(GRU)是LSTM的一种变体,它将LSTM的遗忘门和输入门合并为一个更新门,同时将记忆细胞和隐藏状态合并。这样,GRU可以在减少参数数量的同时保持很好的性能。

LSTM与GRU模型结合的好处

将LSTM(长短期记忆网络)与GRU(门控循环单元)模型结合在一起可以带来以下好处:

1.更好的模型灵活性:LSTM和GRU是两种常见的循环神经网络架构,它们在建模时有不同的优势。LSTM通过输入、遗忘和输出门来控制信息的流动和存储,适用于需要长期记忆的序列建模任务。而GRU则通过更新门和重置门来实现信息的更新和选择性记忆,适用于对最近的输入更加敏感的任务。将两者结合在一起可以使模型具有更好的灵活性,能够同时捕捉长期依赖和短期变化。

2.更快的训练速度:由于GRU模型相对于LSTM模型参数更少,所以在一些情况下,使用LSTM和GRU的组合模型可以实现相对较快的训练速度。这对于大规模数据集或计算资源有限的环境下是非常有益的。

3.更好的泛化能力:通过结合LSTM和GRU模型,可以尽可能地充分利用两种模型的优势,并且可以根据具体任务进行调整和调优。这样可以提高模型的泛化能力,使其在不同的序列建模任务中表现得更好。

4.更强的表示能力:LSTM和GRU模型都具有良好的表示能力,通过将它们结合在一起,可以进一步增强模型的表示能力。这对于复杂的序列数据建模任务非常重要,可以提高模型对输入序列的抽象和理解能力。
在这里插入图片描述

3. 数据样例

以下是一些中文糖尿病csv数据样例:

年龄,性别,身高,体重,收缩压,舒张压,空腹血糖,糖尿病
45,男,175,83,130,85,5.6,否
58,女,162,62,140,90,7.2,是
32,男,180,90,120,80,5.2,否
67,女,155,72,150,95,8.1,是
51,男,168,75,135,88,6.5,是
39,女,170,63,122,78,4.9,否
62,男,176,85,148,92,6.0,是
56,女,160,70,142,93,7.9,是
29,男,182,92,116,78,4.6,否
58,女,168,68,130,85,6.2,是
43,男,177,80,124,80,5.4,否
63,女,157,74,148,91,7.6,是
35,男,181,87,118,76,6.2,否
53,女,165,67,137,88,6.8,是
46,男,173,78,132,86,6.0,否
61,女,163,71,145,92,8.3,是
28,男,179,88,114,74,4.4,否
50,女,166,65,134,87,6.6,是
38,男,174,82,126,81,5.7,否
59,女,161,69,144,94,7.8,是
31,男,178,84,120,77,4.9,否
55,女,159,73,139,90,7.4,是
40,男,175,81,130,84,5.9,否
64,女,156,76,147,94,8.0,是

4. 数据加载

首先,我们需要加载数据并对其进行预处理。这里,我们使用pandas库来处理csv数据:

import pandas as pd# 读取csv数据
data = pd.read_csv("diabetes.csv")# 将性别和糖尿病标签转为数值
data["性别"] = data["性别"].map({"男": 0, "女": 1})
data["糖尿病"] = data["糖尿病"].map({"否": 0, "是": 1})# 数据归一化处理
for column in ["年龄", "身高", "体重", "收缩压", "舒张压", "空腹血糖"]:data[column] = (data[column] - data[column].min()) / (data[column].max() - data[column].min())# 划分训练集和测试集
from sklearn.model_selection import train_test_splitX = data.drop(columns=["性别","糖尿病"])
y = data["糖尿病"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 转换为PyTorch张量
import torch
from torch.utils.data import TensorDataset, DataLoadertrain_data = TensorDataset(torch.tensor(X_train.values, dtype=torch.float), torch.tensor(y_train.values, dtype=torch.float))
test_data = TensorDataset(torch.tensor(X_test.values, dtype=torch.float), torch.tensor(y_test.values, dtype=torch.float))train_loader = DataLoader(train_data, batch_size=2, shuffle=True)
test_loader = DataLoader(test_data, batch_size=2, shuffle=True)

5. 模型构建

接下来,我们构建基于LSTM-GRU的预测模型:

import torch.nn as nnclass DiabetesPredictor(nn.Module):def __init__(self, input_size, hidden_size, num_layers, output_size):super(DiabetesPredictor, self).__init__()self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True)self.gru = nn.GRU(hidden_size, hidden_size, num_layers, batch_first=True)self.fc = nn.Linear(hidden_size, output_size)def forward(self, x):# LSTM层out, _ = self.lstm(x)# GRU层out, _ = self.gru(out)# 全连接层out = self.fc(out[:, -1, :])return outinput_size = X_train.shape[1]
hidden_size = 64
num_layers = 2
output_size = 1model = DiabetesPredictor(input_size, hidden_size, num_layers, output_size)

6. 模型训练与预测

现在我们可以使用PyTorch框架对模型进行训练和预测:

import torch.optim as optim# 设置损失函数和优化器
criterion = nn.BCEWithLogitsLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)# 训练模型
num_epochs = 50for epoch in range(num_epochs):model.train()running_loss = 0correct = 0total = 0for inputs, labels in train_loader:inputs = inputs.unsqueeze(1)labels = labels.view(-1, 1)optimizer.zero_grad()outputs = model(inputs)loss = criterion(outputs, labels)loss.backward()optimizer.step()running_loss += loss.item()preds = torch.round(torch.sigmoid(outputs))total += labels.size(0)correct += (preds == labels).sum().item()# 计算训练集准确率和损失值train_acc = correct / totaltrain_loss = running_loss / len(train_loader)print(f"Epoch [{epoch + 1}/{num_epochs}] - Loss: {train_loss:.4f}, Accuracy: {train_acc:.4f}")# 测试模型
model.eval()
correct = 0
total = 0with torch.no_grad():for inputs, labels in test_loader:inputs = inputs.unsqueeze(1)labels = labels.view(-1, 1)outputs = model(inputs)preds = torch.round(torch.sigmoid(outputs))total += labels.size(0)correct += (preds == labels).sum().item()# 计算测试集准确率test_acc = correct / totalprint(f"Test Accuracy: {test_acc:.4f}")

运行结果:

Epoch [36/50] - Loss: 0.0031, Accuracy: 1.0000
Epoch [37/50] - Loss: 0.0030, Accuracy: 1.0000
Epoch [38/50] - Loss: 0.0030, Accuracy: 1.0000
Epoch [39/50] - Loss: 0.0025, Accuracy: 1.0000
Epoch [40/50] - Loss: 0.0025, Accuracy: 1.0000
Epoch [41/50] - Loss: 0.0022, Accuracy: 1.0000
Epoch [42/50] - Loss: 0.0022, Accuracy: 1.0000
Epoch [43/50] - Loss: 0.0019, Accuracy: 1.0000
Epoch [44/50] - Loss: 0.0018, Accuracy: 1.0000
Epoch [45/50] - Loss: 0.0018, Accuracy: 1.0000
Epoch [46/50] - Loss: 0.0016, Accuracy: 1.0000
Epoch [47/50] - Loss: 0.0016, Accuracy: 1.0000
Epoch [48/50] - Loss: 0.0015, Accuracy: 1.0000
Epoch [49/50] - Loss: 0.0014, Accuracy: 1.0000
Epoch [50/50] - Loss: 0.0014, Accuracy: 1.0000
Test Accuracy: 1.0000

7. 结论

本文介绍了一种基于LSTM-GRU的糖尿病预测模型,以及如何使用PyTorch框架对其进行训练和预测。通过对中文糖尿病csv数据的分析,我们可以发现该模型在预测糖尿病方面具有较好的性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/13981.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于单片机的语音识别智能垃圾桶垃圾分类的设计与实现

功能介绍 以51单片机作为主控系统;液晶显示当前信息和状态;通过语音识别模块对当前垃圾种类进行语音识别; 通过蜂鸣器进行声光报警提醒垃圾桶已满;采用舵机控制垃圾桶打开关闭;超声波检测当前垃圾桶满溢程度&#xff1…

K8s集群部署最新Jenkins 2.387.1

K8s集群部署最新Jenkins 2.387.1 概述环境准备设置存储目录并启动NFS服务安装 NFS 服务端 动态创建 NFS存储(动态存储)部署jenkins服务 概述 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作…

虚假人脸检测实验

虚假人脸检测实验 虚假人脸识别 数据集链接 链接:https://pan.baidu.com/s/1hDyJ91dAwI5j5GTR0hD_cA?pwd4cki 原理 ResNet-18是一种经典的CNN网络,是 Deep Residual Learning 团队在 2017 年提出的。它是为了解决 ImageNet 数据集上的图像分类任务而…

SOLIDWORKS小问题解答 硕迪科技

众所周知,SOLIDWORKS的使用者非常多,在使用过程中呢也会有一些小问题,前几天就有朋友来咨询了两个问题,可能其他使用者也有这样的问题,所以今天硕迪科技统一为大家解答 问题一:SOLIDWORKS装配图中的颜色怎么…

Java对象内存布局和对象头

文章目录 1 定义2 详细介绍2.1 对象头2.1 实例数据2.1 对齐填充 3 JOL查看内存布局 1 定义 2 详细介绍 2.1 对象头 【对象标记】 Mark Word 【类元信息】 又名类型指针 2.1 实例数据 2.1 对齐填充 3 JOL查看内存布局 public class ObjectLayout {public static void …

前端学习——CSS3

新增长度单位 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>Document</title><style>* {margin: 0;padding: 0;}.box1 {width: 200px;height: 200px;background-color: deepskyblue;…

FPGA综合设计实验:基于PWM脉宽调制的呼吸流水灯设计

目录 一、引言 二、项目准备 1.项目预期目标 2.项目原理及总体实现思路 三、项目模块设计 1.顶层模块 2.按键控制模块 3.呼吸灯模块 4.数码管显示模块 5.二进制转BCD码模块 四、项目测试 1.仿真测试 2.实物测试 五、项目总结 1.选题思考与过程反思 2.设计的具体…

Android 短视频直播特效,音视频图像处理 FFmepg OpenGLES OpenCV开发详细内容

1 音视频开发基础 2 Android OpenGL ES开发基础 3 Android FFmpeg OpenGLES 音视频播放器核心开发 4 Android FFmpeg H.264 AAC 封装mp4 5 Android OpenCV 机器学习人脸标定SDK开发实战 6 Android OpenCV 开发实践 7 Android 短视频App FFmpeg OpenGL ES OpenCV人脸特效渲…

Nanopc T4 教程使用及获取

所有资料从以下链接获取 ● Wiki教程&#xff1a;http://wiki.friendlyarm.com/wiki/index.php/NanoPC-T4/zh 机械结构图&#xff08;dxf格式&#xff09;&#xff1a;http://wiki.friendlyarm.com/wiki/images/b/bc/NanoPC-T4_1802_Drawing%28dxf%29.zip 原理图&#xff1a;h…

基于matlab处理 RGB-D图像数据以构建室内环境地图并估计相机的轨迹(附源码)

一、前言 视觉同步定位和映射 &#xff08;vSLAM&#xff09; 是指计算摄像机相对于周围环境的位置和方向&#xff0c;同时映射环境的过程。 您可以使用单眼摄像头执行 vSLAM。但是&#xff0c;深度无法准确计算&#xff0c;估计的轨迹未知&#xff0c;并且随着时间的推移而漂…

神经网络术语解释

目录 Padding&#xff1a; 填充步幅&#xff08;stride&#xff09;Pooling Layer:池化层Batch NormalizationSeparable ConvolutionsREFERENCE Padding&#xff1a; 填充 在进行卷积层的处理之前&#xff0c;有时要向输入数据的周围填入固定的数据&#xff08;比 如0等&#…

电动汽车充电站监控系统设计_kaic

1 绪论 1.1 引言 汽车工业的告诉发展&#xff0c;汽车带来的环境污染、能源短缺、资源枯竭和安全等方面的问题越来越突出。为了保持国民经济的可持续发展&#xff0c;保护人类居住环境和能源供给&#xff0c;各国政府不惜巨资&#xff0c;投入大量人力、物力&#xff0c;寻…