前言

在上一篇随笔里,我们讲了Logistic回归cost函数的推导过程。接下来的算法求解使用如下的cost函数形式:

简单回顾一下几个变量的含义:

表1 cost函数解释
x(i) 每个样本数据点在某一个特征上的值,即特征向量x的某个值
y(i) 每个样本数据的所属类别标签
m 样本数据点的个数
hθ(x) 样本数据的概率密度函数,即某个数据属于1类(二分类问题)的概率
J(θ) 代价函数,估计样本属于某类的风险程度,越小代表越有可能属于这类

我们的目标是求出θ,使得这个代价函数J(θ)的值最小,这里就需要用到梯度下降算法。

梯度下降算法

对于一个函数,我们要找它的最小值,有多种算法,这里我们选择比较容易用代码实现和符合机器学习步骤的梯度下降算法。

先来看看梯度下降算法中,自变量的迭代过程。表示如下

  

可以看到,这是一个θ值不断迭代的过程,其中α是学习速率,就是θ的移动“步幅”,后面的偏导数数就是梯度,可以理解为cost函数在θ当前位置,对于j位置特征的下降速度。

  对于二维空间,梯度可以理解为函数图像的切线斜率。即:特征是一维的

  对于多维特征,cost函数的图像就应该是这样的,下面举个例子:

  

                            图1 cost函数举例

  这是一个二维特征的cost函数的图像,这个时候,梯度有无限多个,我们不能只说cost函数的梯度,应该说,cost函数在某个方向上的梯度。例如,cost函数在θ0方向上,在(θ0=m,θ1=n)上的梯度就是cost函数与θ1=n这个平面的交线在(m,n)处的斜率。

  上面的描述比较抽象,简单说来,假设图像就是一个小山坡(有点像吧),你站在图像的(m,n)点处,朝θ0的方向看过去,看到的“山坡”的“坡度”就是上面所说的梯度了。

  这个迭代过程,用形象化的语言描述,就是:

    我站在山坡上,找到一个初始点θj,每次我沿着某一个方向走α这么长的路,由于总是朝着梯度的方向走,我总会走到山坡底(也就是cost函数的极小值)。

  然而,这样的“盆地”可能有多个,我们不同的走法,可能会走到不同的山底,如图:

                           图2 多“山谷”cost函数

  这里的两条路线分别走向不同的山谷,这就说明:梯度下降算法只能求出一个局部最小值,不一定是全局最小值,但这不影响它是一个好的方法。

这样,θ的迭代过程就讲清楚了。接下来说一下迭代的终止条件。

  迭代肯定不是无限下去的,我们不妨想一下:当我们走到了山谷,再想往某个方向走的时候,发现都不能再往下走了,那么我们的旅行就终止了。

  同样,当θ迭代了n次后(就如图2的黑线一样),发现接下来走α这么长的路,下降的高度很小很小(临界值),或者不再下降,甚至反而往上走了,所以我们的迭代终止条件就是cost函数的减少值小于某个值。

  我们再来回顾一下迭代公式(1):其中α是经验设定,称之为learning rate,初始值也是随机选定,那么后面的那个梯度呢?

  梯度就是cost函数对于特征向量某一维的偏导数。我们来看看这个怎么推导和简化。

  【梯度的求解】

  先来写一下大致的推导过程:

  稍微解释一下推导流程,便于理解。

  (1)--->(2):使用sigmoid函数的形式g(z)替换hθ(x)、提出公因子,放在式子尾

  (2)--->(3):这一步具体推导如下(使用了复合函数的求导公式)

  后面的几步较为简单,就不另作说明了。

  【算法运行】

  到了这里,我们推出了迭代公式的最终形式:

  更一般的形式就是把j去掉,表示对特征的每一维都如此迭代

  注意,在迭代过程中,θ的所有特征是同步更新的,所以根据给定的数据集,就能使用梯度下降算法来求解θ了,迭代终止条件即是将当前θ带入cost函数,求出代价值,与上一个代价值相减,结果小于阈值,立即停止迭代。

结语

  公式推导用的也就是偏导数的求解等少量数学公式,关键是体会局部最优的思想

  

  

