Transformer实现医疗时序数据分析

我们使用Transformer实现医疗时序数据分析的 重症监护室(ICU)患者监测:    分析心率、血压等连续监测数据,提前预警病情恶化(如脓毒症休克)。样本数据如下所示:

数据准备

import torch
import torch.nn as nn
import torch.nn.functional as F
import numpy as np
import pandas as pd
from pathlib import Path

# 数据
save_path = r"E:\test_data001\ICU_DataSet_Sample.xlsx"
df = generate_icu_dataset(save_path=save_path)

# 读取数据
df = pd.read_excel(save_path)
print(f"数据加载成功,形状: {df.shape}")

# 提取特征和标签
features = ['心率', '收缩压', '舒张压', '血氧饱和度', '呼吸频率', '体温']
X = df.groupby('患者ID')[features].apply(lambda x: x.values).values
y = df.groupby('患者ID')['病情恶化'].last().values

# 转换为张量
X_tensor = torch.tensor(np.stack(X), dtype=torch.float32)  # [患者数, 时间步, 特征数]
y_tensor = torch.tensor(y, dtype=torch.long)  # [患者数]

编码器部分

步骤-1:Input Embedding


# 思想:将时序数据映射到高维空间
# 过程:使用线性层将6维特征转换为d_model维
d_model = 16  # 嵌入维度
input_embedding = nn.Linear(len(features), d_model)

# 选择一个患者的时序数据作为示例
sample_idx = 0
sample_X = X_tensor[sample_idx]  # [时间步, 特征数]
embedded = input_embedding(sample_X)  # [时间步, d_model]
print("\n步骤-1:Input Embedding 结果形状:", embedded.shape)

步骤-2:Positional Encoding


# 思想:为序列中的每个位置添加位置信息
# 过程:使用正弦和余弦函数创建位置编码
max_seq_len = X_tensor.shape[1]  # 最大时间步

# 创建位置编码矩阵
positional_encoding = torch.zeros(max_seq_len, d_model)
position = torch.arange(0, max_seq_len).unsqueeze(1)
div_term = torch.exp(torch.arange(0, d_model, 2) * -(np.log(10000.0) / d_model))

positional_encoding[:, 0::2] = torch.sin(position * div_term)
positional_encoding[:, 1::2] = torch.cos(position * div_term)

# 将位置编码添加到嵌入向量
embedded_with_pos = embedded + positional_encoding
print("\n步骤-2:Positional Encoding 结果形状:", embedd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数字化与智能化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值