# 优化版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模型解决实际问题。