看完Andrew Ng老师的机器学习公开课后,对于逻辑回归部分,打算写篇学习笔记记录总结一下,也和大家共同分享。

1

基本思能

逻辑回归(Logistic Regression)和线性回归(Linear Regression)的模型和原理是相似的(哈哈,给我的感觉就像是街霸游戏里的Ryu和Ken),按照我的理解,算法大致可以分为以下步骤:

(1)构造一个合适的预测函数,假设记为h函数。该函数就是我们需要找的分类函数,它用来预测输入数据的判断结果。这个过程非常关键,需要对数据有一定的了解或分析,知道或者猜测预测函数的“大概”形式(走势),比如是线性函数还是非线性函数。(例如y=x,y=x2,y=x3…… 等形式的函数)

(2)构造一个损失函数(loss function)并合成一个代价函数(cost function)。损失函数是表示每一个样本上,预测的输出h与训练数据类别(即真实值)y之间的偏差,可以是二者之间的差(h-y),也可以是(h-y)2(貌似这种常用一点,避免了可能出现负数的情况)或者是其他的形式。综合考虑所有训练数据的“损失”,将其求和或者求平均,就变成了代价函数,记为J(θ)函数(这里的参数θ是指预测函数里面的系数)

(3)寻找代价函数最小值并确定参数。显然,我们希望J(θ)函数的值越小越好,因为这表示我们预测的和实际值越小了,预测函数的表现效果就越好,所以这一步需要做的是找到J(θ)函数的最小值。找函数的最小值有不同的方法,这里要提到的是梯度下降法(Gradient Descent),当然也有其他优秀的算法。

2

推导过程

1

 构造预测函数

逻辑回归是一种分类方法,用于两分类问题(即输出只有两种,表示为0和1)。根据上面步骤,需要先找到一个预测函数hθ(x),在这里,我们假设是线性边界的情况,表示形式为:

因为逻辑回归的输出必须是两个值,所以要利用Logistic函数(或称为Sigmoid函数),把输出控制在0到1之间,函数形式为:

它的函数图像为:

结合这两个函数,我们可以得到:

好了,到了这里我们已经定义了一个预测函数,应当注意,hθ(x)的输出值的含义是:它表示结果取1的概率。

2

构造损失函数和代价函数

按照直观思想,或是参照线性回归的代价函数,我们可以写出以下的代价函数:

这个代价函数在线性回归里表现的很好,但是用于逻辑回归的话,会变成参数θ的非凸函数。也就是说,假如我们把用在线性回归那一套用在逻辑回归上的话,那么可能会出现下面的情况:

即函数会出现多个局部最优解,这样的函数就是非凸函数。显然,如果我们使用梯度下降法求解的话,往往不能保证它能收敛到全局最小值(因为算法终止条件是导数为0或接近0)。相应地,我们希望代价函数可以是一个凸函数,图像是这样的:

这样一来,我们一旦使用梯度下降法的时候就可以保证能收敛到全局最优解了。之所以会出现非凸函数的问题,是因为在逻辑回归里引入了Sigmoid函数,但它作用在上面的那个J(θ)后,就会出现多个局部最小值的情况。

为了解决这个问题,在极大似然法的基础上,人们提出了运用在逻辑回归的损失函数是:

整合成一个式子就是:

所以最后代价函数的形式是:

为了帮助理解这个cost函数,我们使用Python的matplotlib画一下两种情况的相关图像。

y=1时:

y=0时:

由此我们可以看出,无论是y=0还是y=1的情况,当我们的预测值越接近真实值时,误差会越来越小,当离真实值越远时,误差便越来越大,趋于无穷。结合图像一起看,应该不难理解这个函数了。

3

 求解代价函数最小值和参数

在这里,我们用到的是梯度下降法。我们这里只讨论系数是一维的情况,主要是考虑到比较容易理解,也容易用图像表达出来。其实,假如系数是多维的话,核心的思想也是一样的,说白了就是求得导数(多维时就是偏导数)为0(或者设置一个阈值接近0)即可。

接下来就来具体讨论一下。

首先看一下梯度下降法的模式,它的本尊长这样:

其中θ是我们要求解的系数,α是学习步长。接下来看一下为什么可以用这一条公式来求解最小值(假设此时代价函数已经是凸函数)。

上面说过,我们只讨论最简单的一种情况,即一维系数。我们分两种情况来看一下。

第一种情况,假设我们的θ初始值大于最优解,那么我们可以得到这样的图像:

这张图像很好地解释了这个公式的可行性:如果此时的θ在最优解的右边,我们对其进行求导,显然此刻导数为正,那么根据上面的公式,就会减小θ,使其向最优解的方向靠拢。

第二种情况,θ初始值小于最优解,那么我们可以得到这样的图像:

此时的θ在最优解的左边,我们对其进行求导,显然此刻导数为负,那么根据公式,就会增大θ,使其向最优解的方向靠拢。

当然,严格来讲还有第三种,就是我们初始化参数的时候,可以刚刚好满足了我们的要求,然而这个通常不大可能,运气得多好啊,哈哈。。。

所以,这就是梯度下降法的核心思想(看到这里有没有感觉其实也不是很难),我们接下来把它运用到逻辑回归的代价函数里,可以得到这样一个式子:

这就是逻辑回归中梯度下降更新系数θ的公式了。

写到这里已经快接近尾声了,在梯度下降法中,还要一点点小问题,就是关于步长α的取值,需要注意的是,当α过大时,可能会不小心就错过了最优解,因为步子迈得大了;α过小时,算法在收敛上会变慢,因为每次只前进那么一点点。所以这个貌似要看经验,并且一般都会试一下好几个不同的步长α来检验算法,避免偶然性。