Logistic回归Cost函数和J(θ)的推导(二)----梯度下降算法求解最小值的更多相关文章

  1. Logistic回归Cost函数和J(θ)的推导----Andrew Ng【machine learning】公开课

    最近翻Peter Harrington的<机器学习实战>,看到Logistic回归那一章有点小的疑问. 作者在简单介绍Logistic回归的原理后,立即给出了梯度上升算法的code:从算法 ...

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

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

  3. Logistic回归计算过程的推导

    https://blog.csdn.net/ligang_csdn/article/details/53838743 https://blog.csdn.net/weixin_30014549/art ...

  4. Logistic回归总结

    原文:http://blog.csdn.net/dongtingzhizi/article/details/15962797  Logistic回归总结 作者:洞庭之子 微博:洞庭之子-Bing (2 ...

  5. <转>Logistic回归总结

    转自http://blog.csdn.net/dongtingzhizi/article/details/15962797 当我第一遍看完台大的机器学习的视频的时候,我以为我理解了逻辑回归,可后来越看 ...

  6. 转载-Logistic回归总结

     Logistic回归总结 作者:洞庭之子 微博:洞庭之子-Bing (2013年11月) 1.引言 看了Stanford的Andrew Ng老师的机器学习公开课中关于Logistic Regress ...

  7. 机器学习公开课笔记(3):Logistic回归

    Logistic 回归 通常是二元分类器(也可以用于多元分类),例如以下的分类问题 Email: spam / not spam Tumor: Malignant / benign 假设 (Hypot ...

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

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

  9. 【机器学习实战】第5章 Logistic回归

    第5章 Logistic回归 Logistic 回归 概述 Logistic 回归虽然名字叫回归,但是它是用来做分类的.其主要思想是: 根据现有数据对分类边界线建立回归公式,以此进行分类. 须知概念 ...

随机推荐

  1. ASP.NET Core Web多语言项目

    公司效益好了,准备和国外做生意,这个时候就需要多语言了. > 1. 这是一个ASP.NET Core Web多语言项目,主要展示项目的不同: > 2. 第一种:www.xxx.com/en ...

  2. JavaScript new Date()在Safari上的坑

    问题描述 我们经常用yyyy-MM-dd HH:mm:ss格式表示日期,如2018-11-11 00:00:00,在js开发中也经常会把此格式字符串格式化为javascript Date类型,如new ...

  3. python 代码求阶乘

    递归实现 1: #递归实现 def factorial(n): if n == 0: return 1 else: return n * factorial(n - 1)# 递归实现 递归实现 2: ...

  4. 过滤器(Filter)与拦截器(Interceptor )区别

    目录 过滤器(Filter) 拦截器(Interceptor) 拦截器(Interceptor)和过滤器(Filter)的区别 拦截器(Interceptor)和过滤器(Filter)的执行顺序 拦截 ...

  5. 原生js简单轮播图 代码

    在团队带人,突然被人问到轮播图如何实现,进入前端领域有一年多了,但很久没自己写过,一直是用大牛写的插件,今天就写个简单的适合入门者学习的小教程.当然,轮播图的实现原理与设计模式有很多种,我这里讲的是用 ...

  6. Go 学习

    学习Golang,可以在线实践:https://www.tutorialspoint.com/go/index.htm

  7. UVa10474

    #include <bits/stdc++.h> using namespace std; ; int main() { int n,q,x; ; int a[maxn]; while(c ...

  8. 解决Spark On Yarn yarn-cluster模式下的No Suitable Driver问题

    Spark版本:2.2.0_2.11 我们在项目中通过Spark SQL JDBC连接MySQL,在启动Driver/Executor执行的时候都碰到了这个问题.网上解决方案我们全部都试过了,奉上我们 ...

  9. Eclipse 中 Maven 项目默认JDK版本为1.5 的解决方法

    在 Eclipse 中 Maven project 的默认 JDK 版本是 1.5, 如果不在 settings.xml 或者 pom.xml 中显示的指出 JDK 版本,每次 右键项目--> ...

  10. c语言01次作业--分支,顺序结构

    C语言--第01次作业 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 本章学习让我体会良多.首先,不得不承认自己是一个非常马虎的人.常见的问题就是输出格式上常因为没有与题目要 ...