Прогнозирование значений с использованием модели OLS с помощью statsmodels

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

model = OLS(labels[:half], data[:half])
predictions = model.predict(data[half:])

Проблема в том, что я получаю сообщение об ошибке: Файл "/usr/local/lib/python2.7/dist-packages/statsmodels-0.5.0-py2.7-linux-i686.egg/statsmodels/regression/linear_model.py" , строка 281, в прогнозируемом возврате np.dot (exog, params) ValueError: матрицы не выровнены

У меня есть следующие формы массива: data.shape: (426, 215) labels.shape: (426,)

Если я перенесу входные данные в model.predict, я получу результат, но с формой (426 213), поэтому я полагаю, что это тоже неправильно (я ожидаю, что один вектор из 213 чисел в качестве прогнозов меток):

model.predict(data[half:].T)

Есть идеи, как заставить его работать?


person nickb    schedule 04.11.2012    source источник


Ответы (1)


Для statsmodels> = 0,4, если я правильно помню

model.predict не знает о параметрах и требует их в вызове, см. http://statsmodels.sourceforge.net/stable/generated/statsmodels.regression.linear_model.OLS.predict.html

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

model = OLS(labels[:half], data[:half])
results = model.fit()
predictions = results.predict(data[half:])

или короче

results = OLS(labels[:half], data[:half]).fit()
predictions = results.predict(data[half:])

http://statsmodels.sourceforge.net/stable/generated/statsmodels.regression.linear_model.RegressionResults.predict.html с отсутствующей строкой документации

Примечание: это было изменено в версии для разработки (обратно совместимой), которая может использовать информацию «формулы» в pred http://statsmodels.sourceforge.net/devel/generated/statsmodels.regression.linear_model.RegressionResults.predict.html

person Josef    schedule 04.11.2012
comment
Хотя это правильный ответ на вопрос БОЛЬШОЕ ПРЕДУПРЕЖДЕНИЕ о подгонке модели и разделении данных. Вы должны были использовать 80% данных (или большую часть) для обучения / настройки и 20% (остальное) для тестирования / прогнозирования. Разделение данных 50:50 похоже на кот Шредингера. У нас нет уверенности в том, что все наши данные верны или все неверны. Таким образом, доверие к модели находится где-то посередине. Мы хотим иметь больше уверенности в нашей модели, поэтому мы должны обучаться большему количеству данных, чем проводить тестирование. - person lukassos; 04.05.2017