• 1.算法描述

批量梯度下降的主要问题是它要用整个训练集来计算每一步的梯度,训练集大时算法特别慢。相反,随机梯度下降,每一步在训练集中随机选择一个实例,并且仅基于该单个实例来计算梯度

与使用批量梯度下降相比,随机梯度下降时,每个训练步骤要快得多,但也更加随机

当成本函数非常不规则时,随机梯度下降可以帮助算法跳出局部最小值,所以相比批量梯度下降,它对于找全局最小值更有优势

因此随机性的好处是可以逃离局部最优,但是缺点是永远定位不出最小值


  • 2. 实验模拟

开始的时候步长较大,这有助于快速进展和逃离局部最小值,然后越来越小,让算法尽可能靠近全局最小值—模拟退火

每个迭代学习率的函数的叫学习调度。如果学习率下降得太快,可能会陷入局部最小值,甚至是停留在走向最小值的半途中。如果学习率降得太慢,需要太长时间才能跳到差不多最小值附近,如果提早结束训练,可能只得到一个次优解的方案

import numpy as np
from matplotlib import pyplot as plt
from sklearn.linear_model import LinearRegressionX=2*np.random.rand(100,1)
X=np.matrix(X)
y=4 + 3*X + np.random.rand(100,1)
y=np.matrix(y)n_epochs=50
t0,t1=5,50def learning_schedule(t):return t0/(t+t1)def picture(X_new,y_predict):plt.plot(X_new,y_predict,"r-")plt.plot(X,y,"b.")X_b=np.c_[np.ones((100, 1)), X]
theta_best=np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)X_new=np.array([[0],[2]])
X_new_b=np.c_[np.ones((2,1)),X_new]n_iterations=1000#迭代次数
m=100theta=np.random.randn(2,1)for epoch in range(n_epochs):for i in range(m):random_index=np.random.randint(m)xi=X_b[random_index:random_index+1]yi=y[random_index:random_index+1]gradients=2*xi.T.dot(xi.dot(theta)-yi)eta=learning_schedule(epoch*m+i)#learning ratetheta=theta-eta*gradientsy_predict = X_new_b.dot(theta)picture(X_new, y_predict)print(theta)
plt.axis([0,2,0,15])
plt.xlabel('X1')
plt.ylabel('y')
plt.show()

虽然批量梯度下降代码在整个训练集中进行了1000次迭代,但此代码仅在训练集中遍历了50次,并达到了一个很好的解决方案

[[4.46409376]
[3.03674864]]

  • 3. 注意事项

使用随机梯度下降时,训练实例必须独立同分布,以确保平均而言将参数拉向全局最优值,其中的实例是随机选取的,因此某些实例可能每个轮次中被选取几次,而其他实例则可能根本不被选取,解决方法为混洗—遍历—混洗,但是,这种方法通常收敛较慢


  • 4. 使用Scikit—Learn的随机梯度下降执行线性回归

使用SGDRegressor类,该类默认优化平方误差成本函数

import numpy as np
from matplotlib import pyplot as plt
from sklearn.linear_model import LinearRegressionX=2*np.random.rand(100,1)
X=np.matrix(X)
y=4 + 3*X + np.random.rand(100,1)
y=np.matrix(y)
#这是由于在新版的sklearn中,所有的数据都应该是二维矩阵,哪怕它只是单独一行或一列
#(比如前面做预测时,仅仅只用了一个样本数据),所以需要使用.reshape(1,-1)进行转换
y = np.array(y).reshape(1, -1)from sklearn.linear_model import SGDRegressor
#1.代码最多可以执行1000次
#2.或者直到一个轮次期间损失下降小于0.001为止
#4.默认学习调度以0.1的学习率开始
sgd_reg=SGDRegressor(max_iter=1000,tol=1e-3,penalty=None,eta0=0.1)sgd_reg.fit(X,y.ravel())print(sgd_reg.intercept_,sgd_reg.coef_)

再次找到了一种非常接近于由标准方程返回的解

[4.46581072] [3.00165571]

http://www.taodudu.cc/news/show-3475624.html

相关文章:

  • python公众号推荐 知乎_如何推荐自己的公众号?
  • 视频号付费推广全面开放,还会怕没有流量吗?丨国仁网络资讯
  • 付费策略的魔力
  • 公众号开发需要学什么_公众号的开发方式有哪些
  • 公众号社区运营秘籍
  • crmeb知识付费系统
  • SOPHP微信公众号免费开源推广
  • 公众号付费势不可挡,罗胖、轻课们开启新教育时代?
  • 免费流量越来越难,付费推广势在必行
  • 苹果付费app共享公众号_公众号淘客和APP淘客哪个好做?公众号与淘客APP利弊分析...
  • 微信公众号推广
  • 苹果付费app共享公众号_苹果再“下黑手”,对准公众号ios虚拟支付!知识付费凉凉?...
  • 预约货车拉货小程序开发制作功能介绍
  • 老司机学习MyBatis之mappers如何配置映射注册
  • 2022流动式起重机司机考题及模拟考试
  • 微信小程序开发者注册流程
  • 老司机教你注册电子邮箱后,如何搬迁邮箱!
  • java基于Android快递物流服务系统
  • php滴滴平台接口,滴滴API请求SDK
  • 老司机写的java代码_据说每个JavaEE程序员都是老司机
  • 小程序运营攻略《二》:如何注册小程序
  • uber司机如何注册 uber司机详细注册流程
  • 如何注册uber司机赚钱
  • Android客户端实现注册/登录详解(一)
  • UBER人民优步司机注册攻略
  • 优步uber专车司机注册流程和网址
  • 调用支付JSAPI缺少参数:appid
  • 基于springboot+vue的电动车实名制挂牌管理系统 elementui
  • 冲刺大厂每日算法面试题,动态规划21天——第九天
  • 神武手游宠物打书模拟器

