原创作品出处 原始出处 、作者信息和本声明。否则将追究法律责任。http://sbp810050504.blog.51cto.com/2799422/1608064

Logistic回归与梯度上升算法

在《机器学习实战》一书的第5章中讲到了Logistic用于二分类问题。书中只是给出梯度上升算法代码,但是并没有给出数学推导。故哪怕是简单的几行代码,依然难以理解。

对于Logistic回归模型而言,需要读者具有高等数学、线性代数、概率论和数理统计的基础的数学基础。高等数学部分能理解偏导数即可;线性代数部分能理解矩阵乘法及矩阵转置即可;概率论和数理统计能理解条件概率及极大似然估计即可。

有《高等代数》(浙大)、概率论与数理统计(浙大)、线性代数(同济大学)三本数学足矣。

Logistic回归用于二分类问题,面对具体的二分类问题,比如明天是否会下雨。人们通常是估计,并没有十足的把握。因此用概率来表示再适合不过了。

Logistic本质上是一个基于条件概率的判别模型(DiscriminativeModel)。利用了Sigma函数值域在[0,1]这个特性。

函数图像为:

通过sigma函数计算出最终结果,以0.5为分界线,最终结果大于0.5则属于正类(类别值为1),反之属于负类(类别值为0)。

如果将上面的函数扩展到多维空间,并且加上参数,则函数变成:

其中X是变量,θ是参数,由于是多维,所以写成了向量的形式,也可以看作矩阵。θT表示矩阵θ的转置,即行向量变成列向量。θTX是矩阵乘法。(高数结合线性代数的知识)

如果我们有合适的参数向量θ,以及样本x,那么对样本x分类就可以通过上式计算出一个概率值来,如果概率值大于0.5,我们就说样本是正类,否则样本是负类。

比如,对于“垃圾邮件判别问题”,对于给定的邮件(样本),我们定义非垃圾邮件为正类,垃圾邮件为负类。我们通过计算出的概率值即可判定邮件是否是垃圾邮件。

接下来问题来了,如何得到合适的参数向量θ呢?

由于sigma函数的特性,我们可作出如下的假设:

上式即为在已知样本X和参数θ的情况下,样本X属性正类(y=1)和负类(y=0)的条件概率。

将两个公式合并成一个,如下:

既然概率出来了,那么最大似然估计也该出场了。假定样本与样本之间相互独立,那么整个样本集生成的概率即为所有样本生成概率的乘积:

其中,m为样本的总数,y(i)表示第i个样本的类别,x(i)表示第i个样本,需要注意的是θ是多维向量,x(i)也是多维向量。

(接下来从《概率论与数理统计》转到《高等数学》)

为了简化问题,我们对整个表达式求对数,(将指数问题对数化是处理数学问题常见的方法):

上式是基本的对数变换,高中数学而已,没有复杂的东西。

满足似然函数(θ)的最大的θ值即是我们需要求解的模型。

梯度上升算法

如此复杂的函数,如何求满足函数(θ)最大值的参数向量θ呢?

如果问题简化到一维,就很好办了。假如需要求取函数:

的最大值。

函数图像如下:

函数的导数为:

所以 x=1.5即取得函数的最大值1.25

但是真实环境中的函数不会像上面这么简单,就算求出了函数的导数,也很难精确计算出函数的极值。此时我们就可以用迭代的方法来做。就像爬坡一样,一点一点逼近极值。爬坡这个动作用数学公式表达即为:

其中,α为步长。

求上面函数极值的Python代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
def f_prime(x_old):
         return -2*x_old+3
  
def cal():
         x_old=0
         x_new=6
         eps=0.01
         presision=0.00001
         whileabs(x_new-x_old)>presision:
                   x_old=x_new
                   x_new=x_old+eps*f_prime(x_old)
         return x_new

结果为:1.50048

回到Logistic Regression问题,我们同样对函数求偏导。

这个公式有点复杂,但是依然只是基本的导数变换,待我细细拆解。这里需要的数学知识无外乎两点:函数的和、差、积、商求导法则和复合函数的求导法则(高等数学P88页)。

先看:

其中:

再由:

可得:

接下来就剩下第三部分:

(这个公式应该很容易理解,简单的偏导公式)

还有就是:

综合三部分即得到:

因此,梯度迭代公式为:

结合本式再去理解《机器学习实战》中的代码就很简单了。

参考http://cs229.stanford.edu/notes/cs229-notes1.pdf

文档中的公式是用LaTex弄出来的,比word中好看多了。

如果有什么问题,可加微博 @帅广应s

Me是数学渣啊~

