逻辑回归算法背后的数学

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

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

小结

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

逻辑回归算法c语言_逻辑回归算法背后的数学相关推荐

  1. python回归算法预测数据_数据回归分类预测的基本算法及python实现

    数据回归分类预测的基本算法及python实现 关于数据的回归和分类以及分析预测.讨论分析几种比较基础的算法,也可以算作是比较简单的机器学习算法. 一.KNN算法 邻近算法,可以用来做回归分析也可以用来 ...

  2. 数据结构与算法python描述_数据结构与算法——Python语言描述.pdf

    数据结构与算法--Python语言描述.pdf 欢迎加入非盈利Python编学习交流程QQ群783462347,群里免费提供500+本Python书籍! 欢迎加入非盈利Python编程学习交流程QQ群 ...

  3. 判断一棵树是否为完全二叉树的算法c语言_别再翻了,面试二叉树看这 11 个就够了!||CSDN博客精选...

    作者:一只不甘平凡的小鹿 数据结构与算法: 不知道你有没有这种困惑,虽然刷了很多算法题,当去面试的时候,面试官让你手写一个算法,可能你对此算法很熟悉,知道实现思路,但是总是不知道该在什么地方写,而且很 ...

  4. 最近最久未使用页面置换算法C语言,LRU页面置换算法模拟-最近最久未使用置换算法...

    LRU页面置换算法模拟-最近最久未使用置换算法 LRU页面置换算法模拟-最近最久未使用置换算法|课程设计|计算机数据库课程设计 一.设计目的 1.用C语言实现最近最久未使用(LRU)置换算法. 2.了 ...

  5. 妙趣横生的算法(c语言实现),妙趣横生的算法(C++语言实现) 带目录完整pdf[4MB]

    <妙趣横生的算法(C++语言实现)>内容丰富,生动有趣,寓教于乐,旨在帮助读者学习数据结构和算法的相关知识,从而开阔眼界,培养编程兴趣,提高编程能力,增强求职的竞争力.如果您想提高自己对算 ...

  6. c语言程序设计 算法,C语言程序设计第二章算法

    <C语言程序设计第二章算法>由会员分享,可在线阅读,更多相关<C语言程序设计第二章算法(38页珍藏版)>请在人人文库网上搜索. 1.C程序设计,主讲人:袁丽,燕大里仁基础教学部 ...

  7. a*算法matlab代码_导向滤波算法及其matlab代码实现

    导向滤波同样是一种平滑滤波算法,其与最小二乘滤波和双边滤波相比,同样是一种具有边缘保持的功能的图形滤波算法,可以用于处理图形噪点较多的图像,而且此种滤波算法与最小二乘滤波和双边滤波相比,有其独特的特点 ...

  8. 自动补足算法是什么_数据、算法岗的几点经验分享!

    learners |  作者Datawhale |  来源目录 有哪些好的秋招经验分享? 机器学习中常用的最优化方法有哪些? 想通过数据竞赛来提升实践能力,作为小白有什么入门经验?(今日问题) 有哪些 ...

  9. prim算法适用条件_内部排序算法的比较及应用

    "内部排序包括        插入排序(直接插入排序.折半插入排序.希尔排序),        交换排序(冒泡排序.快速排序),        选择排序(简单选择排序.堆排序),       ...

最新文章

  1. html相邻兄弟选择器,CSS CSS 相邻兄弟选择器 - 闪电教程JSRUN
  2. 门户网站负载均衡技术的六大新挑战
  3. AndroidSDK下载以及配置
  4. Pytorch Fashion_MNIST直接离线加载二进制文件到pytorch
  5. OpenCV kmeans代码
  6. Android Room 升级数据库-增加字段
  7. 编译SAM BA报错
  8. Linux系统设置DNS服务器地址
  9. 齐齐哈尔计算机应用软件学校,齐齐哈尔职业学院计算机应用技术专业介绍
  10. 如何获取filecoin_分析:如何捕获Filecoin的价值?
  11. android studio字体加粗属性,android textview字体加粗 Android studio最新水平居中和垂直居中...
  12. ant app 心电监测_电话传输心电图监测在心血管疾病及远程医疗中的应用
  13. 从《天行九歌》到海盗问题
  14. 飞利浦、TCL、海信、REASONANCE、七彩虹、Amazfit在CES展示最新新品 | 美通企业日报...
  15. 从苏宁电器到卡巴斯基第20篇:曲折考研路(补)
  16. 分享UCI两个可用于预测的数据集Diabetes和Heart Disease
  17. python 解析 xml字符串
  18. navicat for mysql执行sql语句报错: [Err] 1146 - Table ‘performance_schema.session_status‘doesn‘t exist 解决办法
  19. 触摸屏(TP)乱跳原因总结
  20. Android lua编辑工具,mlua app下载

热门文章

  1. 02-NLP-01-jieba中文处理
  2. 介绍27款经典的CSS框架
  3. WPF 自定义列表筛选 自定义TreeView模板 自定义ListBox模板
  4. 微信账号,欢迎一起探讨信息、知识、学习和管理!
  5. 去掉windows console application的dos显示
  6. PHP学习资源收集~
  7. apache的日志级别和设置
  8. docker 安装iproute包 包含 ss ip 命令
  9. wordpress 5.0.0 远程代码执行漏洞分析cve-2019-8943
  10. linux centos7 设置 grub2