Как посмотреть параметры, которые LogisticRegression () нашла там, где стоимость минимальна? - PullRequest
1 голос
/ 08 июня 2019

С sklearn's LogisticRegression(), как я могу увидеть параметры, которые он нашел после .fit(), где стоимость минимальна? Я использую книгу Джерона о scikit-learn и тензорном потоке, и на странице 137 он тренирует модель ширины лепестков. Я сделал следующее:

iris=datasets.load_iris()
a1=iris['data'][:,3:]
y=(iris['target']==2).astype(int)
log_reg=LogisticRegression()
log_reg.fit(a1,y)

log_reg.coef_
array([[2.61727777]])
log_reg.intercept_
array([-4.2209364])

Я сделал логистическую регрессию самостоятельно с помощью градиентного спуска или Ньютона-Рафсона, как я узнал из моего курса Coursera и, соответственно, из своей книги епископа. Я использовал метод градиентного спуска так:

from sklearn import datasets
iris=datasets.load_iris()
a1=iris['data'][:,3:]
A1=np.c_[np.ones((150,1)),a1]
y=(iris['target']==2).astype(int).reshape(-1,1)
lmda=1

from scipy.special import expit

def logreg(w):
  z2=A1.dot(w)
  a2=expit(z2)
  delta2=a2-y
  w=w-(lmda/len(a1))*A1.T.dot(delta2)
  return w

w=np.array([[0],[0]])
for i in range(0,100000):
  w=logreg(w)

In [6219]: w
Out[6219]:
array([[-21.12563996],
       [ 12.94750716]])

Я использовал Ньютона-Рафсона вот так, см. Епископ стр. 207,

from sklearn import datasets
iris=datasets.load_iris()
a1=iris['data'][:,3:]
A1=np.c_[np.ones(len(a1)),a1]
y=(iris['target']==2).astype(int).reshape(-1,1)

def logreg_nr(w):
  z1=A1.dot(w)
  y=expit(z1)
  R=np.diag((y*(1-y))[:,0])
  H=A1.T.dot(R).dot(A1)
  tmp=A1.dot(w)-np.linalg.inv(R).dot(y-t)
  v=np.linalg.inv(H).dot(A1.T).dot(R).dot(tmp)
  return vw=np.array([[0],[0]])

for i in range(0,10):
  w=logreg_nr(w)

In [5149]: w
Out[5149]:
array([[-21.12563996],
       [ 12.94750716]])

Обратите внимание, насколько быстрее идет Ньютон-Рафсон, чем градиентный спуск. Но они дают одинаковый результат.

Как узнать, какие параметры LogisticRegression() найдены? И я должен дать LogisticRegression другие параметры?

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Значением по умолчанию для penalty в параметре является l2 в LogisticRegresssion. Если мы изменим это на none, мы получим тот же результат, что и ваша реализация.

>>> log_reg=LogisticRegression(penalty='none',solver='newton-cg')
>>> log_reg.fit(a1,y)

>>> log_reg.coef_
[[12.94748623]]
>>> log_reg.intercept_
[-21.12560671]

Примечание: solver изменено, поскольку none несовместимо с решателем по умолчанию, который liblinear

0 голосов
/ 08 июня 2019

Предполагается, что ваш LogisticRegression() объект называется regressor.Вы подходите модели, делая result = regressor.fit(X,y).После подбора модели алгоритм оптимизации выдает параметры Логистической регрессии таким образом, чтобы стоимость была минимальной, или, другими словами, степень дискриминации модели находится на оптимальном уровне.После подгонки вы получите параметры модели, используя

result.get_params()

Для получения более подробной информации см. Документацию sklearn

Если этот ответ не является удовлетворительным, я рекомендую вам принятьвзгляд на Statsmodels

Вот краткий пример

import statsmodels.api as sm

logit = sm.Logit(y, X)

result = logit.fit()

 print(result.summary())

Последний оператор print даст вам всю таблицу со множеством статистических данных и среди них модельные расчетные коэффициенты.

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