Scikit learn 如何查看LogisticRegression()找到的成本最低的参数?
使用sklearn的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)
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相同的答案。