FB Prophet.fit()执行出现异常输出及报错问题咨询
FB Prophet多变量模型相关问题解答
1. <prophet.forecaster.Prophet at 0x2...> 输出说明
这就是Python默认的对象内存地址打印,没什么特殊含义。你之前单变量训练时没看到,大概率是之前把.fit()的结果赋值给了变量(比如model = model.fit(df)),这次没赋值,交互式环境就自动输出了模型实例的内存引用。完全不影响模型功能,只是个无关紧要的输出。
2. cmdstanpy报错的含义
16:03:40 - cmdstanpy - ERROR - Chain 1 error: error during processing Unknown error Optimization terminated abnormally. Falling back to Newton
- 本质原因:Prophet默认用L-BFGS算法拟合模型,但加了多个额外回归器后,损失函数结构变复杂,L-BFGS找不到最优解,优化中途崩了。
- 别慌,后面的
Falling back to Newton是关键:CmdStanPy会自动切换到牛顿法继续完成拟合,这就是为什么你模型还能正常预测——牛顿法搞定了训练。 - 这属于非致命的警告类报错,模型已经通过 fallback 机制正常训练完成。要是不想看到这个提示,可以手动调优化参数:
- 增大L-BFGS的迭代次数:
model = Prophet(optimizer="L-BFGS", max_iter=1000) - 直接指定用牛顿法训练:
model = Prophet(optimizer="Newton")
- 增大L-BFGS的迭代次数:
3. 验证额外回归器是否被模型使用
有几个简单方法:
- 查
regressors属性:训练完后打印model.regressors,里面会列出所有被模型纳入的额外回归器,还有对应的拟合系数、p值等信息。没被识别的回归器不会出现在这个列表里。 - 对比移除回归器后的预测结果:如果某个回归器真的被模型用到,删掉它重新训练后,预测结果会有明显差异;要是差异微乎其微,只能说明这个回归器对模型贡献小,但不代表没被使用。
- 测试预测输入的完整性:调用
model.predict(future_df)时,如果future_df缺了某个你加过的回归器,Prophet会直接报错,这也能反向证明该回归器已经被模型纳入依赖。
内容的提问来源于stack exchange,提问作者Maxl Gemeinderat
相关产品推荐
相关产品推荐

