228 lines
8.4 KiB
Markdown
228 lines
8.4 KiB
Markdown
![]() |
# 优化版KAN模型使用指南
|
|||
|
|
|||
|
## 1. 简介
|
|||
|
|
|||
|
优化版Kolmogorov-Arnold网络(OptimizedKAN)是一种内存高效的非线性时间序列预测模型,基于柯尔莫哥洛夫-阿诺尔德定理实现。该模型通过B样条基函数自适应学习复杂的非线性关系,特别适合捕捉药店销售数据中的复杂模式和季节性变化。
|
|||
|
|
|||
|
与原始KAN模型相比,优化版本显著降低了内存占用并提高了训练速度,同时保持或提升了预测精度。本指南将介绍如何在药店销售预测系统中有效使用优化版KAN模型。
|
|||
|
|
|||
|
## 2. 模型架构
|
|||
|
|
|||
|
优化版KAN模型由三个主要组件组成:
|
|||
|
|
|||
|
1. **OptimizedKANLinear**: 核心计算单元,实现B样条基函数和线性变换
|
|||
|
2. **OptimizedKAN**: 中间层,组织多个OptimizedKANLinear层
|
|||
|
3. **OptimizedKANForecaster**: 顶层模型,用于时间序列预测
|
|||
|
|
|||
|
模型的基本工作流程:
|
|||
|
- 输入时间序列数据经过输入投影层
|
|||
|
- 投影后的数据通过OptimizedKAN网络处理
|
|||
|
- 最后通过输出层生成预测结果
|
|||
|
|
|||
|
## 3. 使用方法
|
|||
|
|
|||
|
### 3.1 通过命令行界面使用
|
|||
|
|
|||
|
最简单的使用方式是通过系统提供的命令行界面:
|
|||
|
|
|||
|
1. 运行主程序:
|
|||
|
```bash
|
|||
|
python run_pharmacy_prediction.py
|
|||
|
```
|
|||
|
|
|||
|
2. 选择以下选项之一:
|
|||
|
- 选项5: 训练单个药品的销售预测模型 (优化版KAN)
|
|||
|
- 选项6: 比较原始KAN和优化版KAN模型性能
|
|||
|
|
|||
|
3. 按照提示输入相关参数,如产品ID、训练轮数、批次大小等
|
|||
|
|
|||
|
### 3.2 通过API直接使用
|
|||
|
|
|||
|
如果需要在自己的代码中使用优化版KAN模型,可以按照以下方式:
|
|||
|
|
|||
|
```python
|
|||
|
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:
|
|||
|
|
|||
|
```python
|
|||
|
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模型解决实际问题。
|