Scikit learn 如何查看LogisticRegression()找到的成本最低的参数?

Scikit learn 如何查看LogisticRegression()找到的成本最低的参数?,scikit-learn,logistic-regression,Scikit Learn,Logistic Regression,使用sklearn的LogisticRegression(),如何在成本最低的.fit()之后查看它找到的参数?我使用了Geron关于scikit learn和tensorflow的书,在第137页,他训练了花瓣宽度的模型。我做了以下工作: iris=datasets.load_iris() a1=iris['data'][:,3:] y=(iris['target']==2).astype(int) log_reg=LogisticRegression() log_reg.fit(a1,y)

使用sklearn的
LogisticRegression()
,如何在成本最低的
.fit()
之后查看它找到的参数?我使用了Geron关于scikit learn和tensorflow的书,在第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课程和Bishop书中分别学到的。我使用了梯度下降法,如下所示:

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()
对象被称为
regressor
。通过执行
result=regressor.fit(X,y)
来拟合模型。在拟合模型后,优化算法给出Logistic回归参数,使得成本最小,或者换句话说,模型的识别能力处于最佳状态。拟合后,您将使用

result.get_params()
有关更多详细信息,请参阅sklearn's

如果这个答案不令人满意,我建议你看看

下面是一个简短的例子

import statsmodels.api as sm

logit = sm.Logit(y, X)

result = logit.fit()

 print(result.summary())

最后一个print语句将为您提供包含许多统计信息的整个表,其中包括模型估计系数。

假设您的
LogisticRegression()
对象被称为
regressor
。通过执行
result=regressor.fit(X,y)
来拟合模型。在拟合模型后,优化算法给出Logistic回归参数,使得成本最小,或者换句话说,模型的识别能力处于最佳状态。拟合后,您将使用

result.get_params()
有关更多详细信息,请参阅sklearn's

如果这个答案不令人满意,我建议你看看

下面是一个简短的例子

import statsmodels.api as sm

logit = sm.Logit(y, X)

result = logit.fit()

 print(result.summary())

最后一个print语句将为您提供包含许多统计信息的整个表,其中包括模型估计系数。

参数中
惩罚
的默认值是
logisticRetression
中的
l2
。如果我们将其更改为
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
参数中
惩罚
的默认值为
逻辑回归中的
l2
。如果我们将其更改为
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

否。我已更新了我的问题,因此您可以看到我要查找的位置。可能两个模型中的估计系数都已缩放。这是正则化项。在scikit学习中,它始终存在:$\lambda$=1。当我也这么做的时候,我得到了与scikit-learn相同的答案。我已经更新了我的问题,所以你可以看到我在找什么。也许两个模型中的估计系数都是按比例的。这是正则化项。在scikit学习中,它始终存在:$\lambda$=1。当我也这么做的时候,我得到了与scikit-learn相同的答案。我们应该猜一下你是如何“像我在Coursera课程中学到的那样,用牛顿-拉斐逊的梯度下降法自己做逻辑回归的”吗?这是正则化项。在scikit学习中,它始终存在:$\lambda$=1。当我也这么做的时候,我得到了与scikit-learn相同的答案。我们应该猜一下你是如何“像我在Coursera课程中学到的那样,用牛顿-拉斐逊的梯度下降法自己做逻辑回归的”吗?这是正则化项。在scikit学习中,它始终存在:$\lambda$=1。当我也这么做的时候,我得到了与scikit learn相同的答案。