我有几个时间序列功能(ECG,HRV和呼吸)以及由这些时间序列制作的单独功能(例如SDNN,RMSSD,......)。
我遵循Francois Chollet的命名。对于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部分的上述独立功能。另一个例子:由于不同的采样频率,HRV和呼吸信号比ECG短。在这里,我将使用插值而不是零填充。你是否同意,或者零填充不会影响学习者?
由于
答案 0 :(得分:2)
由于含糊不清,我假设这个(如果不是,请发表评论,我会改变它)
额外问题:
是的!插入不太频繁的特征并使输入张量如下:
(numberOfSequences_maybePatient, 15000 steps, features_ECG_HRV_etc)
您需要在发生时的功能之间保持相关性,这是通过同步步骤来实现的。
零填充是否会影响结果?
是的,除非你使用" masking" (掩蔽层)。但这只适用于处理不同长度的样本(不同序列或患者),而不是长度/采样率不同的特征。
示例,以下情况适用于零填充和屏蔽:
如何处理separate feature
?
有许多可能的方法。最简单的一个,也许是非常有效的,是使它成为所有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]
| ]
| ]
您还可以输入作为模型中的附加输入:
regularSequences = Input((15000,features))
separateFeature = Input((1,)) #assuming 1 value per sequence
然后你决定是否要把它加在某个地方,在某个地方加倍,等等。如果你知道这个特征的含义以及它与其他数据的关系,这种方法可能比另一个方法更有效。选择最佳操作和位置。
从更新后的答案中获取此说明:
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],...]
然后:
好吧,组织这些数据非常简单(但请注意我上面提到的问题),只需在每个时间步骤中将所有功能打包在一起:
输入数据的形状为:(sequences, steps, 16002)
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,...]
]