forecast::nnetar函数设置p=0时出现不稳定行为的原因咨询
问题根源分析
1. nnetar()未对非法参数p=0做校验
根据nnetar()的文档说明,参数p对应序列的滞后阶数1到p,且代码内部存在1:p这类依赖p>0的表达式,但函数并未添加p>0的参数合法性校验逻辑。当传入p=0时,函数不会触发报错或警告,直接进入模型构建流程——此时1:p会生成空向量,导致模型缺少必要的滞后特征,本质是一个无效模型。
2. forecast.nnetar()中偶发NaN的触发逻辑
当基于p=0的无效模型执行预测时,forecast.nnetar()的多步预测依赖递推式逻辑:用前一步的预测值作为滞后项,生成下一步的预测结果。但p=0意味着没有可用的滞后特征,代码在尝试构建预测所需的输入时,会出现逻辑上的缺失。
这种情况下,模型的预测计算偶尔会出现数值不稳定(即使设置了set.seed(42),nnetar内部神经网络的初始化或训练环节仍可能存在部分随机行为,导致权重更新时出现除以0、溢出等异常),进而生成NaN值。一旦NaN被生成,会在后续的递推预测中被带入,最终触发"序列末尾存在缺失值"的错误。
3. 偶发错误的核心原因
错误并非每次出现,是因为神经网络训练的数值稳定性存在随机性:大部分情况下,无效模型的预测会生成无意义但数值合法的结果;仅当训练过程中出现数值异常时,才会产生NaN并触发报错。
内容的提问来源于stack exchange,提问作者joran
相关产品推荐
相关产品推荐

