对比方法HG-prediction代码调试
2024-09-06 17:06:07

背景

给定了xslx格式的血糖数据(列为病人编号,时间,血糖值,每个病人一个文件,有大量文件),要在HG-predicition代码中运行该数据集。

数据预处理

通过阅读代码,可知该方法使用的是pkl格式的数据,并提供了一个convert-data方法,来把字典格式的pkl数据转为代码处理所需的单维向量格式的pkl数据。

首先把xslx格式的数据统一合并到一个csv格式的文件中(因为超过了xlsx的行数上限)。

然后转为字典格式的pkl数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
if __name__ == '__main__':
    # 读取CSV文件
    csv_file = 'data.csv'
    data = pd.read_csv(csv_file)
    # 将CSV数据转换为函数所需的字典格式
    pkl_data = {}
    date_formats = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M']
    for index, row in data.iterrows():
        patient_id = row['住院号']
        from datetime import datetime, timedelta
        for date_format in date_formats:
            try:
                timestamp = int(datetime.strptime(row['测量时间'], date_format).timestamp())
                break
            except ValueError:
                continue      
        value = row['测量值']
        if patient_id not in pkl_data:
            pkl_data[patient_id] = {}
        if timestamp not in pkl_data[patient_id]:
            pkl_data[patient_id][timestamp] = {}
        pkl_data[patient_id][timestamp]['glucose'] = value
        pkl_data[patient_id][timestamp]['Time'] = timestamp

    pkl_to_X_y(pkl_data, '.', blen=9, flen=6, ignore_NA=True)

原始数据没有聚类标签,正好可以使用代码提供的judge_label函数判断,注意这里单位不同,要把70改为7

提示空数组错误

在更改了数据格式之后,发现pkl_to_X_y函数读不到数据,而这一段代码会跳过不符合要求的数据。

1
2
3
4
5
6
7
            if ignore_NA is True:
                if any([t not in feats_dict for t in b_time_steps]):
                    # some backward time steps not available
                    continue
                if any([t not in feats_dict for t in f_time_steps]):
                    # some forward time steps not available
                    continue

因此考虑到是否是因为什么原因导致数据不符合要求,发现对于下面这段代码

1
2
3
            b_time_steps = [sec - i * 300 for i in reversed(range(0, blen))]

            f_time_steps = [sec + j * 300 for j in range(1, flen + 1)]

其数据间隔5分钟,而现在要使用的数据间隔为15分钟,更改为900就可以运行。

概念学习

之前没有了解过时序数列预测的深度学习算法,这里学到了几个概念:

1.预测长度

“forecast length”:预测长度
“backcast length”:回溯长度

  1. Forecast Length:这是指模型需要预测未来的时间步长的数量。
  2. Backcast Length:这是指在训练模型时,用于估计模型参数的历史数据的时间步长的数量。Backcast length 用于确定模型在进行预测之前需要观察多少历史数据。

2.度量指标

MSE:预测值与实际值之差的平方的平均值。
RMSE:是MSE的平方根,和原数据同一个指标。
MAE:预测值与实际值之差的绝对值的平均值。

3.早停策略

patience为连续多少次loss不下降后,就终止学习。