Различные коэффициенты: scikit-learn против statsmodels (логистическая регрессия) - PullRequest
0 голосов
/ 19 мая 2018

При выполнении логистической регрессии коэффициенты, которые я получаю, используя statsmodels, являются правильными (сверили их с некоторыми материалами курса).Однако я не могу получить те же коэффициенты с sklearn.Я пытался предварительно обработать данные безрезультатно.Это мой код:

Statsmodels:

import statsmodels.api as sm

X_const = sm.add_constant(X)
model = sm.Logit(y, X_const)
results = model.fit()
print(results.summary())

Соответствующий вывод:

                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
const      -0.2382      3.983     -0.060      0.952      -8.045       7.569
a           2.0349      0.837      2.430      0.015       0.393       3.676
b           0.8077      0.823      0.981      0.327      -0.806       2.421
c           1.4572      0.768      1.897      0.058      -0.049       2.963
d          -0.0522      0.063     -0.828      0.407      -0.176       0.071
e_2         0.9157      1.082      0.846      0.397      -1.205       3.037
e_3         2.0080      1.052      1.909      0.056      -0.054       4.070

Scikit-learn (noпредварительная обработка)

from sklearn.linear_model import LogisticRegression

model = LogisticRegression()
results = model.fit(X, y)
print(results.coef_)
print(results.intercept_)

Даны следующие коэффициенты:

array([[ 1.29779008,  0.56524976,  0.97268593, -0.03762884,  0.33646097,
     0.98020901]])

И дано значение перехвата / постоянной:

array([ 0.0949539])

Как видите,независимо от того, какой коэффициент соответствует какой переменной, числа, заданные sklearn, не совпадают с правильными из statsmodels.Чего мне не хватает?Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Благодаря доброй душе на Reddit это было решено.Чтобы получить те же коэффициенты, нужно отрицать регуляризацию , которая sklearn применяется к логистической регрессии по умолчанию:

model = LogisticRegression(C=1e8)

Где C согласно документации :

C: число с плавающей запятой, значение по умолчанию: 1,0

Инверсия силы регуляризации;должно быть положительное число.Как и в машинах опорных векторов, меньшие значения определяют более сильную регуляризацию.

0 голосов
/ 19 мая 2018

Я не знаком с statsmodel, но может ли быть так, что метод .fit() этой библиотеки использует другие аргументы по умолчанию по сравнению с sklearn?Чтобы убедиться в этом, вы можете попытаться явно установить одинаковые соответствующие аргументы для каждого вызова .fit() и посмотреть, получите ли вы по-прежнему разные результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...