1 简单的Octave / MATLAB功能

ex1.m的第一部分为Octave/MATLAB作业提交练习。 在文件warmUpExercise.m中,找到Octave / MATLAB函数的提纲处。 填写下面的代码,修改为返回5 x 5的单位矩阵:

A = eye(5,5)

完成后,运行ex1.m(假设命令窗口位于正确的目录中,在Octave / MATLAB命令窗口输入“ ex1”),将看到类似于以下内容的输出:

1.1 提交答案

完成练习的一部分后,在Octave / MATLAB命令行中通过输入 Submit() 来提交作业答案。 提交脚本将提示您输入登录电子邮件和提交令牌(在COURSERA网站查看),并询问是否提交的文件。

现在,提交解决方案。

可以多次提交解决方案,只会考虑最高分。

2 单变量线性回归

在本练习的这一部分中,将使用一个变量实现线性回归,以预测食品卡车的利润。 假设您是一家餐饮连锁店的CEO,并且正在考虑将不同的城市开设新的门店。 该连锁店已经在各个城市开了卡车,您可以获得城市的利润和人口数据。您想使用此数据来帮助您选择要扩展到下一个城市。

文件 ex1data1.txt 包含线性回归问题的数据集。 第一列是城市的人口,第二列是该城市的食物卡车的利润。 利润的负值表示损失。已经设置了ex1.m脚本来为您加载此数据。

2.1 绘制数据

在开始任何任务之前,通过可视化了解数据通常很有用,对于此数据集,您可以使用散点图来可视化数据,因为它仅具有两个要绘制的属性(利润和总体)。(您在现实生活中会遇到的许多其他问题是多维的,无法在二维绘图中绘制。)

在 ex1.m 中,数据集从数据文件加载到变量X和y中:

data = load('ex1data1.txt');  %加载ex1data1.txt数据
X = data(:, 1); y = data(:, 2);  %取第一列的全部数据为X,第二列为y
m = length(y);   %m等于训练样本个数

接下来,脚本调用 plotData 函数创建数据的散点图。 您的工作是完成plotData.m绘制图; 在以下代码中修改文件并填充文件:

plot(x, y, 'rx', 'MarkerSize', 10);
ylabel('Profit in $10,000s');       %设定y轴标题
xlabel('Population of City in 10,000s');   %设定x轴标题

现在,当您继续运行ex1.m时,我们的最终结果应下图所示,带有相同的红色“ x”标记和轴标签。

要了解有关plot命令的更多信息,可以在Octave / MATLAB命令提示符下键入help plot或在线搜索绘图文件。 (要将标记更改为红色的“ x”,我们将选项“ rx”与plot命令一起使用,即plot(..,[此处为您的选项],..,“ rx”);)

2.2 梯度下降

在这一部分中,您将使用梯度下降法将线性回归参数θ拟合到我们的数据集中。

2.2.1 更新公式

线性回归的目的是最小化成本函数:

由线性模型给出

回想一下,模型的参数是

值。 这些是您将调整以最小化成本
的值。 一种方法是使用批处理梯度下降算法。 在批次梯度下降中,每次迭代都会执行更新。

随着梯度下降的每一步,您的参数

接近最佳值,从而实现最低成本

实施注意:我们将每个示例作为一行存储在Octave / MATLAB的X矩阵中。 为了考虑截距项(

),我们在 X 上添加了第一列并将其设置为1。这使我们可以将
视为另一个“特征”。

2.2.2 实施

在ex1.m中,我们已经设置了用于线性回归的数据。 在接下来的几行中,我们向数据添加另一个维,以适应θ0截距项。 我们还将初始参数初始化为0,将学习率alpha初始化为0.01。

X = [ones(m, 1), data(:,1)]; % 在x中添加一列
theta = zeros(2, 1); % 初始化拟合参数
iterations = 1500;
alpha = 0.01;

2.2.3 计算成本函数

当执行梯度下降以最小化成本函数时,通过计算成本来监控收敛是有帮助的。 在本节中,将实现一个计算

的函数,以便可以检查梯度下降实现的收敛性。

任务是完成文件 computeCost.m 中的代码,该文件是一个计算

