对于深度学习的基础,线性回归以及逻辑回归,下面针对这两个方面做一个练习。

例子主要参考http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=DeepLearning

一、线性回归

下载数据http://openclassroom.stanford.edu/MainFolder/courses/DeepLearning/exercises/ex2materials/ex2Data.zip

数据中给出了2-8岁小孩的升高数据,y中代表的是测量的升高(米),x对应的年龄

这样每一个对应的(x,y)构成一个训练集,在这个数据中共有50个训练集,我们的目标就是利用这50个数据构建线性模型。

解决这个问题我们使用梯度下降法,这个在前面已经有介绍。

初始准备:

1、导入数据

x = load('ex2x.dat');

y = load('ex2y.dat');

这个问题的输入变量就只有年龄,也就是这个问题是一个一维线性问题,具体的表达h=ax+b,规范化了也就是为下面可以方便的转向量矩阵计算表达式如下:

这里

这样,上述表达式可以写成,这里的x为

为了形象性的了解整个数据的分别,将怎么数据的分别画出来,

在解决这个问题之前,我们先把所有样本计算模型时的设为1,具体操作如下:

m = length(y);

x = [ones(m,1),x];

具体解决过程

下面针对这个问题实现线性回归。线性回归的模型:

批量梯度下降迭代规则是:

在我们目前这个问题当中,j=0或者1,theta的初始值为0,即

在这里我们对于学习率,在Matlab中,索引是从1开始的,因此我们写的时候要通过theta(1) and theta(2) 来代表.

重复上述迭代规则,直到收敛,这样最终求得的 就是我们要求得的值,这边迭代次数设为1500。

这边说一下代价函数:

前面加了1/2为了方便计算,便于求导.通过对代价函数求到计算梯度,得到上述过程。

具体代码:

>> theta = zeros(size(x(1,:)))';
>> theta
theta =

0
0
>> MAX_ITR = 1500;
>> alpha = 0.07;
>> for num_iterations = 1:MAX_ITR
grad = (1/m).* x' * ((x * theta) - y);
theta = theta - alpha .* grad;
end
>> theta
theta =
0.7502
0.0639
>> plot(x(:,2),y,'o');
>> hold on
>> plot(x(:,2), x*theta, '-')
>> legend('Training data', 'Linear regression')

最终结果如下图:

最后根据得到的模型来预测3.5岁和7岁小孩的身高,则代码如下:

>> predict1 = [1,3.5] * theta

predict1 =

0.9737

>> predict2 = [1, 7] * theta

predict2 =

1.1973

为了更形象的理解整个线性回归,对代价函数进行可视化分析,具体代码如下:

>> J_vals = zeros(100, 100); % initialize Jvals to 100x100 matrix of 0's

>> theta0_vals = linspace(-3, 3, 100);

>> theta1_vals = linspace(-1, 1, 100);

>> for i = 1:length(theta0_vals)

for j = 1:length(theta1_vals)

t = [theta0_vals(i); theta1_vals(j)];

J_vals(i,j) = (0.5/m) .* (x * t - y)' * (x * t - y);

end

end

>> J_vals = J_vals';

>>figure;

>> surf(theta0_vals, theta1_vals, J_vals);

>>xlabel('\theta_0');

>> ylabel('\theta_1')

得到如下图:

通过这个图,我们可以看出最小J值得时候,theta0跟theta1的大小。

另外我们可以绘制等高线,通过等高线也可以很好的理解一下。

具体效果如下图:

具体代码:

contour(theta0_vals, theta1_vals, J_vals, logspace(-2, 2, 15))

xlabel('\theta_0'); ylabel('\theta_1')

等高线不好理解的话,可以考虑一个简单的圆的方程,令半径从1开始慢慢变大,可以画出类似等高线,这样就可以清楚越往中间,代价函数值越小。

这样基本的线性回归就解决了。下面开始学习多变量的线性回归。

