本文介绍了机器学习中基本的优化算法—梯度下降算法和随机梯度下降算法,以及实际应用到线性回归、Logistic回归、矩阵分解推荐算法等ML中。

梯度下降算法基本公式

常见的符号说明和损失函数

X :所有样本的特征向量组成的矩阵 
x(i) 是第i个样本包含的所有特征组成的向量x(i)=(x(i)1,x(i)2...,x(i)n) 
y(i) 第i个样本的label,每个样本只有一个label,y(i)是标量(一个数值) 
hθ(x(i)) :拟合函数,机器学习中可以用多种类型的拟合函数 
θ 是函数变量,是多个变量的向量 θ=[θ1,θ2,...] 
|hθ(xi)−y(i)| :拟合绝对误差 
求解的目标是使得所有样本点(m个)平均误差最小,即:

或者平方误差最小,即:

argmin表示使目标函数取最小值时的变量值(即θ)值。

都被称为损失函数(Cost Function) 
J(θ)不只是上面两种形式,不同的机器学习算法可以定义各种其它形式。

梯度下降迭代公式

为了求解θ=[θ1,θ2,...]的值,可以先对其赋一组初值,然后改变θ的值,使得J(θ)最小。函数J(θ)在其负梯度方向下降最快,所以只要使得每个参数θ按函数负梯度方向改变,则J(θ)能最快找到最小值。即

这就是梯度下降算法的迭代公式,其中α表示步长,即往每次下降最快的方向走多远。

线性回归

以多变量线性回归为例: 
拟合函数如下:

Logistic回归

代价函数: 
以Sigmoid函数(Logistic函数)为例说明:

为什么这么定义代价函数呢?我自己通俗理解是,求导后形式简洁,而且: 
y=0,hθ(x)范围为[0,0.5),越接近0.5,代价越高: 
 
由上图可以看出:−log(1−hθ(x(i)))可以很好衡量某一个样本的代价。

y=1时,hθ(x)范围为(0.5,1],越接近0.5,代价越高: 
 
同样由上图可以看到:−loghθ(x(i))可以很好衡量某一个样本的代价。

迭代更新公式: 
求导过程蛮复杂的,直接给出结果吧:

和线性回归中最后给的更新迭代公式是一模一样的,这也就理解了为什么代价函数设计时比较复杂,还套了log,敢情是为了这?? 
总之logisitc回归和线性回归最终使用的是一模一样的优化算法。 
还可将这个公式写成用向量来表达的形式:

矩阵分解的推荐算法

可以参考我转载的另一篇文章: http://www.cnblogs.com/kobedeshow/p/3651833.html?utm_source=tuicool&utm_medium=referral

随机梯度下降(SGD)

stochastic gradient descent

从梯度上升算法公式可以看出,每次更新回归系数θ时都需要遍历整个数据集。该方法在处理100个左右的数据集尚可,但是如果有数十亿的样本和成千万的特征,这种方法的计算复杂度就太高了。一种改进的方法是一次仅用一个样本点来更新回归系数。由于可以在新样本到来时,对分类器进行增量更新,因此是一个“在线学习”算法,而梯度下降算法一次处理所有的数据被称为“批处理”。更新公式如下:

参考文献

(1)Stanford机器学习—第三讲. 逻辑回归和过拟合问题的解决 logistic Regression & Regularization 
http://blog.csdn.net/abcjennifer/article/details/7716281?locationNum=2 
(2)机器学习入门:线性回归及梯度下降 
http://blog.csdn.net/xiazdong/article/details/7950084 
(3)梯度下降深入浅出 
http://binhua.info/machinelearning/%E6%A2%AF%E5%BA%A6%E4%B8%8B%E9%99%8D%E6%B7%B1%E5%85%A5%E6%B5%85%E5%87%BA

