Input KERA的输入组合:时间序列和功能

Input KERA的输入组合:时间序列和功能,input,keras,time-series,Input,Keras,Time Series,我有几个时间序列特征(ECG、HRV和呼吸)和从这些时间序列中提取的单独特征(例如SDNN、RMSSD等) 我跟随弗朗索瓦·乔利特的名字。对于3D时间序列输入张量,它们使用[样本、时间步、特征] 时间序列每个时间步[[15000x1],[15000x1],…]有15000个值(样本),而单独的功能每个时间步有1个值(样本)。这些长度为[1]的额外功能对于每个时间步都是不同的。[[0.3],[0.35],[0.34],...]. ECG, HR

我有几个时间序列特征(ECG、HRV和呼吸)和从这些时间序列中提取的单独特征(例如SDNN、RMSSD等)

我跟随弗朗索瓦·乔利特的名字。对于3D时间序列输入张量,它们使用[样本、时间步、特征]

时间序列每个时间步[[15000x1],[15000x1],…]有15000个值(样本),而单独的功能每个时间步有1个值(样本)。这些长度为[1]的额外功能对于每个时间步都是不同的。[[0.3],[0.35],[0.34],...].

                     ECG,      HRV,   F1,   F2,  ...
-------------------------------------------------------------
Sequence 1 |
    Step 1 |     [[15000x1],[1000x1],[1x1],[1x1],...] 
    Step 2 |     [[15000x1],[1000x1],[1x1],[1x1],...] 
    Step 3 |     [[15000x1],[1000x1],[1x1],[1x1],...] 

Sequence 2 |
    Step 1 |     [[15000x1],[1000x1],[1x1],[1x1],...] 
    Step 2 |     [[15000x1],[1000x1],[1x1],[1x1],...] 
    Step 3 |     [[15000x1],[1000x1],[1x1],[1x1],...] 
