逻辑回归(logistic regression)原理详解
机器学习解决的问题,大体上就是两种:数值预测和分类。前者一般采用的是回归模型,比如最常用的线性回归;后者的方法则五花八门,决策树,kNN,支持向量机,朴素贝叶斯等等模型都是用来解决分类问题的。其实,两种问题从本质上讲是一样的:都是通过对已有数据的学习,构建模型,然后对未知的数据进行预测,若是连续的数值预测就是回归问题,若是离散的类标号预测,就是分类问题。
这里面有一类比较特殊的算法,就是逻辑回归(logistic regression)。它叫“回归”,可见基本思路还是回归的那一套,同时,逻辑回归又是标准的解决分类问题的模型。换句话说,逻辑回归是用与回归类似的思路解决了分类问题。
1. 阶跃函数
现在有nnn个数据元组{X1,X2,…,Xn}" role="presentation">{X1,X2,…,Xn}{X1,X2,…,Xn}\{X_1, X_2, \dots, X_n\},每个数据元组对应了一个类标号yiyiy_i,同时每个数据元组XiXiX_i有mmm个属性{xi1,xi2,…,xim}" role="presentation">{xi1,xi2,…,xim}{xi1,xi2,…,xim}\{x_{i1}, x_{i2}, \dots, x_{im}\}。假设现在面临的是一个简单的二分类问题,类标号有0,1两种。如果用简单的回归方法对已知数据进行曲线拟合的话,我们会得到如下的曲线方程(曲线拟合的方法后面会说到):
\begin{equation} z = f(X) = w_0 + w_1x_1 + w_2x_2 + \dots + w_mx_m \end{equation}
注:并不是说逻辑回归只能解决二分类问题,但是用到多分类时,算法并没有发生变化,只是用的次数更多了而已。
实际上,逻辑回归分类的办法与SVM是一致的,都是在空间中找到曲线,将数据点按相对曲线的位置,分成上下两类。也就是说,对于任意测试元组X∗X∗X^*,f(X∗)f(X∗)f(X^*)可以根据其正负性而得到类标号。那换句话说,直接依靠拟合曲线的函数值是不能得到类标号的,还需要一种理想的“阶跃函数”,将函数值按照正负性分别映射为0,1类标号。这样的阶跃函数ϕ(z)ϕ(z)\phi(z)如下表示:
\begin{equation} \phi(z) = \left\{ \begin{aligned}0, ~~~z 0\end{aligned} \right. \end{equation}
然而,直接这样设计阶跃函数不方便后面的优化计算,因为函数值不连续,无法进行一些相关求导。所以,逻辑回归中,大家选了一个统一的函数,也就是Sigmoid函数,如公式(1)所示:
\begin{equation} \phi(z) = \frac{1}{1 + e^{-z}} \end{equation}\tag{1}
Sigmoid函数的图像如下图所示,当z>0z>0z > 0时,Sigmoid函数大于0.5;当z<0z<0z 时,Sigmoid函数小于0.5。所以,我们可以将拟合曲线的函数值带入Sigmoid函数,观察ϕ(z)ϕ(z)\phi(z)与0.5的大小确定其类标号。
注1:上图摘抄于 逻辑回归(logistic regression)的本质——极大似然估计
Sigmoid函数还有一个好处,那就是因为其取值在0,1之间。所以可以看做是测试元组属于类1的后验概率,即p(y=1|X)p(y=1|X)p(y = 1|X)。其实这一点从图像也可以看出来:zzz的值越大,表明元组的空间位置距离分类面越远,他就越可能属于类1,所以图中z" role="presentation">zzz越大,函数值也就越接近1;同理,zzz越小,表明元组越不可能属于类1.
2. 代价函数
阶跃函数告诉我们,当得到拟合曲线的函数值时,如何计算最终的类标号。但是核心问题仍然是这个曲线如何拟合。既然是回归函数,我们就模仿线性回归,用误差的平方和当做代价函数。代价函数如公式(2)所示:
\begin{equation} J(w) = \sum_{i = 1}^{n} \frac{1}{2} (\phi(z_i) - y_i)^2 \end{equation}\tag{2}
其中,zi=WTXi+w0zi=WTXi+w0z_i = W^TX_i + w_0,yiyiy_i为XiXiX_i真实的类标号。按说此时可以对代价函数求解最小值了,但是如果你将ϕ(z)=11+e−zϕ(z)=11+e−z\phi(z) = \frac{1}{1 + e^{-z}}带入公式(2)的话,那么当前代价函数的图像是一个非凸函数,非凸函数有不止一个极值点,导致不容易做最优化计算。也就是说,公式(2)的这个代价函数不能用。
注2:有关于凸函数的相关知识可以参考我的上一篇博客: 最大化期望算法(EM)详解
那自然要想办法设计新的代价函数。我们在上面说了,ϕ(z)ϕ(z)\phi(z)的取值可以看做是测试元组属于类1的后验概率,所以可以得到下面的结论:
\begin{equation} \begin{aligned} &p(y = 1|X; W) = \phi(z)\\ &p(y = 0|X; W) = 1 - \phi(z) \end{aligned} \end{equation}
更进一步,上式也可以这样表达:
\begin{equation} p(y|X; W) = \phi(z)^y (1 - \phi(z))^{1 - y} \end{equation}\tag{3}
公式(3)表达的含义是在参数WWW下,元组类标号为y" role="presentation">yyy的后验概率。假设现在已经得到了一个抽样样本,那么联合概率∏ni=1p(yi|Xi;W)∏i=1np(yi|Xi;W)\prod_{i = 1}^{n}p(y_i|X_i; W)的大小就可以反映模型的代价:联合概率越大,说明模型的学习结果与真实情况越接近;联合概率越小,说明模型的学习结果与真实情况越背离。而对于这个联合概率,我们可以通过计算参数的最大似然估计的那一套方法来确定使得联合概率最大的参数WWW,此时的W" role="presentation">WWW就是我们要选的最佳参数,它使得联合概率最大(即代价函数最小)。下面看具体的运算步骤。
注3:有关参数的最大似然估计可以参考我之前的博客: 最大化期望算法(EM)详解
3. 逻辑回归的运算步骤
3.1 写出最大似然函数,并进行对数化处理
\begin{equation} \begin{aligned} L(W) &= \sum_{i = 1}^n \ln p(y_i|X_i; W)\\ &= \sum_{i = 1}^n \ln (\phi(z_i)^{y_i} (1 - \phi(z_i))^{1 - y_i})\\ &= \sum_{i = 1}^n y_i \ln \phi(z_i) + (1 - y_i) \ln(1 - \phi(z_i) \end{aligned} \end{equation}\tag{3}
通过上面的分析,显然−L(W)−L(W)-L(W)就是代价函数J(W)J(W)J(W)。为方便后面的推导,我把J(W)J(W)J(W)也写出来:
\begin{equation} J(W) = -\sum_{i = 1}^n y_i \ln \phi(z_i) + (1 - y_i) \ln(1 - \phi(z_i)) \end{equation}\tag{4}
博客 逻辑回归(logistic regression)的本质——极大似然估计 中给出了J(W)J(W)J(W)的图像,我把它抄在下面,方便大家理解代价函数起到的效果:
可以看出,如果类标号为1,那么ϕ(z)ϕ(z)\phi(z)的取值在[0,1][0,1][0, 1]范围内增大时,代价函数减小,说明越接近真实情况,代价就越小;如果类标号为0,也是一样的道理。
3.2 用梯度下降法求代价函数的最小值
如果能求出代价函数的最小值,也就是最大似然函数的最大值。那么得到的权重向量WWW就是逻辑回归的最终解。但是通过上面的图像,你也能发现,J(W)" role="presentation">J(W)J(W)J(W)是一种非线性的S型函数,不能直接利用偏导数为0求解。于是我们采用梯度下降法。
首先,根据梯度的相关理论,我们知道梯度的负方向就是代价函数下降最快的方向。因此,我们应该沿着梯度负方向逐渐调整权重分量wjwjw_j,直到得到最小值,所以每个权重分量的变化应该是这样的:
\begin{equation} \Delta w_j = -\eta \frac{\partial J(W)}{\partial w_j} \end{equation}
其中ηη\eta为学习率,控制步长。而∂J(W)∂wj∂J(W)∂wj\frac{\partial J(W)}{\partial w_j}可以如下计算:
\begin{equation} \begin{aligned} \frac{\partial J(w)}{\partial w_j} &= - \sum_{i = 1}^n (y_i \frac{1}{\phi(z_i)} - (1 - y_i)\frac{1}{1 - \phi(z_i)}) \cdot \frac{\partial \phi(z_i)}{\partial w_j}\\ &= - \sum_{i = 1}^n (y_i(1 - \phi(z_i)) - (1 - y_i) \frac{1}{1 - \phi(z_i)}) \cdot x_{ij}\\ &= - \sum_{i = 1}^n (y_i - \phi(z_i)) \cdot x_{ij} \end{aligned} \end{equation}
上式的推导中用到了Sigmoid函数ϕ(z)ϕ(z)\phi(z)的一个特殊的性质:
\begin{equation} \phi(z)' = \phi(z)(1 - \phi(z)) \end{equation}\tag{4}
这样,我们就得到了梯度下降法更新权重的变量:
\begin{equation} w_j := w_j + \eta \sum_{i = 1}^n (y_i - \phi(z_i)) \cdot x_{ij} \end{equation}
最后,说一下权重向量的初始化问题。一般用接近于0的随机值初始化wjwjw_j,比如在区间[−0.01,0.01][−0.01,0.01][-0.01, 0.01]内均匀选取。这样做的理由是如果wiwiw_i很大,则加权和可能也很大,根据Sigmoid函数的图像(即本文的第一个图像)可知,大的加权和会使得ϕ(zi)ϕ(zi)\phi(z_i)的导数接近0,则变化速率变缓使得权重的更新变缓。
逻辑回归(logistic regression)原理详解相关推荐
- 逻辑回归(Logistic Regression)原理及Python实现
前面有讲过线性回归,但是很多非线性问题不能用简单的线性回归来分类.这时需要用到逻辑回归,逻辑回归是一种非线性的回归.说到逻辑回归一定要说到概率问题,概率(probability)就是对一件事发生的可能 ...
- 逻辑回归(Logistic Regression)原理及损失函数、极大似然估计
一.什么是逻辑回归 虽然名字是"回归",但解决的是"分类"问题. 模型学习的是E[y∣x;θ]E[y|x;\theta]E[y∣x;θ],即给定自变量和超参数后 ...
- 逻辑回归(logistic regression)原理理解+matlab实现
使用梯度下降法迭代: function theta =logisticReg() % 梯度下降法寻找最合适的theta,使得代价函数J最小 options=optimset('GradObj','on ...
- Logistic Regression (LR) 详解
Logistic Regression (LR) 详解 最近忙着准备面试,偶然发现同学Q君在很认真地看LR(Logistics Regression),不由得心生蔑视,这么简单的模型有什么好研究的?结 ...
- Coursera公开课笔记: 斯坦福大学机器学习第六课“逻辑回归(Logistic Regression)”
Coursera公开课笔记: 斯坦福大学机器学习第六课"逻辑回归(Logistic Regression)" 斯坦福大学机器学习第六课"逻辑回归"学习笔记,本次 ...
- 斯坦福大学机器学习第四课“逻辑回归(Logistic Regression)”
斯坦福大学机器学习第四课"逻辑回归(Logistic Regression)" 本次课程主要包括7部分: 1) Classification(分类) 2) Hypothesis R ...
- 逻辑回归(logistic regression)的本质——极大似然估计
文章目录 1 前言 2 什么是逻辑回归 3 逻辑回归的代价函数 4 利用梯度下降法求参数 5 结束语 6 参考文献 1 前言 逻辑回归是分类当中极为常用的手段,因此,掌握其内在原理是非常必要的.我会争 ...
- 逻辑回归(Logistic Regression)简介及C++实现
逻辑回归(Logistic Regression):该模型用于分类而非回归,可以使用logistic sigmoid函数( 可参考:http://blog.csdn.net/fengbingchun/ ...
- OpenCV3.3中逻辑回归(Logistic Regression)使用举例
OpenCV3.3中给出了逻辑回归(logistic regression)的实现,即cv::ml::LogisticRegression类,类的声明在include/opencv2/ml.hpp文件 ...
- OpenCV逻辑回归Logistic Regression的实例(附完整代码)
OpenCV逻辑回归Logistic Regression的实例 OpenCV逻辑回归Logistic Regression的实例 OpenCV逻辑回归Logistic Regression的实例 # ...
最新文章
- mysql with as_mysql数据库学习(第十六篇)- 视图
- PHP截取IE浏览器并缩小原图的方法
- 为什么Netty这么火?与Mina相比有什么优势?
- mysql与jframe_java-如何在JFrame上显示从mysql检索到的图像
- 实力登场!移动云技术内核2.0 四大全新升级!
- 【原创】shadowebdict开发日记:基于linux的简明英汉字典(三)
- 服务器产品的特质和优势,亿速云裸金属服务器兼具“弹性”和“裸金属”两种属性,既有虚拟机的弹性,同时又保留了裸金属的一切性能、特性和优势!...
- linux link path walk,python之os.walk()与os.path.walk()
- autobuddy in mfc导致的错误
- ffmpeg下载安装教程及介绍
- redhat7 安装 docker
- 将 libVLC 视频渲染到 QWidget 中
- java吃水果小游戏中水果,蔬菜等的重画
- JMeter做性能测试之前,你应该要知道的套路?
- 移动终端安全 顶级会议_顶级移动应用开发公司
- 在设备树中时钟的简单使用
- java swing边框_Java Swing边框
- GB 9706.1-2020医疗设备爬电距离和电气间隙计算实例
- 动画:Flex布局 | 别再用传统方式进行网页布局了(上)
- This Week in Spring - January 14th, 2020
热门文章
- 人工智能数学基础训练营5周学习资料
- 痞子衡嵌入式:盘点国内Cortex-M内核MCU厂商高性能产品
- django 类视图装饰器_灵活视图处理的模式,第2部分–使用装饰器
- 现货白银分析离不开SLV持仓分析
- Android Espresso 测试框架探究
- 情人节礼物推荐,送给男朋友的情人节礼物
- 高中时候的三大主科成绩如果提不上来直接影响整体成绩
- 针对场景化痛点,锐捷网络推出极简光 2.X,以太全光网再下一城
- 计算机应用基ata,《计算机应用基》知识宝典.doc
- 世界上最难的视觉图_看看世界上驾照最难考的国家,你还会觉得考驾照难吗?...