我尝试使用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相同的结果,有人可以找到我遗漏的步骤吗?