
1. 修复前端图表日期排序问题: - 改进 PredictionView.vue 和 HistoryView.vue 中的图表渲染逻辑 - 确保历史数据和预测数据按照正确的日期顺序显示 2. 修复后端API处理: - 解决 optimized_kan 模型类型的路径映射问题 - 添加 JSON 序列化器处理 Pandas Timestamp 对象 - 改进预测数据与历史数据的衔接处理 3. 优化图表样式和用户体验
8.4 KiB
优化版KAN模型使用指南
1. 简介
优化版Kolmogorov-Arnold网络(OptimizedKAN)是一种内存高效的非线性时间序列预测模型,基于柯尔莫哥洛夫-阿诺尔德定理实现。该模型通过B样条基函数自适应学习复杂的非线性关系,特别适合捕捉药店销售数据中的复杂模式和季节性变化。
与原始KAN模型相比,优化版本显著降低了内存占用并提高了训练速度,同时保持或提升了预测精度。本指南将介绍如何在药店销售预测系统中有效使用优化版KAN模型。
2. 模型架构
优化版KAN模型由三个主要组件组成:
- OptimizedKANLinear: 核心计算单元,实现B样条基函数和线性变换
- OptimizedKAN: 中间层,组织多个OptimizedKANLinear层
- OptimizedKANForecaster: 顶层模型,用于时间序列预测
模型的基本工作流程:
- 输入时间序列数据经过输入投影层
- 投影后的数据通过OptimizedKAN网络处理
- 最后通过输出层生成预测结果
3. 使用方法
3.1 通过命令行界面使用
最简单的使用方式是通过系统提供的命令行界面:
-
运行主程序:
python run_pharmacy_prediction.py
-
选择以下选项之一:
- 选项5: 训练单个药品的销售预测模型 (优化版KAN)
- 选项6: 比较原始KAN和优化版KAN模型性能
-
按照提示输入相关参数,如产品ID、训练轮数、批次大小等
3.2 通过API直接使用
如果需要在自己的代码中使用优化版KAN模型,可以按照以下方式:
from models.optimized_kan_forecaster import OptimizedKANForecaster
from pharmacy_predictor import PharmacyPredictor
# 创建预测器实例
predictor = PharmacyPredictor()
# 方法1: 使用专用方法训练优化版KAN模型
metrics = predictor.train_optimized_kan_model(
product_id='P001',
epochs=100,
batch_size=32,
learning_rate=0.001,
sequence_length=30,
forecast_horizon=7,
hidden_size=64,
num_layers=2,
dropout=0.1
)
# 方法2: 使用通用方法训练优化版KAN模型
metrics = predictor.train_model(
product_id='P001',
model_type='kan',
epochs=100,
batch_size=32,
learning_rate=0.001,
sequence_length=30,
forecast_horizon=7,
hidden_size=64,
num_layers=2,
dropout=0.1,
use_optimized=True # 指定使用优化版KAN
)
# 比较原始KAN和优化版KAN模型性能
comparison = predictor.compare_kan_models(
product_id='P001',
epochs=100,
batch_size=32,
learning_rate=0.001,
sequence_length=30,
forecast_horizon=7,
hidden_size=64,
num_layers=2,
dropout=0.1
)
3.3 直接实例化模型
如果需要更灵活地控制模型,可以直接实例化OptimizedKANForecaster:
import torch
from models.optimized_kan_forecaster import OptimizedKANForecaster
# 创建模型实例
model = OptimizedKANForecaster(
input_features=8, # 输入特征数量
hidden_sizes=[64, 128, 64], # 隐藏层大小
output_sequence_length=7, # 预测天数
grid_size=5, # 网格大小
spline_order=3, # 样条阶数
dropout_rate=0.1, # Dropout比例
scale_noise=0.1, # 噪声缩放
scale_base=1.0, # 基础权重缩放
scale_spline=1.0, # 样条权重缩放
base_activation=torch.nn.SiLU, # 基础激活函数
grid_eps=0.02, # 网格更新参数
grid_range=[-1, 1] # 网格范围
)
# 使用模型进行预测
with torch.no_grad():
outputs = model(inputs)
4. 参数调优指南
优化版KAN模型有多个参数可以调整,以下是一些关键参数的调优建议:
4.1 模型结构参数
-
hidden_sizes: 隐藏层大小,通常使用金字塔结构,如[64, 128, 64]
- 对于简单任务,可以使用更小的隐藏层,如[32, 64, 32]
- 对于复杂任务,可以使用更大的隐藏层,如[128, 256, 128]
-
grid_size: 网格大小,控制B样条基函数的复杂度
- 默认值为5,通常在3-10之间调整
- 较大的值可以捕捉更复杂的模式,但可能导致过拟合
-
spline_order: 样条阶数,控制B样条基函数的平滑度
- 默认值为3,通常在2-5之间调整
- 较高的阶数可以产生更平滑的函数,但计算成本更高
4.2 训练参数
-
batch_size: 批次大小,通常在16-128之间
- 较大的批次可以加速训练,但可能需要更多内存
- 优化版KAN可以处理更大的批次而不会耗尽内存
-
learning_rate: 学习率,通常在0.0001-0.01之间
- 建议从0.001开始,根据训练曲线调整
- 如果损失不稳定,可以降低学习率
-
sequence_length: 输入序列长度,通常在7-60之间
- 较长的序列可以捕捉更长期的依赖关系
- 优化版KAN可以处理更长的序列而不会导致内存问题
4.3 正则化参数
-
dropout_rate: Dropout比例,通常在0.1-0.5之间
- 较高的值可以减少过拟合,但可能影响模型性能
-
scale_noise, scale_base, scale_spline: 权重缩放参数
- 这些参数控制初始化时的权重分布
- 通常不需要调整,除非遇到训练不稳定的情况
5. 最佳实践
5.1 数据预处理
- 标准化: 确保所有特征都经过标准化处理,使均值为0,标准差为1
- 缺失值处理: 在训练前处理所有缺失值,可以使用插值或前向填充
- 异常值处理: 检测并处理异常值,可以使用截断或分位数标准化
5.2 模型训练
- 早停: 使用早停策略避免过拟合,通常设置patience=10
- 学习率调度: 考虑使用学习率衰减策略,如ReduceLROnPlateau
- 网格更新: 在训练初期启用网格更新,然后禁用以加速训练
- 正则化损失: 适当调整正则化损失的权重,通常在0.01-0.1之间
5.3 模型评估
- 多指标评估: 不要仅依赖单一指标,综合考虑MSE、RMSE、MAE、R²和MAPE
- 可视化预测: 绘制预测结果与实际值的对比图,检查模型是否捕捉到趋势和季节性
- 交叉验证: 对于关键应用,考虑使用时间序列交叉验证
5.4 内存优化
- 批次大小: 根据可用内存调整批次大小
- 梯度累积: 如果内存仍然不足,可以考虑使用梯度累积技术
- 混合精度训练: 对于支持的硬件,可以使用混合精度训练进一步减少内存使用
6. 常见问题解答
Q1: 优化版KAN模型与原始KAN模型的预测结果有差异,这正常吗?
A1: 是的,这是正常的。虽然两种实现在理论上应该产生相同的结果,但由于数值计算的差异和随机初始化,可能会有轻微的差异。通常这些差异很小,不会显著影响预测性能。
Q2: 如何选择合适的序列长度?
A2: 序列长度应该基于数据的特性和预测任务。对于药店销售数据,可以考虑以下因素:
- 周期性:如果数据有明显的周期性(如每周模式),序列长度应至少覆盖一个完整周期
- 季节性:如果数据有季节性,序列长度应足够长以捕捉季节模式
- 一般建议:对于日销售数据,可以从30天开始,然后根据性能调整
Q3: 优化版KAN模型训练速度仍然较慢,如何进一步加速?
A3: 可以尝试以下方法:
- 减小网格大小(grid_size)和样条阶数(spline_order)
- 使用更小的隐藏层大小
- 启用GPU加速(如果可用)
- 减少训练轮数,配合早停策略
- 对于大型数据集,考虑使用数据采样
Q4: 模型出现过拟合,如何解决?
A4: 可以尝试以下方法:
- 增加dropout_rate(如0.2-0.5)
- 减小模型复杂度(减少隐藏层大小或层数)
- 增加正则化损失的权重
- 使用更多的训练数据
- 添加数据增强技术
Q5: 如何处理多变量时间序列预测?
A5: 优化版KAN模型原生支持多变量输入。确保所有相关特征都包含在输入中,并且所有特征都经过适当的标准化处理。
7. 结论
优化版KAN模型是一种强大且内存高效的时间序列预测工具,特别适合药店销售预测这类复杂的非线性预测任务。通过适当的参数调整和最佳实践,可以充分发挥模型的潜力,获得高精度的预测结果,同时保持较低的计算资源消耗。
对于大规模数据集和资源受限的环境,优化版KAN模型是理想的选择。通过本指南提供的使用方法和最佳实践,用户可以有效地应用优化版KAN模型解决实际问题。