首页
学习
活动
专区
工具
TVP
发布

Python数据分析之逻辑回归

逻辑回归是分类当中极为常用的手段,它属于概率型非线性回归,分为二分类和多分类的回归模型。对于二分类的logistic回归,因变量y只有“是”和“否”两个取值,记为1和0。假设在自变量x1,x2,……,xp,作用下,y取“是”的概率是p,则取“否”的概率是1-p。下面将对最为常用的二分类logistic回归模型的原理以及应用进行介绍。(不想看原理的可以直接调至后半部分,有代码演示)

sigmoid函数

在logistic回归的二分类问题中,要用到的函数就是sigmoid函数。sigmoid函数非常简单,他的表达式是

因变量x取值范围是(-∞,+∞),但是sigmoid函数的值域是(0, 1)。因此不管x取什么值其对应的sigmoid函数值一定会落到(0,1)范围内。它的基本图形如下:

(当z为0的时候,函数值为0.5;随着z的增大,函数值逼近于1;随着z的减小,函数值逼近于0.)

生成sigmoid函数图的代码:

importnumpy

importmath

importmatplotlib.pyplotasplt

defsigmoid(x):

a = []

foriteminx:

a.append(1.0/(1.0+ math.exp(-item)))

returna

x = numpy.arange(-10,10,0.1)

y = sigmoid(x)

plt.plot(x,y)

plt.yticks([0.0,0.5,1.0])

plt.axhline(y=0.5, ls='dotted', color='k')

plt.show()

sigmoid函数很适合做我们刚才提到的二分类的分类函数。假设输入数据的特征是(x0, x1, x2, ..., xn),我们在每个特征上乘以一个回归系数 (w0, w1, w2, ... , wn),然后累加得到sigmoid函数的输入z:

那么,输出就是一个在0~1之间的值,我们把输出大于0.5的数据分到1类,把输出小于0.5的数据分到0类。这就是Logistic回归的分类过程。

基于最优化方法的最佳回归系数的确定

由上,可知logistic回归的大致流程如下,我们要做的就是确定出最佳的w=(w0, w1, w2, ... , wn)。

损失函数与极大似然函数

在logistic回归里面,用极大似然法来求解模型参数。关于似然函数的概念可以参考kevinGao的博客

http://www.cnblogs.com/kevinGaoblog/archive/2012/03/29/2424346.html

先定义似然函数(每个样本都认为是独立的):

根据似然函数的概念,令似然函数最大的那个概率就是最合理的。我们想最大化似然函数,为方便计算,所以,我们取对数

可知,当权向量 w使l(w)最大的时候,w最合理。

梯度上升法求参数

梯度上升法的基本思想是:要找到某函数的最大值,最好的方法就是沿着该函数的梯度方向搜寻。如果函数为f,梯度记为D,a为步长,那么梯度上升法的迭代公式为:w:w+a*Dwf(w)。该公式停止的条件是迭代次数达到某个指定值或者算法达到某个允许的误差范围。首先对对数的函数的梯度进行计算:

通过矩阵乘法直接表示成梯度:

设步长为α, 则迭代得到的新的权重参数为:

这样我们通过梯度上升法做极大似然估计来做Logistic回归的过程就很清楚了,剩下的我们就需要通过代码来实现Logistic回归吧。

代码实现

数据集:学生的gre,gpa和rank信息作为变量,预测是否admit,若admit=1代表录取,admit=0代表不录取。可通过该网址下载:https://stats.idre.ucla.edu/stat/data/binary.csv

拟变量(哑变量)

虚拟变量,也叫哑变量,可用来表示分类变量、非数量因素可能产生的影响。在计量经济学模型,需要经常考虑属性因素的影响。例如,职业、文化程度、季节等属性因素往往很难直接度量它们的大小。只能给出它们的“Yes—D=1”或”No—D=0”,或者它们的程度或等级。为了反映属性因素和提高模型的精度,必须将属性因素“量化”。通过构造0-1型的人工变量来量化属性因素。提供了一系列分类变量的控制。我们可以用来将”prestige”一列虚拟化。

构建需要进行逻辑回归的数据框:

根据上述的数据框执行逻辑回归:

根据拟合出来的模型,可以进行预测:

由上,可知模型预测的准确率为68.25%,但往往我们会改进梯度上升方法已提高预测准确率,比如,改为随机梯度上升法。随机梯度上升法的思想是,每次只使用一个数据样本点来更新回归系数。这样就大大减小计算开销。

同时,还可以改进随机梯度上升法,如下:

结语

由上,大家一定对logistic回归有了一定的了解,如果你不愿意自己定义函数调整参数,你也可以调用已有的包来进行logistic回归分类,比如sklearn库中的LogisticRegression,以及statsmodels库中的Logit。

logistic回归用以二分类是非常好的工具,但SVM和随机森林的效果其实更佳,之后的文章中,我们将会对SVM和随机森林进行学习。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180711G10DEZ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券