直接预测模态系数 = 对模态系数进行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:原始数据集
$\mu$:原始数据集S的平均值
S_transformed:原始数据集模态系数
V^T:原始数据集S均值化以后,进行奇异值分解得到的模态
S_transformed = V^T (S-$\mu$)
predicted_coefficients = AR(S_transformed^T)
第二种情况:对模态系数进行pca分解,然后再预测
W^T : S_transformed均值化以后,进行奇异值分解得到的模态
$\mu_2$:S_transformed的平均值
time_coefficients = W^T (S_transformed-$\mu_2$)
sub_predicted_coefficients = AR(time_coefficients^T)
predicted_coefficients_v2 = (sub_predicted_coefficients)@ W^T + $\mu_2$
predicted_coefficients_v2 = AR((S_transformed-$\mu_2$)^T W) @ W^T + $\mu_2$
predicted_coefficients 和 predicted_coefficients_v2是否接近或相等的关键在于两个变量:$\mu_2$ 、 W
- $\mu_2$
$\mu$ 是原始数据S的均值,V^T是PCA的成分矩阵,如果V捕获了全部方差,那么S_transformed中的每一列都是S-$\mu$投影到模态上的结果,其均值理论上应该非常小,因为已经从 S 中移除了均值。这种情况可以假设$\mu_2$接近与0。
- W
因为我们第二次PCA使用了全部模态,那么W是一个满秩矩阵,W覆盖了原数据S_transformed的全部重要特征,没有信息丢失,所有在$\mu_2$ = 0的情况下
predicted_coefficients_v2 $\approx$ AR((S_transformed)^T W) @ W^T
$\approx$ AR((S_transformed)^T) W @ W^T = AR((S_transformed)^T) = predicted_coefficients
所以 predicted_coefficients_v2 $\approx$ = predicted_coefficients