机器学习算法(优化)之一:梯度下降算法、随机梯度下降(应用于线性回归、Logistic回归等等)的更多相关文章

  1. Andrew Ng机器学习算法入门(四):阶梯下降算法

    梯度降级算法简介 之前如果需要求出最佳的线性回归模型,就需要求出代价函数的最小值.在上一篇文章中,求解的问题比较简单,只有一个简单的参数.梯度降级算法就可以用来求出代价函数最小值. 梯度降级算法的在维 ...

  2. 机器学习之线性回归---logistic回归---softmax回归

    在本节中,我们介绍Softmax回归模型,该模型是logistic回归模型在多分类问题上的推广,在多分类问题中,类标签 可以取两个以上的值. Softmax回归模型对于诸如MNIST手写数字分类等问题 ...

  3. NN优化方法对照:梯度下降、随机梯度下降和批量梯度下降

    1.前言 这几种方法呢都是在求最优解中常常出现的方法,主要是应用迭代的思想来逼近.在梯度下降算法中.都是环绕下面这个式子展开: 当中在上面的式子中hθ(x)代表.输入为x的时候的其当时θ參数下的输出值 ...

  4. 监督学习:随机梯度下降算法(sgd)和批梯度下降算法(bgd)

    线性回归 首先要明白什么是回归.回归的目的是通过几个已知数据来预测另一个数值型数据的目标值. 假设特征和结果满足线性关系,即满足一个计算公式h(x),这个公式的自变量就是已知的数据x,函数值h(x)就 ...

  5. 监督学习——随机梯度下降算法(sgd)和批梯度下降算法(bgd)

    线性回归 首先要明白什么是回归.回归的目的是通过几个已知数据来预测另一个数值型数据的目标值. 假设特征和结果满足线性关系,即满足一个计算公式h(x),这个公式的自变量就是已知的数据x,函数值h(x)就 ...

  6. Logistic回归Cost函数和J(θ)的推导(二)----梯度下降算法求解最小值

    前言 在上一篇随笔里,我们讲了Logistic回归cost函数的推导过程.接下来的算法求解使用如下的cost函数形式: 简单回顾一下几个变量的含义: 表1 cost函数解释 x(i) 每个样本数据点在 ...

  7. 1. 批量梯度下降法BGD 2. 随机梯度下降法SGD 3. 小批量梯度下降法MBGD

    排版也是醉了见原文:http://www.cnblogs.com/maybe2030/p/5089753.html 在应用机器学习算法时,我们通常采用梯度下降法来对采用的算法进行训练.其实,常用的梯度 ...

  8. sklearn中实现随机梯度下降法(多元线性回归)

    sklearn中实现随机梯度下降法 随机梯度下降法是一种根据模拟退火的原理对损失函数进行最小化的一种计算方式,在sklearn中主要用于多元线性回归算法中,是一种比较高效的最优化方法,其中的梯度下降系 ...

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

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

随机推荐

  1. HDFS的实现机制

    参考以上这张图,实际上我们客户端访问HDFS里面的内容时,并不需要真实知道内容存在于服务器的内容的真实路径,我们只需要知道一个虚拟路径就可以,比如最上面的hdfs://weekend110:9000/ ...

  2. BI开发之——Mdx基础语法(转至指尖流淌)

    Mdx为MultiDimensional  Expressions的缩写,多维表达式,是标准的OLAP查询语言.在多数OLAPServer都提供Mdx支持,如Microsoft Sql Server ...

  3. 【转】伪O2O已死?2016年实体零售将迎来真正的O2O

    O2O果真如所谓的经济学家许小年所说“是两边都是零,中间一个2货”吗?我觉得,经济学家不是说相声的,这种哗众取宠的观点不应该出自一个严谨的经济学家之口.而且,我也不认为许小年真正懂什么叫O2O. 但O ...

  4. C++ 运算符重载三(链式编程)

    //运算符重载之链式编程 #include<iostream> using namespace std; //对于友元函数重载运算符只适用于左操作数是系统变量的场景 //因为成员无法在系统 ...

  5. opencv 摄像头人脸检测

    PYTHON ubuntu16.04 默认安装的Python版本2.7.12,当用pip install opencv-python 安装了opencv for python 3.3.0.10后,运行 ...

  6. 开源 java CMS - FreeCMS2.3 移动app生成栏目数据

    原文地址:http://javaz.cn/site/javaz/site_study/info/2015/28230.html​ 项目地址:http://www.freeteam.cn/ 生成栏目数据 ...

  7. 【python】NLTK好文

    From:http://m.blog.csdn.net/blog/huyoo/12188573 nltk是一个python工具包, 用来处理和自然语言处理相关的东西. 包括分词(tokenize), ...

  8. C++ map修改指定key的value

    对于修改C++指定key的value,网上查了很多,都说直接insert就会覆盖原来的值,是否是这样的呢?  C++ Code  12345678910111213141516171819202122 ...

  9. AWS系列-EC2实例选择镜像

    Centos Ubuntu Redhat 打开EC2控制台,点击启动实例,选择AWS Marketplace Centos.org说明为centos官网镜像 如下图,这种镜像是收费的镜像 Ubuntu ...

  10. matplotlib库解析

    matplotlib 是python最著名的2D绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中.通过简单的绘图语 ...