深度学习——练习的更多相关文章

  1. 【深度学习Deep Learning】资料大全

    最近在学深度学习相关的东西,在网上搜集到了一些不错的资料,现在汇总一下: Free Online Books  by Yoshua Bengio, Ian Goodfellow and Aaron C ...

  2. DeepMind背后的人工智能:深度学习原理初探

    去年11月,一篇名为<Playing Atari with Deep Reinforcement Learning>的文章被初创人工智能公司DeepMind的员工上传到了arXiv网站.两 ...

  3. 【转】TensorFlow练习20: 使用深度学习破解字符验证码

    验证码是根据随机字符生成一幅图片,然后在图片中加入干扰象素,用户必须手动填入,防止有人利用机器人自动批量注册.灌水.发垃圾广告等等 . 验证码的作用是验证用户是真人还是机器人:设计理念是对人友好,对机 ...

  4. 整理:深度学习 vs 机器学习 vs 模式识别

    http://www.csdn.net/article/2015-03-24/2824301 近200篇机器学习&深度学习资料分享(含各种文档,视频,源码等) http://developer ...

  5. [深度学习大讲堂]从NNVM看2016年深度学习框架发展趋势

    本文为微信公众号[深度学习大讲堂]特约稿,转载请注明出处 虚拟框架杀入 从发现问题到解决问题 半年前的这时候,暑假,我在SIAT MMLAB实习. 看着同事一会儿跑Torch,一会儿跑MXNet,一会 ...

  6. 手把手教你搭建深度学习平台——避坑安装theano+CUDA

    python有多混乱我就不多说了.这个混论不仅是指整个python市场混乱,更混乱的还有python的各种附加依赖包.为了一劳永逸解决python的各种依赖包对深度学习造成的影响,本文中采用pytho ...

  7. 深度学习框架搭建之最新版Python及最新版numpy安装

    这两天为了搭载深度学习的Python架构花了不少功夫,但是Theano对Python以及nunpy的版本都有限制,所以只能选用版本较新的python和nunpy以确保不过时.但是最新版Python和最 ...

  8. 机器学习&深度学习资料

    机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 1) 机器学习(Machine Learning)&深度学习(Deep Lea ...

  9. 【转载】如何自学深度学习技术,大神Yann LeCun亲授建议

    编者按:Quora 上有网友提问:自学机器学习技术,你有哪些建议?(What are your recommendations for self-studying machine learning), ...

  10. 深度学习 - DL

    雷锋网 - 2016 | 人工智能在深度学习领域的前世今生(原文链接) Deep Learning - DL,深度学习是机器学习的一种. 深度学习最重要的作用:表示学习 深度学习实践的四个关键要素 计 ...

随机推荐

  1. 详解Android Activity生命周期

    转载注明来自:  http://www.cnblogs.com/wujiancheng/ 一.正常情况下Activity的生命周期:  Activity的生命周期大概可以归为三部分 整个的生命周期:o ...

  2. linux下svn安装(ALI ECS)

    yum安装svn 搭建和使用SVN 可参考阿里云文档:https://help.aliyun.com/document_detail/52864.html?spm=5176.8208715.110.1 ...

  3. Linux——网络编程线程池机制

    #include <stdlib.h>#include <pthread.h>#include <unistd.h>#include <assert.h> ...

  4. 查看MySQL默认字符集

    MySQL默认字符集相信大家都有所了解,下面就为您介绍一下查看MySQL默认字符集的命令,希望对您学习MySQL默认字符集能有些帮助. MySQL的字符集支持(Character Set Suppor ...

  5. Axure 9 面板折叠显示隐藏

    1  首先放置一个面板1作为点击事件: 2  另外一个面板2或者其他组建,将其设置为动态面板,然后隐藏 3  给面板1添加如下事件,即可: 4  我们点击面板1,可以实现展开隐藏面板2的动态效果

  6. CAD参数绘制点(com接口)

    点在CAD中的作用除了可以分割对象外,还能测量对象,点不仅表示一个小的实体,而且通过点作为绘图的参考标记. pdmode是一个控制point的形式的系统变量,当pdmode=0时是可见的一个点,当pd ...

  7. 04Hibernate连接数据库环境配置

    Hibernate连接数据库环境配置

  8. layui timeline使用

    使用layui timeline过程记录: layui官网时间线介绍比较少,可能是太简单了,这里把时间线通过请求后台数据.再自动填写到对应区块,进行了封装: 代码如下: function timeli ...

  9. Java 序列化Serializable详解(附详细例子)

    Java 序列化Serializable详解(附详细例子) 1.什么是序列化和反序列化Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是 ...

  10. mysql通配符进行模糊查询

    在mysql数据库中,当我们需要模糊查询的时候 ,我们会使用到通配符. 首先我们来了解一下2个概念,一个是操作符,一个是通配符. 操作符 like就是SQL语句中的操作符,它的作用是指示在SQL语句后 ...