ShopTRAINING/xz模型添加流程.md
xz2000 87df49f764 添加训练算法模拟xgboosT,训练可以完成,预测读取还有问题
数据文件保存机构改为### 1.2. 文件存储位置

-   **最终产物**: 所有最终模型、元数据文件、损失图等,统一存放在 `saved_models/` 根目录下。
-   **过程文件**: 所有训练过程中的检查点文件,统一存放在 `saved_models/checkpoints/` 目录下。

### 1.3. 文件名生成规则

1.  **构建逻辑路径**: 根据训练参数(模式、范围、类型、版本)确定逻辑路径。
    -   *示例*: `product/P001_all/mlstm/v2`

2.  **生成文件名前缀**: 将逻辑路径中的所有 `/` 替换为 `_`。
    -   *示例*: `product_P001_all_mlstm_v2`

3.  **拼接文件后缀**: 在前缀后加上描述文件类型的后缀。
    -   `_model.pth`
    -   `_loss_curve.png`
    -   `_checkpoint_best.pth`
    -   `_checkpoint_epoch_{N}.pth`

#### **完整示例:**

-   **最终模型**: `saved_models/product_P001_all_mlstm_v2_model.pth`
-   **最佳检查点**: `saved_models/checkpoints/product_P001_all_mlstm_v2_checkpoint_best.pth`
-   **Epoch 50 检查点**: `saved_models/checkpoints/product_P001_all_mlstm_v2_checkpoint_epoch_50.pth`
2025-07-21 18:47:27 +08:00

4.6 KiB
Raw Blame History

为系统添加新模型的标准流程

本文档总结了向本项目中添加一个新的预测模型以XGBoost为例的标准流程旨在为未来的开发工作提供清晰、可复用的路线图。


第1步创建模型训练器

这是最核心的一步,负责实现新模型的训练逻辑。

  1. 创建新文件:在 server/trainers/ 目录下创建一个新的Python文件例如 new_model_trainer.py

  2. 定义训练函数:在该文件中,定义一个核心的训练函数,遵循项目的标准签名,接收 product_id, store_id, epochs, path_info 等参数。

  3. 实现函数内部逻辑

    • 数据加载:使用 utils.multi_store_data_utils.load_multi_store_data 加载数据,并根据 product_idstore_id 进行筛选。
    • 数据预处理将时间序列数据转换为监督学习格式。对于像XGBoost这样的模型这意味着创建一个“滑动窗口”如我们实现的 create_dataset 函数)。
    • 数据缩放 (关键)必须使用 sklearn.preprocessing.MinMaxScaler 对特征 (X) 和目标 (y) 进行归一化。创建并训练 scaler_Xscaler_y 两个缩放器。
    • 模型训练:初始化您的新模型,并使用归一化后的数据进行训练。
    • 生成损失曲线 (可选但推荐):如果模型支持,在训练过程中捕获训练集和验证集的损失,然后使用 matplotlib 绘制损失曲线图,并将其保存为 ..._loss_curve.png
    • 保存检查点 (可选但推荐)如果模型支持回调Callbacks可以实现一个自定义回调函数用于按指定轮次间隔保存模型检查点 (..._checkpoint_epoch_{N}.pth)。
    • 模型评估:使用反归一化后的预测结果来计算评估指标RMSE, R2等
    • 模型保存 (关键)
      • 创建一个字典payload必须包含以下内容:'model' (训练好的模型对象), 'config' (训练配置), 'scaler_X' (特征缩放器), 和 'scaler_y' (目标缩放器)。
      • 使用正确的库PyTorch模型用 torch.save其他模型如XGBoost用 joblib.dump)将这个字典保存到 path_info['model_path'] 指定的路径。文件名统一使用 .pth 扩展名

第2步将训练器集成到系统中

  1. 注册训练器:打开 server/trainers/__init__.py

    • 在文件顶部,从您的新训练器文件中导入训练函数,例如 from .new_model_trainer import train_product_model_with_new_model
    • 在文件底部的 __all__ 列表中,添加您的新训练函数名。
  2. 添加调度逻辑:打开 server/core/predictor.py

    • train_model 方法中,找到 if/elif 逻辑块,为您的新模型添加一个新的 elif model_type == 'new_model': 分支,并在此分支中调用您的新训练函数。

第3步实现预测逻辑

  1. 修改预测器:打开 server/predictors/model_predictor.py
  2. 添加预测分支:在 load_model_and_predict 函数中,找到 if/elif 逻辑块,为您的新模型添加一个新的 elif model_type == 'new_model': 分支。
  3. 实现分支内部逻辑
    • 使用与保存时相同的库(例如 joblib.load)加载 .pth 模型文件。
    • 从加载的字典中,必须提取出 model, config, scaler_X, 和 scaler_y
    • 准备用于预测的输入数据例如最近N天的数据
    • 在进行预测时,必须先用 scaler_X.transform 对输入数据进行归一化。
    • 得到模型的预测结果后,必须scaler_y.inverse_transform 将结果反归一化,以得到真实的预测值。

第4步更新API和依赖项

  1. 更新API端点:打开 server/api.py

    • /api/training 路由(start_training 函数)的 valid_model_types 列表中添加您的新模型ID例如 'new_model')。
    • /api/model_types 路由(get_model_types 函数)返回的列表中,添加您新模型的描述信息,以便它能显示在前端界面。
  2. 更新依赖:打开 requirements.txt 文件添加您的新模型所需要的Python库例如 xgboost)。

遵循以上四个步骤,您就可以将任何新的预测模型一致、健壮地集成到现有系统中。