如何提取与特定已实现 'move' 向量相关的特征向量的权重

How do I extract the weights of eigenVectors relating to a particular realized 'move' vector

我有一个时间序列的历史数据(利率),我设法从中提取了特征值和特征向量。

我正在尝试 generate/infer 利率与另一个金融数据系列之间的某种关系。鉴于我有特征向量,我如何提取该移动的特定日期(或点)的权重?

例如,我下面的代码从名为 data_ 的数据集中提取前 3 个 pca 向量。

eigVal, eigVec = np.linalg.eig((data_.diff(-1)*100).cov())
if np.sign(eigVec[:,0][5]) == -1: #swtich such that eigVec are positiv for PCA1
    eigVec = -1 * eigVec
plt.plot(eigVec[:,0])
plt.plot(eigVec[:,1])
plt.plot(eigVec[:,2])
plt.legend(['PCA1', 'PCA2', 'PCA3'])

对于下面的数组示例,我如何推断为 PCA1、PCA2 和 PCA3 分配什么权重来复制数组移动?

这个数组就是我想要得到的。

array([ 0.  ,  0.  , -0.3 ,  1.9 ,  1.7 ,  1.3 ,  1.4 ,  1.3 ,  1.3 ,
        1.36,  1.3 ])

这是特征向量 2

array([-0.16562563, -0.26507723, -0.34871106, -0.47812195, -0.44021972,
       -0.25093085, -0.16544612,  0.00289244,  0.17209837,  0.28198136,
        0.3985353 ])

这是特征向量 1

array([0.01448251, 0.03349128, 0.0559946 , 0.1639687 , 0.24343858,
       0.32155586, 0.36727468, 0.38627769, 0.41226496, 0.41694435,
       0.42199623])

使用下面的代码,其中 y_ = 您要访问的数组 eigVec[:,0] = 是您使用 linalg.eig()....

提取的第一个 PCA 向量

a1,a2,a3分别是PCA1,PCA2,PCA3的权重

a1, _, _, _ = np.linalg.lstsq(eigVec[:,0][:,np.newaxis], y_)
a2, _, _, _ = np.linalg.lstsq(eigVec[:,1][:,np.newaxis], y_)
a3, _, _, _ = np.linalg.lstsq(eigVec[:,2][:,np.newaxis], y_)

mv_pca = a1 * eigVec[:,0] + a2 * eigVec[:,1] + a3* eigVec[:,2]