sklearn中的多项逻辑函数

时间:2014-02-16 02:57:29

标签: python scikit-learn

我试图从sklearn的LogisiticRegression分类器复制多项类的结果。 这是我的代码:

import math
y = 24.019138
z = -0.439092
print 'Using sklearn predict_proba function: '
print all_classifiers['1'][0].predict_proba([y,z])
print 'Coefficients:'
print all_classifiers['1'][0].coef_
print 'Intercept:'
print all_classifiers['1'][0].intercept_
with_sigmoid = []
for i,j in zip(all_classifiers['1'][0].coef_,all_classifiers['1'][0].intercept_):
    beta1,beta2 = i
    beta0 = j
    a = beta0 + (y*beta1) + (z*beta2)
    b = 1/float(1+math.exp(-a))
    with_sigmoid.append(b)
print 'Using sigmoid function: '
print with_sigmoid

这给了我输出:

Using sklearn predict_proba function: 
[[  9.03429446e-35   4.91411807e-01   5.08588193e-01]]
Coefficients:
[[ -3.47464867 -15.3518603 ]
[  0.91372436   0.98331135]
[  9.17971403  64.76067487]]
Intercept:
[ -0.99614688 -18.16136032   3.32166197]
Using sigmoid function: 
[1.7763476601257703e-34, 0.9662273209839563, 1.0]

结果不同,使用sigmoid函数概率甚至不等于1.考虑到它使用一个与所有分类,我认为这应该有效。我在这里错过了什么吗?感谢。

1 个答案:

答案 0 :(得分:2)

一对一分类不必加一。它是三个独立的分类器,每个类一个。但是,如果您将one vs all分类给出的值标准化,您将获得predict_proba给出的概率

>>> import numpy as np
>>> one_vs_all = np.array([1.7763476601257703e-34, 0.9662273209839563, 1.0])
>>> one_vs_all/sum(one_vs_all)
array([  9.03429446e-35,   4.91411807e-01,   5.08588193e-01])