Как извлечь веса собственных векторов, относящихся к конкретному реализованному вектору «перемещения» - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть временной ряд исторических данных (процентные ставки), где мне удалось извлечь собственные значения и собственные векторы.

Я пытаюсь сгенерировать / сделать вывод о некоторой взаимосвязи между процентными ставками идругой финансовый ряд данных. Учитывая, что у меня есть собственные векторы, как я могу извлечь веса определенного дня (или точки) этого перемещения?

Например, мой код ниже извлекает первые 3 вектора pca из набора данных, называемого data_.

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'])

Pca Vectors

Как я могу сделать вывод для приведенного ниже примера массива, какие веса назначить 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])

1 Ответ

0 голосов
/ 06 ноября 2019

используйте приведенный ниже код, где y_ = массив, к которому вы пытаетесь обратиться eigVec [:, 0] = это 1-й вектор PCA, который вы извлекли с помощью linalg.eig () ....

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...