代码功能概述
- 导入相关包与设置环境变量:
- 首先导入了如
os、numpy、pandas等常用的 Python 库,同时设置了一些与特定库(如XLA_PYTHON_CLIENT_PREALLOCATE和JAX_PM AP_USE_TENSORSTORE)相关的环境变量,用于优化计算等操作。
- 首先导入了如
- 加载预训练的 TimesFM 模型:
- 通过指定相关超参数(如后端为
gpu、每核心批处理大小等)以及预训练模型在 Hugging Face 上的仓库id,实例化了TimesFm模型对象,用于后续的评估和微调等操作。
- 通过指定相关超参数(如后端为
- 准备数据集相关信息并加载数据:
- 定义了一个数据集字典
DATA_DICT,包含多个数据集(如ettm1等)的详细信息,包括数据文件路径、时间频率、划分边界等。 - 根据选定的数据集(示例中初始化为
ettm1),读取对应的数据文件为DataFrame,然后配置TimeSeriesdata类的实例来进行数据加载、划分训练集、验证集和测试集,同时对数据进行了一些规范化等预处理操作,并生成对应的批次数据(train_batches、val_batches、test_batches)。
- 定义了一个数据集字典
- 评估预训练模型在测试集上的 MAE(平均绝对误差):
- 通过迭代测试集批次数据,利用预训练模型进行预测,计算预测值和实际值之间的平均绝对误差,以此来评估模型在当前数据集上的性能表现。
- 微调模型:
- 导入了一系列用于构建和训练模型的
praxis、paxml相关的模块和类,进行了诸如定义学习器(包括优化器、学习率调度等配置)、构建任务、初始化模型状态等操作。 - 将预训练模型的参数设置为微调模型的初始权重,然后通过定义训练步和评估步函数,在多个
epoch内循环进行训练和定期评估(利用早停机制,根据验证集损失决定是否提前停止训练),在每个训练步中对模型参数进行更新,每个评估步计算验证集上的损失,保存最优模型状态的检查点。
- 导入了一系列用于构建和训练模型的
- 加载并评估微调后的模型:
- 从保存的检查点中恢复最优的模型状态,将其参数更新到原
TimesFM模型中,然后再次在测试集上计算平均绝对误差,以对比微调前后模型性能的变化情况。
- 从保存的检查点中恢复最优的模型状态,将其参数更新到原
针对车辆销售数据的改写步骤
-
数据准备与加载部分(适配车辆销售数据):
- 修改数据集字典
DATA_DICT:- 创建一个新的字典项来对应你的车辆销售数据集,例如取名为
vehicle_sales。 - 填写对应的数据文件路径(假设你的车辆销售数据存储在
../datasets/vehicle_sales.csv,则data_path设置为此路径)。 - 根据你的数据时间粒度来设置
freq,比如如果是按天记录的,就可以设置为"D"(代表 Daily),如果是按月记录的,可设置为"M"(代表 Monthly)等。 - 按照你的训练、验证、测试集划分的时间范围来设置
boundaries列表中的值,例如如果前 3 年数据作为训练集,第 4 年作为验证集,第 5 年作为测试集,你需要根据数据点数量等信息确定对应的时间点边界值填入该列表。
- 创建一个新的字典项来对应你的车辆销售数据集,例如取名为
- 调整数据读取和数据加载配置部分:
- 在
data_df = pd.read_csv(open(data_path, "r"))这行代码中,确认数据文件格式正确能被read_csv方法读取,如果数据有特定的分隔符、编码等情况,按需调整参数(比如添加sep参数指定分隔符、encoding参数指定编码格式等)。 - 根据你的车辆销售数据列名,修改
ts_cols、num_cov_cols、cat_cov_cols的定义。例如,销售量和销售价格等数值型的时间序列列可添加到ts_cols,车型、经销商这些分类列可以根据需求分配到num_cov_cols(如果要进行数值编码等处理)或者cat_cov_cols(作为分类特征)中。同时修改TimeSeriesdata实例化时传入的参数,确保数据能正确划分和预处理,例如datetime_col设置为数据中代表日期的列名。
- 在
- 修改数据集字典
-
模型微调部分(可能无需大改,但检查配置合理性):
- 确认微调时定义的学习器配置(如优化器、学习率调度等参数)是否适合车辆销售数据预测任务。你可能需要根据实际情况调整学习率、训练总步数等参数,例如车辆销售数据如果比较复杂,可能需要适当调小学习率、增加训练总步数等,以保证模型能更好地收敛和学习到数据中的模式。
- 检查
build_learner函数中设置的bprop_variable_exclusion参数是否合理,对于车辆销售数据微调场景下想要固定或者放开训练的模型层,根据模型结构和需求进行调整,确保只训练希望更新参数的那些部分。
-
模型评估部分(保持逻辑基本一致):
- 在计算微调前后模型在测试集上的平均绝对误差(MAE)部分,确保数据维度等处理符合车辆销售数据的特点。例如,在预测结果和实际结果对比计算
MAE时,确认预测的销售量、销售价格等和实际值的对应关系和维度对齐正确,特别是如果有多个时间序列维度或者特征维度时,保证forecasts和actuals的形状匹配能正确计算误差。
- 在计算微调前后模型在测试集上的平均绝对误差(MAE)部分,确保数据维度等处理符合车辆销售数据的特点。例如,在预测结果和实际结果对比计算
以下是一个python代码(假设你的车辆销售数据 vehicle_sales.csv 有 date(日期)、car_model(车型)、dealer(经销商)、sales_volume(销售量)、sales_price(销售价格)这几列,并且想将车型和经销商作为分类特征,销售量和销售价格作为时间序列特征,数据按年划分训练、验证、测试集,这里简化假设前 3 年训练、第 4 年验证、第 5 年测试,并且时间频率是按年 "Y"):
# 以下代码主要用于基于TimesFM模型对车辆销售数据进行预训练模型评估、模型微调以及微调后模型的评估操作
# 导入相关包用于微调操作,同时设置一些环境变量来优化计算等相关配置
## Importing relevant packages for finetuning
import os
os.environ['XLA_PYTHON_CLIENT_PREALLOCATE'] = 'false'
o
TimesFM模型在车辆销售数据的应用与微调

最低0.47元/天 解锁文章
1614

被折叠的 条评论
为什么被折叠?



