如何提取与特定已实现 '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]
我有一个时间序列的历史数据(利率),我设法从中提取了特征值和特征向量。
我正在尝试 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]