样本文件下载:ex2Data.zip

ex2x.dat文件中是一些2-8岁孩子的年龄。

ex2y.dat文件中是这些孩子相对应的体重。

我们尝试用批量梯度下降法,随机梯度下降法和小批量梯度下降法来对这些数据进行线性回归,线性回归原理在:http://www.cnblogs.com/mikewolf2002/p/7560748.html

1.批量梯度下降法(BGD)

BGD.m代码:

clear all; close all; clc;
x = load('ex2x.dat'); %装入样本输入特征数据到x,年龄
y = load('ex2y.dat'); %装入样本输出结果数据到y,身高
figure('name','线性回归-批量梯度下降法');
plot(x,y,'o') %把样本在二维坐标上画出来
xlabel('年龄') %x轴说明
ylabel('身高')  %y轴说明m = length(y); % 样本数目
x = [ones(m, 1), x]; % 输入特征增加一列,x0=1
theta = zeros(size(x(1,:)))'; % 初始化thetaMAX_ITR = 1500;%最大迭代数目
alpha = 0.07; %学习率
i = 0;
while(i<MAX_ITR)grad = (1/m).* x' * ((x * theta) - y);%求出梯度theta = theta - alpha .* grad;%更新thetaif(i>2)delta = old_theta-theta;delta_v = delta.*delta;if(delta_v<0.000000000000001)%如果两次theta的内积变化很小,退出迭代break;endendold_theta = theta;i=i+1;
end
i
theta
predict1 = [1, 3.5] *theta
predict2 = [1, 7] *theta
hold on
plot(x(:,2), x*theta, '-') % x现在是一个2列的矩阵
legend('训练数据', '线性回归')%标记每个数据设置

View Code

程序输结果如下:迭代次数达到了上限1500次,最后梯度下降法求解的theta值为\([0.7502,0.0639]^T\),两个预测值3.5岁,预测身高为0.9737米,7岁预测为1.1973米。

注意学习率的选择很重要,如果选择太大,可能不能得到收敛的\(\theta\)值。

i =1500theta =0.75020.0639predict1 =0.9737predict2 =1.1973

View Code

2.随机梯度下降法

sgd.m代码如下,注意最大迭代次数增加到了15000,1500次迭代不能得到收敛的点,可见随机梯度下降法,虽然计算梯度时候,工作量减小,但是因为不是最佳的梯度下降方向,可能会使得迭代次数增加:

clear all; close all; clc;
x = load('ex2x.dat');
y = load('ex2y.dat');
figure('name','线性回归-随机梯度下降法');
plot(x,y,'o')
xlabel('年龄') %x轴说明
ylabel('身高')  %y轴说明
m = length(y); % 样本数目
x = [ones(m, 1), x]; % 输入特征增加一列
theta = zeros(size(x(1,:)))';%初始化thetaMAX_ITR = 15000;%最大迭代数目
alpha = 0.01;%学习率
i = 0;
while(i<MAX_ITR)%j = unidrnd(m);%产生一个最大值为m的随机正整数j,j为1到m之间j = mod(i,m)+1;%注意梯度的计算方式,每次只取一个样本数据,通过轮转的方式取到每一个样本。grad =  ((x(j,:)* theta) - y(j)).*x(j,:)';theta = theta - alpha * grad;if(i>2)delta = old_theta-theta;delta_v = delta.*delta;if(delta_v<0.0000000000000000001)break;endendold_theta = theta;i=i+1;
end
i
theta
predict1 = [1, 3.5] *theta
predict2 = [1, 7] *theta
hold on
plot(x(:,2), x*theta, '-')
legend('训练数据', '线性回归')

View Code

程序结果输出如下:

i =15000theta =0.74060.0657predict1 =0.9704predict2 =1.2001

View Code

3.小批量梯度下降法

mbgd.m代码如下,程序中批量的样本数目,我们选择5:

clear all; close all; clc;
x = load('ex2x.dat');
y = load('ex2y.dat');
figure('name','线性回归-小批量梯度下降法')
plot(x,y,'o')
xlabel('年龄') %x轴说明
ylabel('身高')  %y轴说明
m = length(y); % 样本数目x = [ones(m, 1), x]; % 输入特征增加一列
theta = zeros(size(x(1,:)))'; %初始化thetaMAX_ITR = 15000;%最大迭代数目
alpha = 0.01;%学习率
i = 0;
b = 5; %小批量的数目
while(i<MAX_ITR)j = mod(i,m-b)+1;%每次计算梯度时候,只考虑b个样本数据grad = (1/b).*x(j:j+b,:)'*((x(j:j+b,:)* theta) - y(j:j+b));theta = theta - alpha * grad;if(i>2)delta = old_theta-theta;delta_v = delta.*delta;if(delta_v<0.0000000000000000001)break;endendold_theta = theta;i=i+b;
end
i
theta
predict1 = [1, 3.5] *theta
predict2 = [1, 7] *theta
hold on
plot(x(:,2), x*theta, '-')
legend('训练数据', '线性回归')

View Code

程序的输出结果:

i =15000theta =0.74180.0637predict1 =0.9647predict2 =1.1875

