Scikit Learn:逻辑回归模型系数:澄清说明

36

我需要知道如何以这样的方式返回逻辑回归系数,以便我可以自己生成预测概率。

我的代码看起来像这样:

lr = LogisticRegression()
lr.fit(training_data, binary_labels)

# Generate probabities automatically
predicted_probs = lr.predict_proba(binary_labels)

我原以为lr.coeff_的值会遵循典型的逻辑回归,因此可以像这样返回预测概率:

sigmoid( dot([val1, val2, offset], lr.coef_.T) )

但这不是适当的表述方式。有人知道从Scikit Learn的LogisticRegression生成预测概率的正确格式吗?谢谢!

2个回答

32

请查看文档 (http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html),可知 lr.coef_ 不存储偏置系数。

coef_ 数组,形状为 [n_classes-1, n_features],表示决策函数中特征的系数。coef_ 是只读属性,由 raw_coef_ 导出,其遵循 liblinear 的内部内存布局。intercept_ 数组,形状为 [n_classes-1],是添加到决策函数中的截距 (亦称偏置),仅在参数 intercept 设置为 True 时可用。

尝试一下:

sigmoid( dot([val1, val2], lr.coef_) + lr.intercept_ ) 

1
#prgao,谢谢你的回答,但是它只告诉我如何不生成概率。你知道如何计算它们吗?谢谢。 - zbinsd
3
sigmoid( dot([val1, val2], lr.coef_) + lr.intercept_ ) - prgao
1
#prgao,成功了。该死,我认为这应该有效果:sigmoid( dot([val1, val2, 1], lr.coef_.T)),但结果是,我需要两次包含截距,就像这样:sigmoid( dot([val1, val2, 1], lr.coef_.T) + lr.intercept_ )。感谢你指出这一点。 - zbinsd
可以缩写为:sigmoid( dot([val1, val2, 2], lr.coef_.T) )。请注意 2 的值。这实际上添加了一个额外的截距项。 - zbinsd
4
如果有人需要,这可能对他们有用。我尝试了这个方法,但是我的predict_proba结果与prgao提出的解决方案得到了不同的值。结果发现我没有将概率进行归一化(除以总和)。 - Roger

3
最简单的方法是调用LR分类器的coef_属性:
请查看Scikit-Learn文档中对coef_的定义:
参考示例:
from sklearn.linear_model import LogisticRegression

clf = LogisticRegression()  
clf.fit(x_train,y_train)  

weight = classifier.coef_  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接