Scikit-Learn PCA прогнозирование временных рядов; ошибка с преобразованием - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь прогнозировать многовариантные временные ряды с использованием анализа главных компонентов и векторной авторегрессии.

Мои данные содержатся в кадре данных pandas с 4 переменными формы (14193, 4).

Итак, я нашел ПК, спроецировал их вперед, используя VAR, и теперь я пытаюсь преобразовать эти ПК обратно в мои исходные 4 переменные, используя метод .transform(), как указано в этом посте на statsexchange * 1007. *

У меня есть следующий код:

from sklearn.decomposition import PCA
from statsmodels.tsa.vector_ar.var_model import VAR

# first PCA
df = df     #obviously not exact code; shown for completeness)
pca = PCA(n_components=3, copy=True, whiten=False)
pca.fit(df)
dpca = pd.DataFrame(pca.transform(df))     #dataframe of 3 component values for each historical data point

# now VAR
model = VAR(dpca)
model_fit = model.fit()
yhat = model_fit.forecast(model_fit.y, steps=10)

Это прекрасно работает и обеспечивает (10,3) вывод проектируемых ПК. Теперь я хочу взять значения yhat для ПК и преобразовать их в исходные переменные. Однако, когда я делаю это:

mu = np.mean(dpca, axis=0)
new_vars = np.dot(pca.transform(yhat), pca.components_)
new_vars += mu

Я получаю следующую ошибку:

ValueError: operands could not be broadcast together with shapes (10,3) (4,) 

Ошибка на линии pca.transform(yhat) и, в частности, X = X - self.mean_. Итак, ясно, что упомянутое «среднее» имеет форму (4,).

Полагаю, мой вопрос: как мне выполнить преобразование, чтобы оно включало мой новый набор данных dpca на основе ПК, который имеет среднюю форму (3,)

...