2016-07-19 3 views
0

Я планировал использовать sklearn linear_model для построения графика результата линейной регрессии и statsmodels.api, чтобы получить подробное резюме результата обучения. Однако два пакета дают очень разные результаты на одном и том же входе.Различные коэффициенты линейной регрессии с помощью statsmodels и sklearn

Например, постоянный термин от sklearn равен 7.8e-14, но постоянный член от statsmodels равен 48.6. (Я добавил колонку 1-х в х для постоянного члена при использовании обоих методов) Мой код для обоих методов succint:

# Use statsmodels linear regression to get a result (summary) for the model. 
def reg_statsmodels(y, x): 
    results = sm.OLS(y, x).fit() 
    return results 

# Use sklearn linear regression to compute the coefficients for the prediction. 
def reg_sklearn(y, x): 
    lr = linear_model.LinearRegression() 
    lr.fit(x, y) 
    return lr.coef_ 

вход слишком сложен, чтобы разместить сообщение. Возможно ли, что сингулярный вход x вызвал эту проблему?

Сделав 3-мерный участок с использованием PCA, кажется, что результат sklearn не является хорошим приближением. Какие объяснения? Я все еще хочу сделать визуализацию, поэтому будет очень полезно исправить проблемы в реализации линейной регрессии sklearn.

ответ

1

Вы говорите, что

I added a column of 1's in x for constant term when using both methods 

Но documentation из линейной регрессии говорит, что

LinearRegression(fit_intercept=True, [...]) 

он подходит перехват по умолчанию. Это может объяснить, почему у вас есть различия в постоянном членстве.

Теперь для других коэффициентов могут возникать различия, когда две из переменных сильно коррелированы. Рассмотрим самый экстремальный случай, когда два из ваших столбцов идентичны. Тогда уменьшение коэффициента перед любой из двух может быть компенсировано увеличением другого. Это первое, что я проверил.

Смежные вопросы