Как подогнать модель под мой набор для тестирования в statsmodels (python)

Я работаю над моделью логистической регрессии, и у меня возникают проблемы с пониманием того, как перенести модель, подходящую из моего обучающего набора, к моему набору тестирования. Извините, я новичок в python и ОЧЕНЬ новичок в моделях статистики ..

import pandas as pd
import statsmodels.api as sm
from sklearn import cross_validation

independent_vars = phy_train.columns[3:]
X_train, X_test, y_train, y_test = cross_validation.train_test_split(phy_train[independent_vars], phy_train['target'], test_size=0.3, random_state=0)
X_train = pd.DataFrame(X_train)
X_train.columns = independent_vars
X_test = pd.DataFrame(X_test)
X_test.columns = independent_vars
y_train = pd.DataFrame(y_train)
y_train.columns = ['target']
y_test = pd.DataFrame(y_test)
y_test.columns = ['target']
logit = sm.Logit(y_train,X_train[subset],missing='drop')
result = logit.fit()
print result.summary()

y_pred = logit.predict(X_test[subset])

Из последней строки я получаю такую ​​ошибку:

y_pred = logit.predict (X_test [subset]) Traceback (последний вызов последним): файл «», строка 1, в файле «C: \ Users \ eMachine \ WinPython-64bit-2.7.5.3 \ python-2.7.5. amd64 \ lib \ site-packages \ statsmodels \ diskte \ diskte_model.py ", строка 378, в прогнозируемом возврате self.cdf (np.dot (exog, params)) ValueError: матрицы не выровнены

В моем наборе данных для обучения и тестирования одинаковое количество переменных, поэтому я уверен, что неправильно понимаю, что на самом деле делает logit.predict ().


person statsNoob    schedule 13.04.2014    source источник
comment
У np.asarray(X_train[subset]).shape и np.asarray(X_test[subset]).shape одинаковое второе значение?   -  person Josef    schedule 14.04.2014
comment
@ user333700 Да, это так.   -  person statsNoob    schedule 14.04.2014


Ответы (1)


Есть два метода прогнозирования.

logit в вашем примере - это экземпляр модели. Экземпляр модели не знает о результатах оценки. Прогноз модели имеет другую сигнатуру, потому что ему также нужны параметры logit.predict(params, exog). В основном это интересно для внутреннего использования.

Все, что вам нужно, - это метод прогноза для экземпляра результатов. В вашем примере

y_pred = result.predict(X_test[subset])

должен дать правильные результаты. Он использует оценочные параметры в прогнозе с вашими новыми тестовыми данными независимых переменных, X_test.

Вызов model.fit() возвращает экземпляр класса результатов, который обеспечивает доступ к дополнительной статистике и анализу после оценки, а также к прогнозированию.

person Josef    schedule 13.04.2014