对于梯度下降而言,因为每次要涉及计算到全部的样本,一旦你的样本数多,拟合的参数多,并且步长设置的也小了一点,那么算法会计算很久。于是现在也有其他的算法用于计算类似的问题,各位小伙伴有兴趣也可以了解一下。

3

小结

这一篇介绍了逻辑回归背后的数学原理,篇幅比较长,可能读起来会比较久,因为大多是公式和原理,所以需要慢慢看,仔细理解。当然,里面还是省略了一些更为仔细的推导部分,主要是导数(偏导数)推导方面的,但基本不会影响到理解这个算法的数学原理。另外,可能有些地方写得还不够透彻,或者写得还不够好,又或者是有出现错误的地方,请大家能多多包涵,多多指教,共同学习,共同进步!

逻辑回归算法背后的数学相关推荐

  1. 逻辑回归算法c语言_逻辑回归算法背后的数学

    逻辑回归算法背后的数学 看完深蓝学院的机器学习公开课后,对于逻辑回归部分,打算写篇学习笔记记录总结一下,也和大家共同分享. 1 基本思能 逻辑回归(Logistic Regression)和线性回归( ...

  2. 机器学习笔记(10)——逻辑回归算法优化之随机梯度下降法

    在上一篇文章<机器学习笔记(9)--深入理解逻辑回归算法及其Python实现>中,详细学习了逻辑回归算法的分类原理和使用梯度下降法来最小化损失函数的数学推导过程,从而拟合出分类函数的参数θ ...

  3. python实现逻辑回归算法_逻辑回归算法的实现

    前言 在之前的学习中,我们已经学习了逻辑回归算法的具体数学原理及其简单的推导过程,现在,我们可以用python实现逻辑回归的算法了. 环境 python3.6 jupyter-notebook 绘制数 ...

  4. 机器学习笔记(七)——逻辑回归算法

    逻辑回归(Logistic Regression,LR).在Kaggle竞赛的统计中,LR算法以63.5%的出产率,荣获各领域中"出场率最高的算法"这一殊荣.在实际场景中,逻辑回归 ...

  5. 线性回归和逻辑回归的区别_Spark实现线性回归与逻辑回归算法

    一.线性回归算法简介 线性回归(Linear Regression)是利用线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析.这种函数是一个或多个称为回归系数的模型参数 ...

  6. 基于机器学习逻辑回归算法完成癌症病人的肿瘤是否良性的判断

    https://www.toutiao.com/a6630407688360575502/ 2018-12-04 22:46:48 逻辑回归算法 虽然逻辑回归算法的名字中有回归二字,但是它却不是回归算 ...

  7. 机器学习——逻辑回归算法

    文章目录 逻辑回归算法 逻辑回归概念 Sigmoid函数 逻辑回归模型 代价函数 最终运用梯度下降求解 实验 总结 逻辑回归算法 首先明确一个概念,逻辑回归并不是解决回归问题,而是解决分类问题,它是通 ...

  8. ML之LoR:基于LoR(逻辑回归)算法对乳腺癌肿瘤(9+1)进行二分类预测(良/恶性)

    ML之LoR:基于LoR(逻辑回归)算法对乳腺癌肿瘤(9+1)进行二分类预测(良/恶性) 目录 输出结果 设计思路 数据集 核心代码 输出结果 Testing accuracy (10 trainin ...

  9. 分析决策树算法和逻辑回归算法的不同之处

    首先我们导入一组airplan.xlsx数据. 数据表中的age表示年龄.FLIGHT_COUNT表示飞行次数.BASE_POINTS_SUM表示飞行里程.runoff_flag表示流失与否,定义1为 ...

最新文章

  1. jquery中的each各种神奇遍历用法
  2. 【思维导图总结——数据库系统概论】绪论
  3. 自学python需要买书吗-学习Python的正确姿势—基础教学,教科书该怎么买?
  4. 订餐系统之Excel批量导入
  5. 推荐算法---FM,协同过滤
  6. python可以构建sem模型_python-分组的熊猫DataFrames:如何将scipy.stats.sem应用于它们?...
  7. 数据结构与算法:动态数组(利用万能指针实现任意类型数组操作)
  8. c模拟内存分配算法(首次适应算法,最佳适应算法,最坏适应算法)
  9. node.js创建server
  10. Mac 外接显示器色彩不正常解决方案
  11. 蓝桥杯摔手机测试次数
  12. CDH 6.3.2部署flink 1.14.3出现/opt/cloudera/parcels/FLINK/lib/flink/bin/flink-yarn.sh:17: rotateLogFilesW
  13. html显示latex公式,wordpress显示数学公式插件【LaTeX转HTML】
  14. 快速上手Luminati的三个使用方法
  15. Windows Phone开发中,减小(改变)Pivot控件PivotItem的Header(标题)字号
  16. 《统计学》笔记:第11章 一元线性回归
  17. logistic回归
  18. 那一阙词,早已波澜-仓央嘉措
  19. Redis | 安装Redis和启动Redis服务
  20. 甲方项目管理培训课程大纲

热门文章

  1. .NET Core on K8S 学习与实践系列文章索引 (更新至20191126)
  2. 站点部署,IIS配置优化指南
  3. .NET Core 3.0:System.Data的变化
  4. 微软正式发布Azure IoT Central
  5. 使用EntityFrameworkCore实现Repository, UnitOfWork,支持MySQL分库分表
  6. .NET Core全新路线图
  7. 单元测试01:nunit 安装与代码测试
  8. php里面sql是什么意思,MySQL和SQL是什么?MySQL和SQL之间的区别有哪些
  9. 5gnr帧结构特点有哪些_PLC控制柜有哪些结构特点呢?
  10. CSDN,CNBLOGS博客文章一键转载插件 终于更新了!