Ошибка не выровненной фигуры в питоне регрессии OLS - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть dataframe, где я пытаюсь запустить регрессию statsmodel.api OLS.Это распечатка резюме.Но когда я использую функцию predict(), она выдает мне ошибку -

формы (75,7) и (6,) не выровнены: 7 (тусклый 1)! = 6 (dim 0)

Мой код:

X = newdf.loc[:, newdf.columns != 'V-9'].values
y = newdf.iloc[:,3].values
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 
0.2,random_state=0)
import statsmodels.formula.api as sm
model = sm.OLS(y_train,X_train[:,[0,1,2,3,4,6]])
result = model.fit()
print(result.summary())`

При запуске возникает ошибка:

y_pred = result.predict(X_test)

Форма моего X_train is - (297,7)
Форма моего X_test - (75,7)
dtype numpy.ndarray

Этот вопрос был задан ранее.Я проследил за некоторыми сообщениями на stackoverflow.com и попытался решить это с помощью функции reshape.Тем не менее, это не помогло мне.Может кто-нибудь объяснить, почему я получаю эту ошибку?а в чем решение?

1 Ответ

0 голосов
/ 12 декабря 2018

model в строке model = sm.OLS(y_train,X_train[:,[0,1,2,3,4,6]]) при обучении таким образом предполагает, что входные данные являются 6-мерными, поскольку 5-й столбец X_train отбрасывается.Это требует, чтобы данные испытаний (в данном случае X_test) также были 6-мерными.Вот почему y_pred = result.predict(X_test) не работал, потому что X_test изначально был 7-мерным.Правильное исправление здесь:

y_pred = result.predict(X_test[:, [0,1,2,3,4,6]]

БОНУС

Я вижу, вы используете библиотеку Pandas.Для удаления столбцов лучше использовать .drop, поэтому вместо

newdf.loc[:, newdf.columns != 'V-9'].values

вы можете использовать

newdf.drop('V-9', axis=1) # axis=1 makes sure cols are dropped, not rows

аналогично вместоиз

X_train[:,[0,1,2,3,4,6]]

вы можете использовать

X_train.drop(X_train.columns[5], axis=1) # this like dropping the 5th column of the dataFrame

Это делает его более читабельным и более легким для кодирования, особенно если у вас было 50 измерений вместоиз 7.

Я рад, что это помогает!

...