使用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
其他参数吗?
答案 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
不兼容