python做logistic回归_用Python做Logistic回归

为什么写这篇文章

本人初学python,碰巧做的东西需要用一下Logistic回归,自觉这个很基础的东西应该已经有很多比较好的实现了,于是我就很自觉地问了下度娘。结果大囧==..出来的相关结果少得可怜,只有一个实现好的代码,但是看了下实现的比较粗糙,梯度下降部分用的是固定步长..于是抱着死马当活马医心态google了一下,结果发现有不少成熟的统计和科学计算的包里面已经实现好了,比如statsmodels,于是本文就讲一下怎么用statsmodels做Logistic回归好啦~

吐槽下..学术上的事果然还是国外比国内靠谱得多..

什么是Logistic回归

用处

Logistic回归主要用于分类,即给定一个用数值表示的特征向量X(粗体表示向量),求出这个向量所属的类别Y

当然,可以用来分类的算法很多,比如SVM,神经网络等。但是这些算法都比较复杂,要掌握其细节有些难度。Logistic回归虽然简单,但是在很多情况下也能得到很好的效果

函数形式及学习参数的算法

Logistic回归的函数属于sigmoid函数,就相当于把sigmoid的自变量替换成多元线性回归的自变量部分(等号右边)即可

学习自变量X的参数θ的方法是梯度下降法(GradientDescent),核心思想就是根据原函数的特性,构造出一个准则函数J(θ),这个准则函数的特性是J(θ)的值越小,原函数的拟合程度就越好。然后随机对θ赋初值,每一次迭代计算出J(θ)的梯度▽J(θ),我们知道函数的梯度是函数值上升最快的方向,所以这里取梯度的负方向-▽J(θ),再乘以一个步长η(k),就可以得到每次迭代后更新的参数θ=θ-η(k)▽J(θ)。其中k是当前迭代次数,这里取步长η(k)稍微有点复杂,初学时可以简单地取一个定值。

这里写的比较简略,具体可以参考这个博文,如果还不太明白请百度Logistic回归或梯度下降吧~

用statsmodels做Logistic回归

statsmodels是python的一个做统计建模,计量经济学分析的扩展包,输出的结果真心相当舒服,跟各大统计软件的结果输出很像,比如拟合出来Logistic回归模型后:

printresult.summary(),可以得到如下结果

Logit Regression Results

==============================================================================

Dep. Variable:                  admit   No. Observations:                  400

Model:                          Logit   Df Residuals:                      394

Method:                           MLE   Df Model:                            5

Date:                Sun, 03 Mar 2013   Pseudo R-squ.:                 0.08292

Time:                        12:34:59   Log-Likelihood:                -229.26

converged:                       True   LL-Null:                       -249.99

LLR p-value:                7.578e-08

==============================================================================

coef    std err          z     P>|z|      [95.0% Conf.Int.]

------------------------------------------------------------------------------

gre            0.0023      0.001     2.070      0.038         0.000     0.004

gpa            0.8040      0.332     2.423      0.015         0.154     1.454

prestige_2    -0.6754     0.316     -2.134      0.033        -1.296    -0.055

prestige_3    -1.3402     0.345     -3.881      0.000        -2.017    -0.663

prestige_4    -1.5515     0.418     -3.713      0.000        -2.370    -0.733

intercept     -3.9900      1.140    -3.500      0.000        -6.224    -1.756

==============================================================================

预测的话:

combos['admit_pred']=result.predict(combos[train_cols])

print combos.head()

#    gre       gpa prestige  intercept  prestige_2 prestige_3  prestige_4  admit_pred

# 0  220  2.260000         1          1           0           0           0   0.157801

# 1  220  2.260000         2          1           1           0           0   0.087056

# 2  220  2.260000         3          1           0           1           0   0.046758

# 3  220  2.260000         4          1           0           0           1   0.038194

# 4  220  2.453333         1          1           0           0           0   0.179574

是不是很舒服呢?

具体用法参考这篇博文吧,虽然是英文的,不过写的确实很好,直接看代码的话也能看懂~

如果那篇博文打不开的话,试试国内转载的吧,就是排版没有原版的舒服

另外,如果不想安装那篇博文提到的Enthought Free Distribution的话,可以参考我的一篇博文来安装对应的扩展包,如果不需要画图的话,可以不装matplotlib。另外,statsmodels还需要安装patsy

你可能感兴趣的:(python做logistic回归_用Python做Logistic回归)