逻辑回归算法

简介: 逻辑回归是一个分类算法,它可以处理二元分类以及多元分类。虽然它名字里面有“回归”两个字,却不是一个回归算法。那为什么有“回归”这个误导性的词呢?个人认为,虽然逻辑回归是分类模型,但是它的原理里面却残留着回归模型的影子,本文对逻辑回归原理做一个总结。

逻辑回归是一个分类算法,它可以处理二元分类以及多元分类。虽然它名字里面有“回归”两个字,却不是一个回归算法。那为什么有“回归”这个误导性的词呢?个人认为,虽然逻辑回归是分类模型,但是它的原理里面却残留着回归模型的影子,本文对逻辑回归原理做一个总结。
1. 从线性回归到逻辑回归
我们知道,线性回归的模型是求出输出特征向量Y和输入样本矩阵X之间的线性关系系数θ,满足$Y=Xθ$。此时我们的Y是连续的,所以是回归模型。如果我们想要Y是离散的话,怎么办呢?一个可以想到的办法是,我们对于这个Y再做一次函数转换,变为g(Y)。如果我们令g(Y)的值在某个实数区间的时候是类别A,在另一个实数区间的时候是类别B,以此类推,就得到了一个分类模型。如果结果的类别只有两种,那么就是一个二元分类模型了。逻辑回归的出发点就是从这来的。下面我们开始引入二元逻辑回归。
2. 二元逻辑回归的模型
上一节我们提到对线性回归的结果做一个在函数g上的转换,可以变化为逻辑回归。这个函数g在逻辑回归中我们一般取为sigmoid函数,形式如下:

$$ g(z) = \frac{1}{1+e^{-z}} $$

它有一个非常好的性质,即当z趋于正无穷时,$g(z)$趋于1,而当z趋于负无穷时,$g(z)$趋于0,这非常适合于我们的分类概率模型。另外,它还有一个很好的导数性质:

