forecast_std = np.sqrt(forecast_var) forecast_upper = forecast_mean + 1.96 * forecast_std forecast_lower = forecast_mean - 1.96 * forecast_std 1.96是怎么得到的
时间: 2023-09-28 18:03:49 浏览: 49
在统计学中,1.96 是一个常用的标准正态分布的分位数,也称为 Z 分数。标准正态分布是一种特殊的正态分布,其均值为 0,标准差为 1。它的概率密度函数是一个钟形曲线,对于任何一个标准正态分布,其 95% 的观测值都落在以均值为中心,标准差为 1.96 的区间内。
在 ARIMA 模型中,我们使用 1.96 作为置信区间的系数,这意味着我们希望在 95% 的置信度下,预测值落在所计算的置信区间内。因此,我们使用 1.96 乘以预测标准差,计算出置信区间的上界和下界,从而得到一个包含 95% 置信度的置信区间。
需要注意的是,在实际应用中,对于不同的置信度,所使用的分位数系数也会有所不同。如果需要计算其他置信度下的置信区间,可以根据需要使用不同的分位数系数来计算。
相关问题
解释这段代码rmse = np.sqrt(mean_squared_error(val, forecast))
这段代码计算了预测值和真实值之间的均方根误差(Root Mean Squared Error,RMSE)。RMSE 是用来度量预测值与真实值之间的差异的一种常用指标。它计算了预测值与真实值之间的差异的平方和的平均值,并取其平方根。
在这段代码中,val是真实值,forecast是预测值,mean_squared_error是计算均方误差的函数,np.sqrt是计算平方根的函数。最终得到的rmse即为预测值与真实值之间的均方根误差。
请把这个训练模型改为批量循环模式 :# 使用 LSTM+attention 模型对测试数据进行预测 y_pred = model_lstm.predict(X_test) # 计算 LSTM+attention 模型的预测误差 residuals = y_test - y_pred # 使用 ARCH(1) 模型对残差序列进行建模 model_arch = arch_model(residuals, mean='Zero', vol='ARCH', p=1) res = model_arch.fit() # 预测 ARCH 模型的方差 forecast_var = res.forecast(horizon=len(y_test)) # 将 LSTM+attention 模型的预测结果和 ARCH 模型的方差结合起来 y_pred_final = y_pred * np.sqrt(forecast_var.mean['h.1'].values.reshape(-1, 1)) # 输出调整后的预测结果 print(y_pred_final)
以下是将这个训练模型改为批量循环模式的代码:
```
batch_size = 32 # 每个批次的大小
n_batches = len(X_test) // batch_size # 总批次数
# 初始化预测结果列表
y_pred_final_list = []
# 遍历每个批次进行预测和训练
for i in range(n_batches):
# 获取当前批次的数据
X_batch = X_test[i*batch_size:(i+1)*batch_size]
y_batch = y_test[i*batch_size:(i+1)*batch_size]
# 使用 LSTM+attention 模型对当前批次数据进行预测
y_pred = model_lstm.predict(X_batch)
# 计算 LSTM+attention 模型的预测误差
residuals = y_batch - y_pred
# 使用 ARCH(1) 模型对残差序列进行建模
model_arch = arch_model(residuals, mean='Zero', vol='ARCH', p=1)
res = model_arch.fit()
# 预测 ARCH 模型的方差
forecast_var = res.forecast(horizon=len(y_batch))
# 将 LSTM+attention 模型的预测结果和 ARCH 模型的方差结合起来
y_pred_final = y_pred * np.sqrt(forecast_var.mean['h.1'].values.reshape(-1, 1))
# 将当前批次的预测结果保存到列表中
y_pred_final_list.append(y_pred_final)
# 将所有批次的预测结果合并
y_pred_final = np.concatenate(y_pred_final_list, axis=0)
# 输出调整后的预测结果
print(y_pred_final)
```
以上代码将测试数据集分成多个批次进行预测和训练,并将每个批次的预测结果保存到列表中。最后将所有批次的预测结果合并得到最终的预测结果。