Формы не выровнены для точно таких же фигур в статистических моделях

avatar
Дмитрий Сажнев
8 августа 2021 в 22:21
37
1
0

Я использую кадры данных и серии pandas в качестве тестовых и обучающих данных. Я проверяю формы моего фрейма данных поезда и тестового фрейма данных, и они абсолютно идентичны. Но у меня все еще есть ошибка shapes not aligned. Вот мой код соответствия/прогноза:

train_df = df.loc[:50]
X_train = train_df[["Value", "Momentum", "Quality", "MinimumVolatility"]]
y_train = train_df["P1ExRe"]

X_train = sm.add_constant(X_train)

model = sm.OLS(y_train, X_train)
results = model.fit()
test_df = df.loc[51:100]
x_test = test_df[["Value", "Momentum", "Quality", "MinimumVolatility"]]
y_test = test_df["P1ExRe"]

print(x_test.shape==X_train.shape)
model.predict(x_test)

Вот ошибка:

    ValueError                                Traceback (most recent call last)
<ipython-input-108-832ad1f6bc61> in <module>
      4 
      5 print(x_test.shape==X_train.shape)
----> 6 model.predict(x_test)

~/projects/courserads/venv/lib/python3.6/site-packages/statsmodels/regression/linear_model.py in predict(self, params, exog)
    378             exog = self.exog
    379 
--> 380         return np.dot(exog, params)
    381 
    382     def get_distribution(self, params, scale, exog=None, dist_class=None):

<__array_function__ internals> in dot(*args, **kwargs)

ValueError: shapes (50,5) and (50,5) not aligned: 5 (dim 1) != 50 (dim 0)
Источник
Josef
9 августа 2021 в 02:51
0

Сообщение об ошибке выглядит странно. Это означало бы, что params является двумерным с формой (50, 4). summary() выглядит разумно? Какова форма y_train, это серия панд?

StupidWolf
9 августа 2021 в 06:58
0

Вы запускали sm.OLS(y_train, X) вместо sm.OLS(y_train, X_train)

Дмитрий Сажнев
10 августа 2021 в 08:38
0

@Josef Йозеф Я не большой эксперт, но summary выглядит разумным для меня. Форма params — (5,), форма y_train — (50,)

Дмитрий Сажнев
10 августа 2021 в 08:41
0

@StupidWolf на самом деле я сделал. Извините, это была опечатка. я редактировал код

Ответы (1)

avatar
Josef
10 августа 2021 в 13:00
1

Вы используете метод model.predict. Вы должны использовать results.predict(...).

Для прогнозирования модели требуется params, так как только результаты имеют оценочные параметры.

Ваш x_test в model.predict интерпретируется как params и вызывает несоответствие формы.