View Code

matlib实现梯度下降法相关推荐

  1. ubuntu之路——day8.1 深度学习优化算法之mini-batch梯度下降法

    所谓Mini-batch梯度下降法就是划分训练集和测试集为等分的数个子集,比如原来有500W个样本,将其划分为5000个baby batch,每个子集中有1000个样本,然后每次对一个mini-bat ...

  2. 机器学习入门(09)— 偏导数、梯度概念、梯度下降法理论和实现

    1. 偏导数概念 对于式 4-6 而言 式(4.6)有两个变量,求导数时有必要区分对哪个变量求导数,即对 x0 和 x1 两个变量中的哪一个求导数.另外,我们把这里讨论的有多个变量的函数的导数称为偏导 ...

  3. 机器学习最常用的优化算法 — 梯度下降法

    1. 学习目标 每一个机器学习模型都有一个目标函数,而学习的目标,就是最小化目标函数.直观而言,当我们已经获得了一个函数,最小化该函数其实就是,在其自变量取值范围内,找到使得因变量最小的那个自变量取值 ...

  4. 线性回归介绍及分别使用最小二乘法和梯度下降法对线性回归C++实现

    回归:在这类任务中,计算机程序需要对给定输入预测数值.为了解决这个任务,学习算法需要输出函数f:Rn→R.除了返回结果的形式不一样外,这类问题和分类问题是很像的.这类任务的一个示例是预测投保人的索赔金 ...

  5. 机器学习中的梯度下降法

    1. 机器学习中为什么需要梯度下降 梯度下降是机器学习中常见优化算法之一,梯度下降法有以下几个作用: (1)梯度下降是迭代法的一种,可以用于求解最小二乘问题. (2)在求解机器学习算法的模型参数,即无 ...

  6. 通俗易懂讲解梯度下降法!

    Datawhale干货 作者:知乎King James,伦敦国王大学 知乎 | https://zhuanlan.zhihu.com/p/335191534 前言:入门机器学习必须了解梯度下降法,虽然 ...

  7. 线性回归之梯度下降法介绍

    线性回归之梯度下降法介绍 上一篇博文中介绍了最基本的梯度下降法实现流程,常见的梯度下降算法有: 全梯度下降算法(Full gradient descent), 随机梯度下降算法(Stochastic ...

  8. 优化:梯度下降法、牛顿法、共轭梯度法

    1.基本概念 1.1 方向导数 1.2 梯度的概念 如果考虑z=f(x,y)描绘的是一座在点(x,y)的高度为f(x,y)的山.那么,某一点的梯度方向是在该点坡度最陡的方向,而梯度的大小告诉我们坡度到 ...

  9. 最小二乘法、迭代优化、坐标轴下降法(Coordinate Descent, CD)、坐标下降和梯度下降对比、梯度下降法/最速下降法

    最小二乘法.迭代优化.坐标轴下降法(Coordinate Descent, CD).坐标下降和梯度下降对比.梯度下降法/最速下降法 目录

最新文章

  1. SpringMVC下的基本配置
  2. Winform巧用窗体设计完成弹窗数值绑定-以重命名弹窗为例
  3. /bin/sh -c的必要性
  4. php线上问题排查,线上问题排查神器 Arthas
  5. mysql 插入怎么知道id_如何知道刚刚插入数据库那条数据的id
  6. BundlePhobia
  7. 从头开始vue创建项目_我正在以设计师的身份开始一个被动的收入项目。 从头开始。...
  8. 微软+开源,那些亲爱的以及热爱的
  9. wordpress开放注册_WordPress.com开源,欧洲开放数据门户网站以及更多新闻
  10. (16)Zynq FPGA SD控制器介绍
  11. ES6新特性有哪些?
  12. 小Q系列故事——世界上最遥远的距离
  13. IB幼儿课程怎么理解?
  14. [网络安全自学篇] 七十一.深信服分享之外部威胁防护和勒索病毒对抗
  15. 排序(使用插入法对数组元素从小到大排序)
  16. 实验十 文件读写 1. 文件排版(文本文件读写)
  17. 高中数学相关的专业术语
  18. nativefier(一行代码将任意网页转化为桌面应用)
  19. JSPatch转换器:可直接将OC代码转换成JS代码
  20. 让你的APP实现即时聊天功能

热门文章

  1. 已经发车的票还能取出来吗_火车票报销凭证是啥?能不打印吗?官方回应来了...
  2. Java中this关键字的详解
  3. VUE 学习代码 监视和 模板语法回调函数
  4. c++ 海战棋_编程入门须知:都说零基础不好学编程,那么什么是编程基础?
  5. 投色子抽奖游戏 html,jQuery实现简单的抽奖游戏
  6. 我的世界服务器换披风的网站,我的世界评测_我的世界正版披风怎么换|或_游戏手机游戏-中关村在线...
  7. problem c: 判断素数的函数_python100天 — Day 6 函数和模块的使用
  8. int和Integer有什么区别(转)
  9. java完整JDBC操作数据库
  10. oracle 前导列_Oracle数据库表和表列讲解