可变时间单位 LSTM

数据挖掘 分类 喀拉斯 lstm
2022-02-13 13:24:17

我正在处理需要根据随着时间的推移进行的医学测试来分类患者将来是否会患癌症的数据。测试具有顺序关系。A,然后是 B,然后是 C,等等。例如:

| Patient ID | Test ID | RBC Count | WBC Count | Label
|     1      |    A    |     4.2   |    7000   |   0
|     1      |    B    |     5.3   |    12000  |   0
|     1      |    C    |     2.4   |    15000  |   1
|     2      |    A    |     7.6   |    8000   |   0
|     2      |    B    |     7.4   |    7500   |   0

每个点都不是以固定的时间间隔拍摄的,因此这可能不被视为时间序列数据。如何将 Keras Sequential 模型应用于此?特别是因为每个患者可以进行不同数量的测试,例如最多 5 次。患者 ID 1 有 3 个测试,而患者 ID 2 有 2 个测试。

2个回答

[哇.好问题]

可能的解决方案:(个人意见)

第一个意见是:使用 SVM 或 KNN 而不是神经网络,因为您的数据像 2D 向量一样微不足道。

第二种意见是:

由于您没有尝试预测特定患者的下一个文本可能性,因此在这种情况下 RNN(LSTM,GRU) 可能对您没有帮助。所以一个简单的解决方案是自动编码器来压缩数据,然后运行一个简单的逻辑回归或支持向量机,或者可能是一个神经网络。

如何?

1.由于您的患者编号在所有情况下都不相同,因此您应该将他/她的所有医学测试数据表示为一个向量。这就是自动编码器发挥作用的地方。示例:

假设我们有 3 位患者:First-3 测试,second-2 测试,three-5 测试。我们的目标是将每个患者数据压缩成二维向量(因为你的特征是 RBC 和 WBC,2 个特征,所以如果我们将它压缩成二维向量,它将学得很好)。

(在星号(*)内你的数据去)

First Patient=[[*],[*],[*]] # three test
Second Patient=[[*],[*]] # two test
Third Patient=[[*],[*],[*],[*],[*]] # five test

现在您通过Variational autoencoder压缩数据。

将您的数据缩放为 wbc>>rbc

然后使用变分自编码器得到潜在空间向量

通过 Dense(2) 在潜在空间中使用 dimesion=2

现在,当您获得向量时,只需为每个患者添加测试向量

喜欢:对于第一个患者,您在潜在空间中有三个向量,例如-

[2.33,4.2]+[5.11,9.22]+[0.21,6.32]=result..你得到了第一个病人的表示。

在你得到所有这些之后,一个简单的 svm/多项式回归就可以了。

让我知道你是如何解决的。

对于 Phased LSTM https://arxiv.org/abs/1610.09513,这听起来肯定是个问题

它旨在处理以不规则时间间隔到达的输入,例如,来自以不同频率工作的两个传感器。作为一个很酷的奖励,它能够处理更长的序列,而通常的 LSTM 会吓坏。

这里描述了它的导数和反向传播:Gradient derivation reference for Phased LSTM

此外,在开始实施之前,请务必阅读作者在其 github 上的“提醒”和注释:https ://github.com/dannyneil/public_plstm