Bootstrap

matlab length_吴恩达机器学习编程作业ex1-Matlab版

a8fb5a6f6229280fcc4aa4f931d24113.png

1 简单的Octave / MATLAB功能

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

A 

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

5ffd551540dd40ee06422c0a51a86354.png

1.1 提交答案

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

现在,提交解决方案。

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

2 单变量线性回归

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

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

2.1 绘制数据

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

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

data 

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

plot

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

e6d855bc077ed62741314144a5327194.png

要了解有关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 

2.2.3 计算成本函数

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

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

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

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

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

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

function

2.2.4 梯度下降

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

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

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

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

的值,并检查其每一步是否在小,
gradientDescent.m 的起始代码在每次迭代时都调用 computeCost 并计算代价函数值。假设您正确实现了梯度下降和 computeCost,则
的值将永远不会增加,并且应在算法结束时收敛为稳定值。

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

6cf9dfaa52386857c5c712169304a760.png

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

现在,提交答案

predict1 

2.4 可视化

为了更好地理解成本函数

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

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

执行完这些行后,将拥有

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

5ae3fc915d260a2fa9e4b2ff8a129151.png

758efd75f7fc5fb9759a0929b540d19d.png

这些图的目的是展示

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

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

;