直接预测模态系数 = 对模态系数进行pca分解,选择全部模态然后对模态系数进行预测,然后再重构回来。
源码:
pca = PCA(n_components=10)
S_transformed = pca.fit_transform(S)
print('S_transformed shape: ', S_transformed.shape)
# 训练自回归模型并预测下一步时间系数
predicted_coefficients = fit_autoregressive_model_v2(S_transformed.T, num_lags=3)
#--------------------------------------------------------------
sub_pca = PCA()
time_coefficients = sub_pca.fit_transform(S_transformed)
print('time_coefficients shape: ', time_coefficients.shape)
sub_predicted_coefficients = fit_autoregressive_model_v2(time_coefficients.T, num_lags=3)
predicted_coefficients_v2 = sub_pca.inverse_transform(sub_predicted_coefficients)
解释下为什么:
第一种情况:直接预测模态系数
S:原始数据集
S_transformed:原始数据集模态系数
V^T:原始数据集S均值化以后,进行奇异值分解得到的模态
S_transformed = V^T (S-
predicted_coefficients = AR(S_transformed^T)
第二种情况:对模态系数进行pca分解,然后再预测
W^T : S_transformed均值化以后,进行奇异值分解得到的模态
:S_transformed的平均值
time_coefficients = W^T (S_transformed-
sub_predicted_coefficients = AR(time_coefficients^T)
predicted_coefficients_v2 = (sub_predicted_coefficients)@ W^T +
predicted_coefficients_v2 = AR((S_transformed-
predicted_coefficients 和 predicted_coefficients_v2是否接近或相等的关键在于两个变量:
- W
因为我们第二次PCA使用了全部模态,那么W是一个满秩矩阵,W覆盖了原数据S_transformed的全部重要特征,没有信息丢失,所有在
predicted_coefficients_v2
所以 predicted_coefficients_v2