Logistic回归与梯度上升算法的更多相关文章

  1. Logistic回归,梯度上升算法理论详解和实现

    经过对Logistic回归理论的学习,推导出取对数后的似然函数为 现在我们的目的是求一个向量,使得最大.其中 对这个似然函数求偏导后得到 根据梯度上升算法有 进一步得到 我们可以初始化向量为0,或者随 ...

  2. Logistic回归算法梯度公式的推导

    最近学习Logistic回归算法,在网上看了许多博文,笔者觉得这篇文章http://blog.kamidox.com/logistic-regression.html写得最好.但其中有个关键问题没有讲 ...

  3. 2.9 logistic回归中的梯度下降法(非常重要,一定要重点理解)

    怎么样计算偏导数来实现logistic回归的梯度下降法 它的核心关键点是其中的几个重要公式用来实现logistic回归的梯度下降法 接下来开始学习logistic回归的梯度下降法 logistic回归 ...

  4. 机器学习之Logistic 回归算法

    1 Logistic 回归算法的原理 1.1 需要的数学基础 我在看机器学习实战时对其中的代码非常费解,说好的利用偏导数求最值怎么代码中没有体现啊,就一个简单的式子:θ= θ - α Σ [( hθ( ...

  5. Logistic回归(逻辑回归)和softmax回归

    一.Logistic回归 Logistic回归(Logistic Regression,简称LR)是一种常用的处理二类分类问题的模型. 在二类分类问题中,把因变量y可能属于的两个类分别称为负类和正类, ...

  6. 机器学习(1):Logistic回归原理及其实现

    Logistic回归是机器学习中非常经典的一个方法,主要用于解决二分类问题,它是多分类问题softmax的基础,而softmax在深度学习中的网络后端做为常用的分类器,接下来我们将从原理和实现来阐述该 ...

  7. Logistic回归应用-预测马的死亡率

    Logistic回归应用-预测马的死亡率 本文所有代码均来自<机器学习实战>,数据也是 本例中的数据有以下几个特征: 部分指标比较主观.难以很好的定量测量,例如马的疼痛级别 数据集中有30 ...

  8. Logistic 回归(sigmoid函数,手机的评价,梯度上升,批处理梯度,随机梯度,从疝气病症预测病马的死亡率

    (手机的颜色,大小,用户体验来加权统计总体的值)极大似然估计MLE 1.Logistic回归 Logistic regression (逻辑回归),是一种分类方法,用于二分类问题(即输出只有两种).如 ...

  9. 回归——线性回归,Logistic回归,范数,最大似然,梯度,最小二乘……

    写在前面:在本篇博客中,旨在对线性回归从新的角度考虑,然后引入解决线性回归中会用到的最大似然近似(Maximum Likelihood Appropriation-MLA) 求解模型中的参数,以及梯度 ...

随机推荐

  1. NOI2018前的每日记录

    NOI2018前的每日记录 开头 今天是\(2018.7.2\),不知不觉已经这么久了.本来还是高一的小蒟蒻,过不了多久就要成为高二的老年选手了. 再过半个月我也要去\(NOI\)打酱油了.我这种D类 ...

  2. 【BZOJ2806】Cheat(后缀自动机,二分答案,动态规划,单调队列)

    [BZOJ2806]Cheat(后缀自动机,二分答案,动态规划,单调队列) 题面 BZOJ 洛谷 题解 很有趣的一道题啊 对于在所有的串上面进行匹配? 很明显的后缀自动机 所以先构建出广义后缀自动机 ...

  3. Linux内核分析第七周———可执行程序的装载

    Linux内核分析第七周---可执行程序的装载 李雪琦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/US ...

  4. restful风格请求及都是 / 的请求及参数也在请求的/中

    前台请求的样式: http://localhost:8080/item/88909 其中参数就是最后的 商品id号  88909 后台Controller中取出参数的方法: @Controller p ...

  5. PID控制算法的C语言实现一 PID算法原理

    本系列是转载............. 全部的程序有一个共同点:就是我没认真去调pid的参数 在工业应用中PID及其衍生算法是应用最广泛的算法之一,是当之无愧的万能算法,如果能够熟练掌握PID算法的设 ...

  6. bzoj 1510 [POI2006]Kra-The Disks 二分

    1510: [POI2006]Kra-The Disks Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 466  Solved: 272[Submit][ ...

  7. 手脱UPX v0.89.6 - v1.02

    声明: 只为纪录自己的脱壳历程,高手勿喷 这个壳的脱法很多一般都一步直达的,步过我喜欢ESP定律 1.载入OD,在入口下一行ESP定律运行一次 > pushad ; //入口 BE mov es ...

  8. python基础6--目录结构

    为什么要设计好目录结构? "设计项目目录结构",就和"代码编码风格"一样,属于个人风格问题.对于这种风格上的规范,一直都存在两种态度: 一类同学认为,这种个人风 ...

  9. BFC 块级元素格式化上下文

    Block Formatting Contexts: 块级元素格式化上下文块级元素如何对它的内容(子元素:也是一个块元素)进行布局,以及与其它元素(与内容同级别)的关系和相互作用 普通文档流的布局规则 ...

  10. Dijkstra算法:POJ No 3268 Silver Cow Party

    题目:http://poj.org/problem?id=3268 题解:使用 priority_queue队列对dijkstra算法进行优化 #include <iostream> #i ...