精华内容
下载资源
问答
  • 吴恩达机器学习ex2-Matlab实现:内含算法代码、数据集、ex2描述文档。
  • 压缩包内含吴恩达老师《Machine Learning》课程第五周的编程作业ex4所需完成的三个m文件。压缩包中所有编程作业均为本人独立完成,并尽量使用向量化计算,全部满分通过。
  • 本文基于吴恩达老师第五周的练习,在这次的练习中,你将会实现神经网路的后向传播算法(BP神经网络)。 作业大纲1 神经网络 Neural Networks ex4.m1.1 数据可视化1.2 模型表示1.3 前向传播和代价函数 nnCostFunction.m...

    本文基于吴恩达老师第五周的练习,在这次的练习中,你将会实现神经网路的后向传播算法(BP神经网络)。

    1 神经网络 Neural Networks ex4.m

    在以前的练习中,你实现了神经网络的前向传播并且用已知的权重进行手写数字的预测。在这次的练习中,你将实现后向传播算法进行参数的学习。

    1.1 数据可视化

    就和上周一样展示数据,有5000个样本,一个样本就是一张手写数字的图片,20*20px,有400个特征。然后y中,0用10来表示,其他数字不变。
    在这里插入图片描述

    1.2 模型表示

    本次训练的模型是一个三层的神经网络,一个输入层,有400个单元。一个隐含层,有25个单元。一个输出层,有十个单元,分别对应了十个数字类别。

    1.3 前向传播和代价函数 nnCostFunction.m

    现在你将要实现神经网络的代价函数以及梯度。首先,完成nnCostFunction.m这个函数的代码去返回cost的值。回忆一下没有正则化的神经网络的代价函数公式:
    在这里插入图片描述
    在完成了上述的公式代码之后,你可以在屏幕上看见代价为0.287629,下面是这部分的代码

    a1 = [ones(m, 1) X];   %5000x401
    z2 = a1 * Theta1';     %5000x25   Theta1 25*401
    a2 = sigmoid(z2);      %5000x25
    a2 = [ones(m, 1) a2];  %5000x26
    z3 = a2 * Theta2';     %5000x10   Theta2 10×26
    a3 = sigmoid(z3);      %5000x10
    h = a3;                %5000x10
    
    u = eye(num_labels);  
    y = u(y,:); 
    J = 1/m*(sum(sum(-y .* log(h) - (1 - y) .* log(1 - h)))); 
    

    1.4 正则化代价函数

    公式如下:
    在这里插入图片描述
    这就是在上面的基础上再加上正则项目,但是要注意这个正则项是从1开始计算的。
    修改这部分代码即可:

    regularization = lambda/(2 * m) * (sum(sum(Theta1(:,2:end) .^ 2)) + sum(sum(Theta2(:,2:end) .^ 2)));
    J = J + regularization;
    

    这时候的cost就变成了0.383770.

    2 后向传播 nnCostFunction.m

    在这部分的练习中,你将会用后向传播算法计算神经网络代价函数的梯度。你需要继续完成nnCostFunction.m使得这个函数返回一个合适的梯度值。

    2.1 Sigmoid函数的导数 sigmoidGradient.m

    为了帮助你开始这个部分的练习,你将要最先实现sigmoid梯度函数,如下:
    在这里插入图片描述
    在这里插入图片描述
    根据上述公式完成sigmoidGradient.m函数,当你完成了,你可以通过调用函数来进行验证,当z的值都很大时,不管正负,结果应该是接近于0的,当z=0,其值应为0.25。你的公式不仅要适用于一个数字,对于向量矩阵都能计算出每一个元素的值。

    function g = sigmoidGradient(z)
    %SIGMOIDGRADIENT returns the gradient of the sigmoid function
    %evaluated at z
    %   g = SIGMOIDGRADIENT(z) computes the gradient of the sigmoid function
    %   evaluated at z. This should work regardless if z is a matrix or a
    %   vector. In particular, if z is a vector or matrix, you should return
    %   the gradient for each element.
    % ====================== YOUR CODE HERE ======================
    % Instructions: Compute the gradient of the sigmoid function evaluated at
    %               each value of z (z can be a matrix, vector or scalar).
    s = 1.0 ./ (1.0 + exp(-z));
    g = s .* (1-s);
    % =============================================================
    end
    

    2.2 随机初始化 randInitializeWeights.m

    当训练神经网络时,随机的初始化参数来防止对称现象的发生。一个有效的随机初始化的方法是,随机地在[−ε init,init]初始化Θ的值。代码如下:

    function W = randInitializeWeights(L_in, L_out)
    W = zeros(L_out, 1 + L_in);
    epsilon_init = 0.12;
    W = rand(L_out, 1 + L_in) * 2 * epsilon_init - epsilon_init;
    end
    

    2.3 后向传播

    给出训练样本,我们想要实现前向传播去计算所有的在这个神经网络里面的激活单元,包括输出层的假设函数值。然后,对于每一个l的每一个结点,我们要计算偏差项δ。
    对于输出结点,我们会直接计算不同的神经网络激活单元和正确的目标值。而对于隐藏层,你将通过第l+1层的节点偏差项的权重平均值计算在这里插入图片描述
    更详细的,下面是实现后向传播的算法。你需要实现步骤1-4在一个循坏里面,一次处理一个样本。具体来说,你需要实现for循坏,用for i = 1:m然后讲步骤1-4放在这个循环里面,那么第i次迭代就是计算第i个样本。然后第五步会将所有的梯度值相加在除m,获得了神经网络的代价函数的梯度。

    1. 将第输入层的值设置成第t个训练样本。先进行前向传播,计算出第2层和第3层的激活单元值。在这里插入图片描述
      在第2层和第3层添加偏置单元。a 1 = [1 ; a 1]
    2. 对于每一个输出单元k,设置:
      在这里插入图片描述
      这里的yk是0,1变量,就是说当属于这类是就是1,其他的就是0.
      3.对于第2层,设置
      在这里插入图片描述
      4.将梯度值相加。
      在这里插入图片描述
      5.将梯度值/m。
      代码如下:
    delta3 = a3 - y;                        % 5000 * 10
    delta2 = delta3 * Theta2;               % 5000 * 26
    delta2 = delta2(:,2:end);               % 5000 * 25
    delta2 = delta2 .* sigmoidGradient(z2); % 5000 * 25
    
    Delta1 = zeros(size(Theta1));           % 25 * 401 
    Delta2 = zeros(size(Theta2));           % 10 * 26
    Delta1 = Delta1 + delta2' * a1;         % 25 * 401 5000×25' * 5000x401 
    Delta2 = Delta2 + delta3' * a2;         % 10 * 26  5000×10' * 5000x26
    
    

    梯度检查

    在你的神经网络中,你在最小化代价函数J。为了进行梯度检查,你可以想象展开系数Θ1和Θ2,变成一个长向量θ。通过这样做,你可以认为下面的梯度检查过程来代替代价函数。
    假设你有一个函数,并且你想要算偏导数,并且你想要检车所得到的结果是不是正确。
    在这里插入图片描述
    在这里插入图片描述
    这两个值彼此近似的程度取决于J的细节。但是,假设= 10−4,通常会发现上述内容的左边和右边至少要4个有效数字(并且通常还要更多)。在这个部分代码已经写好了,你需要看一看并理解他是怎么样运行的。如果说你的代码正确的话,你将会看到相关误差小于1e-9.

    2.5 正则化神经网络

    在你成功的完成后向传播算法后,你将要加入正则项。结果表明你可以用后向传播计算完梯度后,再将正则项加进去。公式如下:
    在这里插入图片描述
    要记住偏置单元是不需要被正则的。

    2.6 使用fmincg来学习参数

    当你成功的完成了上述的步骤之后,下一步是使用fmincg函数去优化参数。完成训练之后,ex.m脚本会向你报告你分类的准确率。如果说你的程序是正确的话,你就会看见95.3%的正确率(这个可能会有1%的变化因为随机初始化参数的不同)。也会随着迭代的增多,正确率会变高。我们建议你去尝试更多迭代次数的神经网络,比如400次等等,也可以尝试改变正则化系数λ。通过正确的学习设置,让神经网络完美的拟合训练集是很有可能的。

    3 隐层可视化

    一种理解你的神经网络的方法是学习可视化隐层神经元所代表的。通俗一点,给出一个特殊的隐层单元,将他所计算的东西可视化的一个方法是找一个能激活他的输入x。

    总结

    对于神经网络这节,是比较抽象难理解的一个章节。包括做题目的时候按照老师说的新手用循坏来做。发现其实还是矩阵来做更加清晰。当然,对于这些章节还是需要再反复斟酌的。对于这篇文章还是比较乱,在我的草稿箱里存了好久,仅供参考!下面是我的成绩:
    在这里插入图片描述

    展开全文
  • coursera吴恩达机器学习课程作业自写Python版本+Matlab原版
  • 压缩包内含吴恩达老师《Machine Learning》课程第四周的编程作业ex3所需完成的四个m文件。压缩包中所有编程作业均为本人独立完成,并尽量使用向量化计算,全部满分通过。
  • 压缩包内含吴恩达老师《Machine Learning》课程第三周的编程作业ex2所需完成的五个m文件。压缩包中所有编程作业均为本人独立完成,并尽量使用向量化计算,全部满分通过。
  • 这篇文章是基于bilibili的吴恩达机器学习经典名课【中英字幕】所写的第三周的编程练习,这个作业是关于逻辑回归的。 作业大纲1 逻辑回归1.1 数据可视化1.2 具体实现过程1.2.1 热身练习:sigmoid函数sigmoid.m1.2.2 ...

    这篇文章是基于bilibili的吴恩达机器学习经典名课【中英字幕】所写的第三周的编程练习,这个作业是关于逻辑回归的。

    1 逻辑回归

    这是一个预测学生能否被大学录取的二分类问题。问题给了学生两门考试的成绩以及能否被录取的结果。在这个部分,有一个ex2.m的主函数,以及辅助运行需要你去完成的子函数。

    1.1 数据可视化

    就是将两门成绩画在平面坐标轴上,然后是否录取要分开标识出来,并且将plotData.m函数补充完整。

    function plotData(X, y)
    figure; hold on;
    pos = find(y==1); neg = find(y==0);
    plot(X(pos,1),X(pos,2),'k+','LineWidth',2,'MarkerSize', 7); 
    plot(X(neg, 1), X(neg, 2), 'ko', 'MarkerFaceColor', 'y', 'MarkerSize', 7);
    hold off;
    end

    画出来的图像是这样的:
    在这里插入图片描述

    1.2 具体实现过程

    1.2.1 热身练习:sigmoid函数sigmoid.m

    这个部分是要我们完成sigmoid函数的表示方法,同时要支持向量,这个就是对于输入的z的每一个值都计算他的sigmoid值就可以了,那就是用向量的点乘即可。

    function g = sigmoid(z)
    g = 1 ./ (1 + exp(-z));
    end

    1.2.2 代价函数梯度 costFunction.m

    给出逻辑回归的代价函数,以及各个梯度的公式,要求你在 costFunction.m 这个函数中,将这两个公式进行实现,需要注意的是,这些变量都是矩阵之间的计算。
    代价函数:
    在这里插入图片描述
    梯度:
    在这里插入图片描述

    function [J, grad] = costFunction(theta, X, y)m = length(y); % number of training examples
    h = sigmoid(X*theta);
    J = (-y'*log(h)-(1-y)'*log(1-h))/m;
    grad = X'*(h-y)/m;
    % =============================================================
    end

    1.2.3 使用fminunc函数调参

    这个就不用做什么,老师把代码都写在ex2.m这个函数里面。就是使用fminunc这个函数,并且调用你自己写的costFunction.m就可以了。

    1.2.4 评估逻辑回归 predict.m

    对于自己已经选好的最合适的参数,怎么去检验这个模型的好坏呢?应用自己的模型在训练集上进行测试,看看预测的准确率。完成predict.m函数。

    function p = predict(theta, X)
    p = sigmoid(X*theta);
    n = length(p);
    for i=1:n
        if p(i)>=0.5
            p(i) = 1;
        else
            p(i) = 0;
        end
    end
    % =========================================================================
    end

    2 正则化逻辑回归

    对于正则化,就是为了避免所选的模型过拟合overfit,过拟合就是指在训练集样本上拟合得很好,但是其泛化能力很差,即不能有效地应用在测试样本上。正则化就是在原有的代价函数上增加惩罚项,使所选取的参数不能无限制的大。
    在这个部分,给到的是预测制造工厂的微芯片是否通过质量保证(QA),训练集还是为两个测试的分数,以及能否通过的0-1变量。这个部分的主函数是ex2 reg.m 。

    2.1 数据可视化

    还是一样,拿到数据就尽量可视化在坐标轴上面。这个部分都不用改,直接用上面的plotData函数即可。得到的图形:
    在这里插入图片描述
    从图上就可以看出来,这次的模型一定会比较复杂一些。

    2.2 特征映射 mapFeature.m

    对于更好拟合这个问题,我们可以采用增加特征的方法。在已经给出的mapFeature.m这个函数中,将x1和x2的所有多项式项都升幂到了6次。
    在这里插入图片描述
    一共有28项,(1+7)*7/2=28.

    2.3 代价函数和梯度 costFunctionReg.m

    在这里插入图片描述
    这个就是加了正则项的代价函数。
    梯度:
    在这里插入图片描述在这里插入图片描述
    注意这里的theta(0)要分开写。

    2.3.1 使用fminunc函数调参

    老师把代码都写在ex2_reg.m这个函数里面。就是使用fminunc这个函数,并且调用你自己写的costFunctionReg.m就可以了。

    2.4 画出决策边界

    也不用自己动手
    在这里插入图片描述

    2.5 选做练习

    就是改变正则化参数λ的值,看看边界会发生什么变化,我这里就不演示啦。

    总结

    其实我觉得老师布置的题目还是少了一点力度,就是说老师帮我们做的太多啦。但是对于这种要上交评分的作业,可能是要规定一些格式吧,能做到这样子已经很棒啦。
    我也是在上了老师的课之后才真正地了解到一些自己在用的算法到底是什么做到的,总之就是很有意思的东西。
    我的成绩:
    在这里插入图片描述

    展开全文
  • 吴恩达斯坦福机器学习课程作业(matlab完整版),吴恩达斯坦福机器学习课程作业(matlab完整版),亲测亲测
  • 吴恩达的cousera机器学习课程课后编程作业,这门课必须实践才能较好的理解
  • 前面我不小心传错文件了,大家别下载,下这个。对应网易云课堂的课程作业。
  • 压缩包内含吴恩达老师《Machine Learning》课程第九周的编程作业ex8所需完成的三个m文件,解压放进课程作业原始压缩包中即可。压缩包中所有编程作业均为本人独立完成,并尽量使用向量化计算,全部满分通过。
  • 压缩包内含吴恩达老师《Machine Learning》课程第六周的编程作业ex5所需完成的四个m文件,解压放进课程作业原始压缩包中即可。压缩包中所有编程作业均为本人独立完成,并尽量使用向量化计算,全部满分通过。
  • 压缩包内含吴恩达老师《Machine Learning》课程全部的编程作业中需要自己完成的部分,解压放进课程作业原始压缩包中即可。压缩包中所有编程作业均为本人独立完成,并尽量使用向量化计算,全部满分通过。
  • 本资源是吴恩达老师讲授的机器学习网络公开课练习题,共8个练习题,包括原始练习题和作者整理(带答案)的代码。
  • 吴恩达机器学习课程整理笔记+作业源码(matlab、python)
  • 吴恩达机器学习答案

    2019-04-09 17:34:23
    吴恩达机器学习答案代码,亲测好用,自己试过的!这是基于MATLAB的,包括自己测试的结果也在里面,欢迎大家指正!
  • Ng)机器学习作业(吴恩达机器学习作业代码) 希望该存储库可以帮助那些在完成作业时遇到困难的人。 所有代码都是在Jupyter Notebook中用Python编写的。 这是类别。 锻炼 内容 线性回归 逻辑回归 多类逻辑回归 神经...
  • 压缩包内含吴恩达老师《Machine Learning》课程第八周的编程作业ex7所需完成的六个m文件,解压放进课程作业原始压缩包中即可。压缩包中所有编程作业均为本人独立完成,并尽量使用向量化计算,全部满分通过。
  • ex2.m-Octave/MATLAB脚本,该脚本引导您完成ex2 reg.m-Octave/MATLAB脚本,用于ex2data1.txt练习的后面部分- Ex2data1.txt练习的前半部分的训练集- ex2data2.txt练习的后半部分的训练集提交。m-提交脚本,用于将您的...
  • Ng教授在Coursera网站上的在线机器学习课程(MOOC)的R版本作业。 要下载讲座视频,请访问课程网站: 该存储库提供了用于解决R统计软件中分配问题的入门代码; 每个练习文件旁边也提供了完整的作业。 只需按照以下...
  • 吴恩达老师的机器学习课程的习题答案,用matlab实现。
  • 吴恩达机器学习coursera题目+答案,matlab版。感觉还可以,可以跟课程一起学习。
  • matlab吴恩达代码 本仓库用于记录学习机器学习时的一些笔记代码等。 当前内容有: 1.吴恩达的机器学习课程实验代码(matlab实现,更新完毕) ​ 2.林轩田机器学习基石课程编程作业(更新完毕) ​ (1)作业一 Q15...
  • matlab吴恩达代码 Machine-Learning-AndrewNg代码笔记 吴恩达机器学习课程编程作业,python和matlab代码,及笔记 笔记为黄海广博士笔记,原链接为: 欢迎交流。
  • 吴恩达网易云机器学习公开课:https://study.163.com/course/courseMain.htm?courseId=1004570029 课程课后编程答案,使用Matlab编程。吴老师的课程浅显易懂,代码框架已书写完成,主要需要学生自行填写必要的函数体...
  • 压缩包内含吴恩达老师《Machine Learning》课程第二周的编程作业ex1所需完成的四个m文件以及可选择完成的四个m文件。压缩包中所有编程作业均为本人独立完成,并尽量使用向量化计算,全部满分通过。
  • 里面的代码是用matlab实现的。matlab版本是R2018b。代码都是自己运行过的,是可以使用的。里面包括了我的实验报告,每份报告分数基本都在88-92分,包括了实验流程和心得体会,基本也可以满足要求。
  • 压缩包内含吴恩达老师《Machine Learning》课程第七周的编程作业ex6所需完成的四个m文件,解压放进课程作业原始压缩包中即可。压缩包中所有编程作业均为本人独立完成,并尽量使用向量化计算,全部满分通过。
  • 该资源是吴恩达公开课后的8次作业的习题+编程答案,编程答案分为python版本和matlab版本
  • You can also find instructions for installing Octave/MATLAB in the “En- vironment Setup Instructions” of the course website. Files included in this exercise ex1.m - Octave/MATLAB script that steps ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,452
精华内容 980
关键字:

matlab吴恩达机器学习

matlab 订阅