如何查看参数LogisticRegression()发现成本最小的地方?

时间:2019-06-08 08:38:18

标签: 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)

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

当我从Coursera课程以及从Bishop的书中学到的知识时,我自己使用Gradient Descent或Newton-Raphson进行了逻辑回归。我像这样使用了Gradient Descent方法:

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]])

我像这样使用牛顿-拉夫森,请参阅Bishop第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 :(得分:0)

假设您的#include <cstdio> #include <cstring> const int MAXN = 10005; char str1[MAXN], str2[MAXN]; bool HashTable[128] = {false}; //use HashTable to record the item need to minus int main() { fgets(str1, sizeof(str1), stdin); fgets(str2, sizeof(str2), stdin); int len1 = strlen(str1); int len2 = strlen(str2); for (int i = 0; i < len2; i++) { HashTable[str2[i]] = true; } for (int i = 0; i < len1; i++) { if (HashTable[str1[i]] == false) { printf("%c", str1[i]); } } return 0; } 对象称为LogisticRegression()。您可以通过执行regressor来拟合模型。拟合模型后,优化算法将给出Logistic回归参数,以使成本最小,换句话说,模型的判别力处于最佳状态。拟合后,您将通过使用

获得模型参数
result = regressor.fit(X,y)

有关更多详细信息,请参见sklearn的documentation

如果此答案不令人满意,建议您查看Statsmodels

这是一个简短的例子

result.get_params()

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

答案 1 :(得分:0)

参数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不兼容