如何正确地为二进制分类重新创建sklearn(python)逻辑回归predict_proba结果

时间:2017-03-30 09:48:59

标签: python scikit-learn logistic-regression

我尝试使用logistic / sigmoid函数从sklearn的逻辑回归predict_proba重新创建结果。但是,我的结果稍微结束了。我只关注二进制分类(是/否)而不是多类。

在拟合模型后,我得到以下权重(第一个权重是截距):

 print np.transpose(model.coef_)
>>>
[[-0.19727816]
 [ 0.53109229]
 [-1.31937397]
 [-0.98187463]
 [-0.3479746 ]
 [-0.54423188]
 [ 0.36497145]
 [-0.15778131]
 [-0.21998587]
 [-0.35944243]]

如果我在测试用例中使用predict_proba,我会得到以下结果(同样,测试样本中的第一个“1”表示拦截):

test_sample = np.array([1, 0, 1, 0, 1, 0, 0, 0, 1, 1])
print model.predict_proba(test_sample)    
>>>
[[ 0.9334748  0.0665252]]

但是,当我尝试使用逻辑函数重新创建此结果时,我得到的结果略有不同:

new_profile = test_sample*model.coef_
print np.transpose(new_profile)
>>>
[[-0.19727816]
 [ 0.        ]
 [-1.31937397]
 [-0.        ]
 [-0.3479746 ]
 [-0.        ]
 [ 0.        ]
 [-0.        ]
 [-0.21998587]
 [-0.35944243]]

np_sum = (new_profile).sum()
score = 1/(1+np.exp(-np_sum))
print score
>>>
0.0798743821296

我得到~8%而非6,6%,很可能是因为我在计算中错过了一步。 我知道在多类示例中你应该进行规范化:

score /= score.sum(axis=1).reshape((-1, 1))

但是,这不起作用,因为我只使用带有1个结果的二进制分类!?

为了正确计算与predict_proba相同的结果,有人可以找到我遗漏的步骤吗?

0 个答案:

没有答案