您如何使用Keras学习所有这些输入的最佳方法

  • 只需将1到15000的单独特征归零,然后将它们添加到时间序列中
  • 将单独的特征填充在一起(重复使用一个值)
  • 当数据在0和1之间标准化时,使用超出该范围的附加特征的值方式进行填充。例如1000
  • 仅将时间序列作为3D张量输入,将单独的特征作为附加输入(作为附加层),并将其合并到学习者中(多输入)
  • 额外的问题。由于“错误”的附加信息,零填充如何影响学习者?特别是对于1到15000个部件,用于上述独立功能。另一个例子:由于采样频率不同,HRV和呼吸信号比ECG短。这里我宁愿使用插值,而不是零填充。你同意吗,还是零填充对学习者没有影响

    谢谢

    1 由于模棱两可,我假设这一点(如果不是,请评论,我会更改)

    • 我正在呼叫ECG、HRV等。每一步都不同的功能
    • 频率最高的功能有15000个步骤,而其他功能的步骤较少
    • 您有一个独立的功能,它不是连续的,也没有步骤。(在这个答案中,我将其称为独立功能
    额外问题:

    对!!对频率较低的特征进行插值,并生成输入张量,如:

    • (序列号\u可能是患者、15000步、功能\u ECG\u HRV\u等)
    当发生时,您需要在上的功能之间保持相关性,这是通过同步步骤实现的

    零填充是否会影响结果?

    是的,除非使用“掩蔽”(掩蔽层)。但这只适用于处理长度不同的样本(不同序列或患者),而不是长度/样本率不同的特征

    例如,以下情况适用于零填充和掩蔽:

    • 序列1:长度100(包括所有特征、心电图、心率变异性等)
    • 序列2:长度200(包括所有特征、ECG、HRV等)
    如何处理
    独立功能

    有许多可能的方法。最简单的方法之一,可能也是非常有效的方法,就是将所有15000个步骤都设置为一个恒定的序列。这种方法不需要考虑特征与其余数据的关系,而是将任务留给模型

    假设第一个序列的单独特征值为2,第二个序列的单独特征值为4,则生成此数据数组:

                              ECG, HRV, separate
    --------------------------------------------------------
                 |   [
    sequence 1:  |      [
    step 1       |            [ecg1, hrv1, 2],
    step 2       |            [ecg2, hrv2, 2],
    step 3       |            [ecg3, hrv3, 2]
                 |      ]
                 |
    sequence 2:  |      [
    step 1       |            [ecg4, hrv4, 4],
    step 2       |            [ecg5, hrv5, 4],
    step 3       |            [ecg6, hrv6, 4]
                 |      ]
                 |   ]
    
    您还可以输入is作为模型中的附加输入:

    regularSequences = Input((15000,features))
    separateFeature = Input((1,)) #assuming 1 value per sequence    
    
    然后决定是否要在某处求和,在某处相乘,等等。如果您了解此功能的含义以及它与其余数据的关系,以选择最佳操作和位置,则此方法可能比其他方法更有效

    假设2 从更新的答案中获取以下描述:

                         ECG,      HRV,   F1,   F2,  ...
    -------------------------------------------------------------
    Sequence 1 |
        Step 1 |     [[15000x1],[1000x1],[1x1],[1x1],...] 
        Step 2 |     [[15000x1],[1000x1],[1x1],[1x1],...] 
        Step 3 |     [[15000x1],[1000x1],[1x1],[1x1],...] 
    
    Sequence 2 |
        Step 1 |     [[15000x1],[1000x1],[1x1],[1x1],...] 
        Step 2 |     [[15000x1],[1000x1],[1x1],[1x1],...] 
        Step 3 |     [[15000x1],[1000x1],[1x1],[1x1],...] 
    
    然后:

    • ECG中的单个时间步长具有15000个功能。(您确定这不是15000个步骤的序列吗?)
    • 在HRV中,一个时间步长有1000个功能。(您确定这不是1000个步骤的序列吗?)
    • 每个时间步有几个其他单独的功能
    好的,组织这些数据非常容易(但请记住我上面提出的问题),只需在每个时间步骤中将所有功能打包在一起:

    输入数据的形状将是:
    (序列、步骤、16002)

    假设1 由于模棱两可,我假设这一点(如果不是,请评论,我会更改)

    • 我正在呼叫ECG、HRV等。每一步都不同的功能
    • 频率最高的功能有15000个步骤,而其他功能的步骤较少
    • 您有一个独立的功能,它不是连续的,也没有步骤。(在这个答案中,我将其称为独立功能
    额外问题:

    对!!对频率较低的特征进行插值,并生成输入张量,如:

    • (序列号\u可能是患者、15000步、功能\u ECG\u HRV\u等)
    当发生时,您需要在上的功能之间保持相关性,这是通过同步步骤实现的

    零填充是否会影响结果?

    是的,除非使用“掩蔽”(掩蔽层)。但这只适用于处理长度不同的样本(不同序列或患者),而不是长度/样本率不同的特征

    例如,以下情况适用于零填充和掩蔽:

    • 序列1:长度100(包括所有特征、心电图、心率变异性等)
    • 序列2:长度200(包括所有特征、ECG、HRV等)
    如何处理
    独立功能

    有许多可能的方法。最简单的方法之一,可能也是非常有效的方法,就是将所有15000个步骤都设置为一个恒定的序列。这种方法不需要
                         ECG,      HRV,   F1,   F2,  ...
    -------------------------------------------------------------
                  [
    Sequence 1 |    [
        Step 1 |     [ecg1,ecg2,...,ecg15000,hrv1,hrv2,...hrv1000,F1,F2,...]
        Step 2 |     [ecg1,ecg2,...,ecg15000,hrv1,hrv2,...hrv1000,F1,F2,...]
        Step 3 |     [ecg1,ecg2,...,ecg15000,hrv1,hrv2,...hrv1000,F1,F2,...]
                    ]
    Sequence 2 |    [
        Step 1 |     [ecg1,ecg2,...,ecg15000,hrv1,hrv2,...hrv1000,F1,F2,...]
        Step 2 |     [ecg1,ecg2,...,ecg15000,hrv1,hrv2,...hrv1000,F1,F2,...]
        Step 3 |     [ecg1,ecg2,...,ecg15000,hrv1,hrv2,...hrv1000,F1,F2,...]
                    ]