С 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
другие параметры?