梯度下降法—随机梯度下降相关推荐

  1. 【数据挖掘】神经网络 后向传播算法 ( 梯度下降过程 | 梯度方向说明 | 梯度下降原理 | 损失函数 | 损失函数求导 | 批量梯度下降法 | 随机梯度下降法 | 小批量梯度下降法 )

    文章目录 I . 梯度下降 Gradient Descent 简介 ( 梯度下降过程 | 梯度下降方向 ) II . 梯度下降 示例说明 ( 单个参数 ) III . 梯度下降 示例说明 ( 多个参数 ...

  2. 线性回归随机梯度下降_线性回归的批次梯度与随机梯度下降

    线性回归随机梯度下降 In this article, we will introduce about batch gradient and stochastic gradient descent m ...

  3. 梯度下降法_梯度下降

    梯度下降法 介绍 (Introduction) Gradient Descent is a first order iterative optimization algorithm where opt ...

  4. python实现线性回归之梯度下降法,梯度下降详解

    线性回归的有关概念已在笔者相关文章中进行介绍.本篇内容将介绍梯度下降(BGD)相关内容. 1.梯度下降 梯度下降常用于机器学习中求解符合最小损失函数的模型的参数值,梯度下降也是BP神经网络的核心,本文 ...

  5. python实现梯度下降法_梯度下降法及其Python实现

    作者:糖甜甜甜 经管人也可以学Python. 个人公众号: 经管人学数据分析 基本介绍 梯度下降法(gradient descent),又名最速下降法(steepest descent)是求解无约束最 ...

  6. 一般梯度、随机梯度、相对梯度和自然梯度

    一般梯度 也称常规梯度,就是 f ( w ⃗ ) f(\vec w) f(w ) 对 w ⃗ \vec w w 的偏导,即 ∂ f ( w ⃗ ) ∂ w ⃗ \frac{\partial f(\ve ...

  7. Python机器学习:梯度下降法005梯度下降法和数据标准化

    #%% #我还是使用sklearn吧.. import numpy as np from sklearn import datasets from sklearn.model_selection im ...

  8. 梯度下降法的不同形式——随机梯度下降法和小批量梯度下降法

    前文介绍了梯度下降法,其每次迭代均需使用全部的样本,因此计算量巨大.就此,提出了基于单个样本的随机梯度下降法(Stochastic gradient descent,SGD)和基于部分样本的小批量梯度 ...

  9. 梯度下降算法_批梯度下降法,Minibatch梯度下降法和随机梯度下降法之间的区别...

    什么是梯度下降法? 梯度下降法是一种机器学习中常用的优化算法,用来找到一个函数(f)的参数(系数)的值,使成本函数(cost)最小. 当参数不能解析计算时(如使用线性代数),并且必须通过优化算法搜索时 ...

最新文章

  1. linux oracle em使用,案例:五步解决linux操作系统Oracle EM乱码的问题
  2. SpringBoot + Mybatis + Druid + PageHelper 实现多数据源分页
  3. ubuntu 挂载新硬盘
  4. c++ 不允许使用抽象类类型的对象_Java中日期API的使用总结
  5. 为了OFFER系列 | 牛客网美团点评数据分析刷题
  6. 使用无限生命期Session的方法
  7. gridreport如何设置打印3次_如何设置光固化3D打印机切片参数
  8. MySQL子查询作为列_mysql 列子查询
  9. Possible iteration over unexpected (custom / inherited) members, probably missing hasOwnProperty che
  10. 在Ubuntu上以服务方式运行Java程序
  11. 详解 Qt 串口通信程序全程图文 (1)
  12. 浏览器获取CA认证流程
  13. python播放wav音频文件源码
  14. win10手柄震动测试软件,win10系统测试手柄震动频率的操作方法
  15. 用Python控制Kinect相机
  16. CSR867x — CSR8670平台开发调试经验
  17. 1200PLC和Modbus485主站DCS系统通讯
  18. HAC集群状态检查、切换、数据同步验证方法
  19. 基于Mysql 的SQL应用---2021(ZSD版)
  20. 2-SAT(随意写点)

热门文章

  1. python画简单花-怎么用python画花朵
  2. iphone xr xs_如何在iPhone X,XR,XS和XS Max上截屏
  3. iOS SDK开发步骤
  4. js中466/60取余
  5. 在VirtualBox中安装Ubuntu18.04教程
  6. 【Android语音合成TTS】百度语音接入方法,和使用技巧详解
  7. 2022-2028全球锂电铜箔行业调研及趋势分析报告
  8. 虚拟机 安装Ubuntu18.04和ROS Melodic
  9. springboot整合微信JSAPI支付(二)
  10. (16年)井底一只青蛙,已知井深M米,青蛙白天每天能向上爬N米,晚上休息,但重力导致向下滑K米,输出第几天能爬出来,累积爬了多少米,下滑了多少米