的函数。 在执行此操作时,请记住:变量X和y不是标量值,而是其行代表训练集中的示例的矩阵。

完成后,下一步 ex1.m 将使用初始化为零的 θ 运行一次computeCost,然后您应该会看到代价函数值为32.07。

现在,您应该提交解决方案。

function J = computeCost(X, y, theta)
%COMPUTECOST Compute cost for linear regression
%   J = COMPUTECOST(X, y, theta) computes the cost of using theta as the
%   parameter for linear regression to fit the data points in X and y% Initialize some useful values
m = length(y); % number of training examples% You need to return the following variables correctly
J = 0;% ====================== YOUR CODE HERE ======================
% Instructions: Compute the cost of a particular choice of theta
%               You should set J to the cost.J = (1/(2*m)) *((X * theta-y)'*(X*theta-y));% ============================================================
end

2.2.4 梯度下降

接下来将在文件 gradientDescent.m 中实现梯度下降。已经编写了循环结构,只需要在每次迭代中为θ提供更新。

在编程时,请确保了解要优化的内容和更新的内容。记住成本

由向量 θ 而不是 X 和 y 来参数化。通过改变θ的值而不是通过改变X或y来最小化
的值,如果不确定,请参考本讲义中的方程式和视频讲座。

验证梯度下降是否正常工作的一种好方法是查看

的值,并检查其每一步是否在小,

gradientDescent.m 的起始代码在每次迭代时都调用 computeCost 并计算代价函数值。假设您正确实现了梯度下降和 computeCost,则

的值将永远不会增加,并且应在算法结束时收敛为稳定值。

完成后,ex1.m将使用最终参数来绘制线性拟合。结果应类似于下图:

最终的θ值也将用于预测35,000和70,000人区域的利润。请注意,ex1.m中的以下几行使用矩阵乘法而不是显式求和或循环来计算预测。这是Octave / MATLAB中代码向量化的示例。

现在,提交答案

predict1 = [1, 3.5] * theta;
predict2 = [1, 7] * theta;
function [theta, J_history] = gradientDescent(X, y, theta, alpha, num_iters)
%GRADIENTDESCENT Performs gradient descent to learn theta
%   theta = GRADIENTDESCENT(X, y, theta, alpha, num_iters) updates theta by
%   taking num_iters gradient steps with learning rate alpha% Initialize some useful values
m = length(y); % number of training examples
J_history = zeros(num_iters, 1);for iter = 1:num_iters% ====================== YOUR CODE HERE ==================% Instructions: Perform a single gradient step on the parameter vector%               theta. %% Hint: While debugging, it can be useful to print out the values%       of the cost function (computeCost) and gradient here.%theta = theta - (alpha/m) * (X'*(X*theta-y));% ========================================================% Save the cost J in every iteration    J_history(iter) = computeCost(X, y, theta);
end
end

2.4 可视化

为了更好地理解成本函数

,现在将在
值的二维图中。 此部分无需编写任何新代码,应该了解已经编写的代码如何创建这些图像。

在 ex1.m 的下一步中,设置了代码,以使用您编写的computeCost函数在值的网格上计算

执行完这些行后,将拥有

值的二维数组。 然后,脚本ex1.m将使用这些值通过surf和轮廓命令生成
的曲面和轮廓图。 这些图应类似于下图:

这些图的目的是展示

如何随
的变化而变化。 成本函数
是碗形的,并且是全局最小值。 (在轮廓图中比在3D表面图中更容易看到)。 该最小值是
的最佳点,并且梯度下降的每一步都靠近该点。

如有问题,欢迎私信交流。

matlab 散点图 线性回归图_吴恩达机器学习编程作业ex1-Matlab版相关推荐

  1. 吴恩达机器学习视频作业(Matlab实现)

    吴恩达机器学习视频的课后作业,使用matlab实现 ex1  线性回归 1.热身 建立一个5*5矩阵 A=eye(5); 2.单变量的线性回归 需要根据城市人口数量,预测开小吃店的利润 数据在ex1d ...

  2. 吴恩达机器学习课后作业ex1(python实现)

    作业介绍 吴恩达老师的作业资源可以在github或者网上找到 . ex1主要是对线性回归的一些复习和梯度下降.损失函数等的具体代码实现. pdf文件是对作业的说明.文件夹则是作业数据的各种格式,pyt ...

  3. 吴恩达机器学习编程题ex1上 单变量线性回归: (python版含题目要求、代码、注解)

    不得不说安卓老师是真的用心良苦,给我们把编程题弄成了填空题,但是很可惜原版使用的是Octave和MATLAB所以作为初学者我就直接当编程题用python去做了 问题:让你绘制一个5阶单位阵 答案:   ...

  4. Python学习--Machine-Learning 吴恩达机器学习编程作业 (第六周)

    Machine-Learning 编程作业 Programming Exercise 6:Support Vector Machines SVM的简单应用 part1 示例文件1使用线性核函数 par ...

  5. 7. 吴恩达机器学习课程-作业7-Kmeans and PCA

    fork了别人的项目,自己重新填写,我的代码如下 https://gitee.com/fakerlove/machine-learning/tree/master/code 代码原链接 文章目录 7. ...

  6. 1. 吴恩达机器学习课程-作业1-线性回归

    fork了别人的项目,自己重新填写,我的代码如下 https://gitee.com/fakerlove/machine-learning/tree/master/code 代码原链接 文章目录 1. ...

  7. 8. 吴恩达机器学习课程-作业8-异常检测和推荐系统

    fork了别人的项目,自己重新填写,我的代码如下 https://gitee.com/fakerlove/machine-learning/tree/master/code 代码原链接 文章目录 8. ...

  8. 5. 吴恩达机器学习课程-作业5-偏差和方差

    fork了别人的项目,自己重新填写,我的代码如下 https://gitee.com/fakerlove/machine-learning/tree/master/code 代码原链接 文章目录 5. ...

  9. 2.吴恩达机器学习课程-作业2-逻辑回归

    fork了别人的项目,自己重新填写,我的代码如下 https://gitee.com/fakerlove/machine-learning/tree/master/code 代码原链接 文章目录 2. ...

最新文章

  1. 接口优化:Redis预减库存,减少对数据库访问方案
  2. (Oracle)PL SQL的相关知识与实例
  3. UIActionSheet
  4. 比特币钱包私钥_如何通过私钥创建比特币钱包地址
  5. 科学与技术计算机图片解释,【图片】计算机-科普—都是从网上找的【计算机科学与技术吧】_百度贴吧...
  6. SpringCloud学习笔记001-SpringCloud_001_SpringCloud简介_单体架构_微服务架构_服务注册与发现_微服务调用关系
  7. 极通ewebs应用虚拟化系统v6.2完美上市
  8. 萌新的Python练习菜鸟100例(十二)判断101-200之间有多少个素数,并输出所有素数
  9. 80多个Ajax解决方案
  10. 贝叶斯统计(Bayesian statistics) vs 频率统计(Frequentist statistics):marginal likelihood(边缘似然)
  11. 官网下载storage manager方法
  12. CCSK云计算安全认证
  13. hashcat简单使用
  14. 在 Linux 中如何删除分区
  15. 世界精神卫生日:不断变化的世界的应用程序
  16. linux搭建pptp服务器
  17. panic: interface conversion: interface {} is nil, not chan *sarama.ProducerError
  18. 对越Altium Designer 17.0.9电路设计软件
  19. python切片是什么意思_python切片的理解
  20. 冰点文库----拒绝百度文库会员,高速下载文章

热门文章

  1. linux系统修改为静态IP地址
  2. Pandas知识点-统计运算函数
  3. Extjs可视化设计视频教程一
  4. ASP.NET中Request.ApplicationPath、Request.FilePath、Request.Path、.Request.MapPath、Server.MapPath的区别
  5. C# Regex 深入正则表达式
  6. javascript框架比较(二)
  7. ndarray的转置(numpy.transpose()与A.T命令对比详解)
  8. leetcode —— 1013. 将数组分成和相等的三个部分
  9. 吴恩达深度学习 —— 4.1 深层神经网络
  10. TensorFlow第九步CNN BP算法学习