逻辑回归公式推导及代码实现

2019-07-19  本文已影响0人  wensong_kevin

写在前面,本人是机器学习初学者,写下这篇博客的主要目的是给那些对公式推导有疑惑的朋友一点点思路。顺便记录自己的点滴进步,相互交流,共同进步。如若有错,恳请各路大牛不吝指出。

一、概述

我们学习一种模型,首先要搞清楚这个模型是什么、能干什么?

概括来讲:逻辑回归模型是假设数据服从伯努利分布,通过极大似然估计的方法,运用梯度下降法来求解最优参数,从而完成将数据二分类的任务的一种模型。概念不是这篇的博客的主要目的,就不再深究,越往后学习领悟也会越来越深。

逻辑回归可以做多分类的任务,但由于自身的性质,大多时候被用来处理二分类的问题。比如说:某人贷款是否会违约、用户是否会点击网页中的某个广告、疾病诊断、垃圾邮件分类、商品推荐以及情感分析等等。

二、模型

很多介绍逻辑回归的书籍或者博客一上来就抛给你这个逻辑回归模型的公式:y=\frac{1}{e^{\omega ^T+b} }

我认真想了下这个公式的由来:首先逻辑回归模型是通过样本的概率值大小来做出相应的判断,那么该如何去定义一个模型使得样本集中任意一个样本的预测值能够映射到[0,1]之间呢?显然是不能直接使用线性回归的模型,原因很简单,线性回归的预测值是在({-\infty} ,{+\infty})区间的。这时候就该sigmoid函数闪亮登场了。

sigmoid函数图像

通过sigmoid函数的图像,我们很清楚地看到该函数单调递增,将({-\infty}{+\infty})之间的任意实数映射到[0,1]之间,能够直观的表示概率,所以就这样我们得到了上文给出的逻辑回归模型的公式。

我们知道一件事情发生的概率(p)与该事件不发生的概率(1-p)的比值(\frac{p}{1-p} )称之为"几率"。很明显,几率能够将[0,+{\infty})之间任意实数映射到[0,1]之间,而几率取对数之后,log(\frac{p}{1-p}) 能够将[{-\infty},{+\infty}]之间的任意实数映射到[0,1]之间。所以可以通过“几率”来考查逻辑回归模型的特性。我们不妨假设P(Y=1|X)=\frac{exp({\omega }{\cdot }x+b)}{1+exp({\omega }{\cdot }x+b)} (Y=0|X)=\frac{1}{1+exp({\omega }{\cdot }x+b)}

那么对于逻辑回归而言就有:log\frac{P(Y=1|X)}{1-P(Y=1|X)} =log\frac{\frac{exp({\omega }{\cdot }x+b)}{1+exp({\omega }{\cdot }x+b)} }{\frac{1}{1+exp({\omega }{\cdot }x+b)} }=\log {exp({\omega }{\cdot }x+b)}={\omega }{\cdot }x+b

三、模型参数估计

逻辑回归的模型已经构建出来了,那么接下来就可以通过给定的训练数据集进行学习。我们应用极大似然估计的方法估计模型参数,从而得到逻辑回归的确切模型。

为什么要用极大似然估计呢?我们首先要明白,极大似然估计是建立在所有样本间相互独立且样本能够代表总体的情况之下,可形象的概括为“模型已定,参数未知”。它的核心思想是:若现有的样本数据可以代表总体,那么极大似然估计就是找到一组参数使得该样本数据出现的可能性最大。从统计学的角度来看就是需要使得所有观测数据(样本)的的联合概率最大化。

不妨假设:P(Y=1|X)={\pi }(x),P(Y=0|X)=1-{\pi }(x)

似然函数为:\prod\nolimits_{i=1}^n [\pi (x_i)]^{y_i}[1-\pi (x_i)]^{1-y_i}

对于凸函数来说,局部最小值点即为全局最小值点,故一般将非凸函数转化为凸函数进行求解,所以我们可以将上述似然函数转换为对偶问题,即求解对数似然函数的最小值。

对数似然函数:L(\omega )=\sum_{i=1}^N{[y_ilog\pi (x_i)+(1-y_i)log(1-\pi (x_i))]}

                                    =\sum_{i=1}^N{[y_ilog\frac{\pi (x_i)}{1-\pi (x_i)} +log(1-\pi (x_i))]}

                                    =\sum_{i=1}^N{[y_i(\omega \cdot x)-log(1+exp(\omega \cdot x))]}

L(w)求偏导,得:\frac{\partial L}{\partial w} =\sum_{i}^N {(y_ix_i-\frac{exp(\omega \cdot x_i)}{1+exp(\omega \cdot x_i)} \cdot x_i)}

梯度下降求解最优参数的公式为:\omega ^{(t+1)}=\omega ^{(t)}-\alpha \cdot \frac{\partial L}{\partial w},其中\alpha 为自定义的步长。

设置特定的阈值或者迭代次数,运用上述的梯度下降公式求解参数的估计值。

至此为止已经推导出了模型以及参数的优化,下面将通过python代码实现逻辑回归模型。  

四、算法实现

逻辑回归模型的原理弄清楚之后,用代码实现起来还是相对容易的。主要的部分有导入样本集、利用梯度下降计算参数\omega 以及可视化展示。

1、导入样本集

需要注意的是,我们为了方便叙述与推导,将偏置b并入权重向量\omega 中,记作\hat{\omega } =( b,\omega ^T)^T,同样也将输入向量加以扩充,加进常数1,记作\hat{x} =(1,x^T)^T。这样一来 \hat{x} \in R^{n+1},\hat{w}\in R^{n+1},显然\hat{w} \cdot \hat{x} =\omega \cdot x+b

2、迭代计算参数\omega

用了随机梯度下降和梯度下降两种方法优化参数,代码很朴实不必多说。

3、可视化展示

其中决策边界就是Z=\hat{w} \cdot \hat{x} 。实现效果如下图所示:

由于样本数据有限,迭代次数有限,效果并不是很理想,但是通过动手实现,对于新手理解逻辑回归的原理来说还是很有帮助的。

五、小结

没有任何一种模型是完美的,那么先说说逻辑回归模型的优点:

1、原理理解起来相对容易,易于实现,很方便地得到输出结果;

2、训练速度快,迭代优化参数时,计算量只跟样本数据的数量有关;

相对优点来说,那缺点也很明显了:

1、处理非线性的样本数据相对麻烦;

2、就因为形式简单,所以准确率不高。

上一篇 下一篇

猜你喜欢

热点阅读