$$ g^{'}(z) = g(z)(1-g(z)) $$

这个通过函数对$g(z)$求导很容易得到,后面我们会用到这个式子。
如果我们令$g(z)$中的z为:$z=xθ$,这样就得到了二元逻辑回归模型的一般形式:

$$ h_{\theta}(x) = \frac{1}{1+e^{-x\theta}} $$

其中x为样本输入,$h_θ(x)$为模型输出,可以理解为某一分类的概率大小。而$θ$为分类模型的要求出的模型参数。对于模型输出$h_θ(x)$,我们让它和我们的二元样本输出y(假设为0和1)有这样的对应关系,如果$h_θ(x)>0.5$ ,即$xθ>0$, 则y为1。如果$h_θ(x)<0.5$,即$xθ<0$, 则y为0。y=0.5是临界情况,此时$xθ=0$为, 从逻辑回归模型本身无法确定分类。
$hθ(x)$的值越小,而分类为0的的概率越高,反之,值越大的话分类为1的的概率越高。如果靠近临界点,则分类准确率会下降。
此处我们也可以将模型写成矩阵模式:

$$ h_{\theta}(X) = \frac{1}{1+e^{-X\theta}} $$

其中$hθ(X)$为模型输出,为 mx1的维度。X为样本特征矩阵,为mxn的维度。θ为分类的模型系数,为nx1的向量。
理解了二元分类回归的模型,接着我们就要看模型的损失函数了,我们的目标是极小化损失函数来得到对应的模型系数θ。
3. 二元逻辑回归的损失函数
回顾下线性回归的损失函数,由于线性回归是连续的,所以可以使用模型误差的的平方和来定义损失函数。但是逻辑回归不是连续的,自然线性回归损失函数定义的经验就用不上了。不过我们可以用最大似然法来推导出我们的损失函数。
我们知道,按照第二节二元逻辑回归的定义,假设我们的样本输出是0或者1两类。那么我们有:

$$ P(y=1|x,\theta ) = h_{\theta}(x) $$

$$ P(y=0|x,\theta ) = 1- h_{\theta}(x) $$

把这两个式子写成一个式子,就是:

$$ P(y|x,\theta ) = h_{\theta}(x)^y(1-h_{\theta}(x))^{1-y} $$

其中y的取值只能是0或者1。
用矩阵法表示,即为:

$$ P(Y|X,\theta ) = h_{\theta}(X)^Y(E-h_{\theta}(X))^{1-Y} $$

,其中E为单位向量。
得到了y的概率分布函数表达式,我们就可以用似然函数最大化来求解我们需要的模型系数$θ$。
为了方便求解,这里我们用对数似然函数最大化,对数似然函数取反即为我们的损失函数$J(θ)$。其中:
似然函数的代数表达式为:

$$ L(\theta) = \prod\limits_{i=1}^{m}(h_{\theta}(x^{(i)}))^{y^{(i)}}(1-h_{\theta}(x^{(i)}))^{1-y^{(i)}} $$

其中m为样本的个数。
对似然函数对数化取反的表达式,即损失函数表达式为:

$$ J(\theta) = -lnL(\theta) = -\sum\limits_{i=1}^{m}(y^{(i)}log(h_{\theta}(x^{(i)}))+ (1-y^{(i)})log(1-h_{\theta}(x^{(i)}))) $$

损失函数用矩阵法表达更加简洁:

$$ J(\theta) = -Y\bullet logh_{\theta}(X) - (E-Y)\bullet log(E-h_{\theta}(X)) $$

其中E为单位向量,$∙$为内积。
4. 二元逻辑回归的损失函数的优化方法
对于二元逻辑回归的损失函数极小化,有比较多的方法,最常见的有梯度下降法,坐标轴下降法,等牛顿法等。这里推导出梯度下降法中θ每次迭代的公式。由于代数法推导比较的繁琐,我习惯于用矩阵法来做损失函数的优化过程,这里给出矩阵法推导二元逻辑回归梯度的过程。
对于$J(\theta) = -Y\bullet logh_{\theta}(X) - (E-Y)\bullet log(E-h_{\theta}(X))$,我们用$J(θ)$对θ向量求导可得:

$$ \frac{\partial}{\partial\theta}J(\theta) = -Y \bullet X^T\frac{1}{h_{\theta}(X)}h_{\theta}(X)(1-h_{\theta}(X)) + (E-Y)\bullet X^T\frac{1}{1-h_{\theta}(X)}h_{\theta}(X)(1-h_{\theta}(X)) $$

这一步我们用到了矩阵求导的链式法则,和下面三个矩阵求导公式:

$$ \frac{\partial}{\partial X}logX = 1/X $$

$$ \frac{\partial}{\partial z}g(z) = g(z)(1-g(z)) (g(z)为sigmoid函数) $$

$$ \frac{\partial}{\partial\theta}X\theta = X^T $$

对于刚才的求导公式我们进行化简可得:

$$ \frac{\partial}{\partial\theta}J(\theta) = X^T(h_{\theta}(X) - Y ) $$

从而在梯度下降法中每一步向量θθ的迭代公式如下:

$$ \theta = \theta - \alpha X^T(h_{\theta}(X) - Y ) $$

其中,$α$为梯度下降法的步长。
实践中,我们一般不用操心优化方法,大部分机器学习库都内置了各种逻辑回归的优化方法,不过了解至少一种优化方法还是有必要的。
5. 二元逻辑回归的正则化
逻辑回归也会面临过拟合问题,所以我们也要考虑正则化。常见的有L1正则化和L2正则化。
逻辑回归的L1正则化的损失函数表达式如下,相比普通的逻辑回归损失函数,增加了L1的范数做作为惩罚,超参数$α$作为惩罚系数,调节惩罚项的大小。
二元逻辑回归的L1正则化损失函数表达式如下:

$$ J(\theta) = -Y\bullet logh_{\theta}(X) - (E-Y)\bullet log(1-h_{\theta}(X)) + \alpha||\theta||_1 $$

其中$||θ||1$为$θ$的L1范数。
逻辑回归的L1正则化损失函数的优化方法常用的有坐标轴下降法和最小角回归法。
二元逻辑回归的L2正则化损失函数表达式如下:

$$ J(\theta) = -Y\bullet logh_{\theta}(X) - (E-Y)\bullet log(1-h_{\theta}(X)) + \frac{1}{2}\alpha||\theta||_2^2 $$

其中$||θ||2$为$θ$的L2范数。
逻辑回归的L2正则化损失函数的优化方法和普通的逻辑回归类似。
6.多元回归(softmax回归)算法推导
回想一下在 logistic 回归中,我们的训练集由 m 个已标记的样本构成:$\{ (x^{(1)}, y^{(1)}), \ldots, (x^{(m)}, y^{(m)}) \} $,其中输入特征$x^{(i)} \in \Re^{n+1}$。(我们对符号的约定如下:特征向量 textstyle x 的维度为 $\textstyle n+1$,其中 $\textstyle x_0 = 1 $对应截距项 。) 由于 logistic 回归是针对二分类问题的,因此类标记$ y^{(i)} \in \{0,1\}$。假设函数(hypothesis function) 如下:

image


我们将训练模型参数$ \textstyle \theta$,使其能够最小化代价函数 :

image


在 softmax回归中,我们解决的是多分类问题(相对于 logistic 回归解决的二分类问题),类标$ \textstyle y $可以取$ \textstyle k$ 个不同的值(而不是 2 个)。因此,对于训练集$ \{ (x^{(1)}, y^{(1)}), \ldots, (x^{(m)}, y^{(m)}) \}$,我们有 $y^{(i)} \in \{1, 2, \ldots, k\}$。(注意此处的类别下标从 1 开始,而不是 0)。例如,在 MNIST 数字识别任务中,我们有$ \textstyle k=10 $个不同的类别。
对于给定的测试输入$ \textstyle x$,我们想用假设函数针对每一个类别j估算出概率值$ \textstyle p(y=j | x)$。也就是说,我们想估计 $\textstyle x $的每一种分类结果出现的概率。因此,我们的假设函数将要输出一个 $\textstyle k $维的向量(向量元素的和为1)来表示这 $\textstyle k $个估计的概率值。 具体地说,我们的假设函数 $\textstyle h_{\theta}(x) $形式如下:

image


其中$ \theta_1, \theta_2, \ldots, \theta_k \in \Re^{n+1}$ 是模型的参数。请注意$ \frac{1}{ \sum_{j=1}^{k}{e^{ \theta_j^T x^{(i)} }} } $这一项对概率分布进行归一化,使得所有概率之和为 1 。
为了方便起见,我们同样使用符号$ \textstyle \theta $来表示全部的模型参数。在实现Softmax回归时,将$ \textstyle \theta $用一个 $\textstyle k \times(n+1) $的矩阵来表示会很方便,该矩阵是将 $\theta_1, \theta_2, \ldots, \theta_k $按行罗列起来得到的,如下所示:

image


7.softmax回归的代价函数
现在我们来介绍 softmax 回归算法的代价函数。在下面的公式中,$\textstyle 1\{\cdot\}$ 是示性函数,其取值规则为:$ textstyle 1{ 值为真的表达式 textstyle }=1$,
$ textstyle 1{ 值为假的表达式 textstyle }=0$。举例来说,表达式$ \textstyle 1\{2+2=4\}$ 的值为1 ,$\textstyle 1\{1+1=5\}$的值为 0。我们的代价函数为:

image


值得注意的是,上述公式是logistic回归代价函数的推广。logistic回归代价函数可以改为:

image


可以看到,Softmax代价函数与logistic 代价函数在形式上非常类似,只是在Softmax损失函数中对类标记的 $\textstyle k $个可能值进行了累加。注意在Softmax回归中将 $\textstyle x $分类为类别$ \textstyle j $的概率为:

image


对于$ \textstyle J(\theta) $的最小化问题,目前还没有闭式解法。因此,我们使用迭代的优化算法(例如梯度下降法,或 L-BFGS)。经过求导,我们得到梯度公式如下:

image


让我们来回顾一下符号$ "\textstyle \nabla_{\theta_j}"$ 的含义。$\textstyle \nabla_{\theta_j} J(\theta) $本身是一个向量,它的第 $\textstyle l $个元素$ \textstyle \frac{\partial J(\theta)}{\partial \theta_{jl}}$ 是$ textstyle J(theta)对textstyle theta_j $的第 $\textstyle l$ 个分量的偏导数。
有了上面的偏导数公式以后,我们就可以将它代入到梯度下降法等算法中,来最小化 $\textstyle J(\theta)$。 例如,在梯度下降法的标准实现中,每一次迭代需要进行如下更新:

$$ \textstyle \theta_j := \theta_j - \alpha \nabla_{\theta_j} J(\theta)(\textstyle j=1,\ldots,k) $$

摘自:https://www.cnblogs.com/pinard/p/6029432.html
http://ufldl.stanford.edu/wiki/index.php/Softmax%E5%9B%9E%E5%BD%92

目录
相关文章
|
4月前
|
机器学习/深度学习 算法 数据挖掘
逻辑回归算法
逻辑回归(Logistic Regression)是一种广义的线性回归分析模型,常用于数据挖掘、疾病自动诊断、经济预测等领域。它根据给定的自变量数据集来估计事件的发生概率。变量的范围在0和1之间,通常用于二分类问题,最终输出的预测是一个非线性的S型函数,称为logistic function, g()。 逻辑递归(Recursive Logic)是一种在逻辑学中使用的推理方法,它基于递归定义和递归推理规则,用于描述和推导关于递归结构的命题。用于研究自指的悖论和不完全性定理。它是基于自我引用和递归定义的思想,将逻辑和计算理论相结合,形成了一种强有力的推理工具。
|
5月前
|
机器学习/深度学习 算法
20 机器学习 - Lineage逻辑回归算法分类案例
20 机器学习 - Lineage逻辑回归算法分类案例
32 0
|
6月前
|
机器学习/深度学习 算法 Python
逻辑回归模型及算法实例
欢迎关注我的微信公众号:Python学习杂记
|
6天前
|
机器学习/深度学习 算法 C++
R语言贝叶斯MCMC:GLM逻辑回归、Rstan线性回归、Metropolis Hastings与Gibbs采样算法实例
R语言贝叶斯MCMC:GLM逻辑回归、Rstan线性回归、Metropolis Hastings与Gibbs采样算法实例
29 0
|
7天前
|
机器学习/深度学习 算法
R语言使用Metropolis- Hasting抽样算法进行逻辑回归
R语言使用Metropolis- Hasting抽样算法进行逻辑回归
|
1月前
|
机器学习/深度学习 数据采集 算法
Python基础算法解析:逻辑回归
Python基础算法解析:逻辑回归【2月更文挑战第20天】
31 1
Python基础算法解析:逻辑回归
|
1月前
|
机器学习/深度学习 数据采集 算法
逻辑回归算法预测:哪些因素导致肥胖率上升?
逻辑回归算法预测:哪些因素导致肥胖率上升?
39 0
|
3月前
|
机器学习/深度学习 算法 数据挖掘
逻辑回归算法是什么?
逻辑回归(Logistic Regression)是一种广义的线性回归分析模型,常用于数据挖掘、疾病自动诊断、经济预测等领域。它根据给定的自变量数据集来估计事件的发生概率。变量的范围在0和1之间,通常用于二分类问题,最终输出的预测是一个非线性的S型函数,称为logistic function, g()。 逻辑递归(Recursive Logic)是一种在逻辑学中使用的推理方法,它基于递归定义和递归推理规则,用于描述和推导关于递归结构的命题。用于研究自指的悖论和不完全性定理。它是基于自我引用和递归定义的思想,将逻辑和计算理论相结合,形成了一种强有力的推理工具。
|
5月前
|
机器学习/深度学习 算法
19 机器学习 - Lineage逻辑回归分类算法
19 机器学习 - Lineage逻辑回归分类算法
44 0
|
7月前
|
机器学习/深度学习 算法
【数学建模】逻辑回归算法(Logistic Resgression)
【数学建模】逻辑回归算法(Logistic Resgression)
59 0

热门文章

最新文章