吴恩达机器学习习题ex1解答
原题可以在这里找到,需要用邮箱注册,不需要翻墙
coursera学习网站,类似中国的mooc
简介
这个网站最多只能用来做做题还有看看课程资料了,课程视频是看不了的,估计被墙了……虽然官网有中文,但是所有的课程资料都是英文……
在学习到单变量线性回归方程的时候会有一个编程作业,下载一个zip文件,里面有作业介绍ex1.pdf,还有作业文件,作业包含必做题和选做题,必做题考察基础的工具操作和单变量线性回归方程,选做题涉及特征缩放,多变量线性回归方程,正规化。只要做完必做题就满分了。
至于作业介绍ex1.pdf花了我将近一个小时才看懂操作方式……首先要把文件解压,然后把路径调整到这个文件夹下,我用的是matlab可以通过UI界面进入,命令行的话要通过cd命令跳转过去。
$$
\begin{array}{l|r}
{文件名}&{功能}\\
\hline
{ex1.m}&{必做题的运行脚本}\\
{ex1_multi.m}&{选做题的运行脚本}\\
{submit.m}&{提交的运行脚本}\\
{下面的文件}&{星号是必做题,加号是选做题}\\
\end{array}
$$
必做题
首先先要根据注释的instruction写出必做题中的代码。
第一题,是输出一个5*5的单位矩阵。
1 | A = eye(5) |
第二题,是将数据点显示在图上。
1 | plot(x, y, 'rx', 'MarkerSize', 10); |
2 | % rx表示用红色x来画出数据点,MarkSize设置大小 |
3 | % 如果没有rx的话所有数据点会连一起而不是单独画出 |
4 | xlabel('Population of City in 10,000s'); |
5 | ylabel('Profit in $10,000s'); |
第三题,计算代价函数和梯度下降
代价函数的公式$ \mathtt{J} \left( θ_0,θ_1x \right) = \frac {1}{2m} \sum_{i=1}^m {\left( h_θ \left( x^{i} \right ) -y \right)} ^2 $
1 | J = sum((X * theta - y).^2) / (2*m); |
这边要注意两个东西,一个是theta是行向量,而之前说的$\theta^Tx$是theta是列向量才需要翻转。那么根据矩阵相乘的知识,要么用 theta.X,要么用Xtheta,两者都是为了生成97*1的向量来跟y相减,最后这个平方号要注意是向量内的每一个元素平方,而不是向量乘向量。
梯度下降的公式
$ θ_0 := θ_0 - \alpha \frac{1}{m} \sum_{i=1}^m{\left(h_θ\left(x^{i}\right)-y\right)}^2 $
$ θ_0 := θ_0 - \alpha \frac{1}{m} \sum_{i=1}^m{\left(h_θ\left(x^{i}\right)-y\right)}^2 \dot x^{\left(i\right)}$
1 | theta_s = theta; |
2 | theta_s(1) = theta(1) - alpha / m * sum(X * theta - y); |
3 | theta_s(2) = theta(2) - alpha / m * sum((X * theta - y) .* X(:,2)); |
4 | theta=theta_s; |
注意$\theta_0和\theta_1$是同步更新的,所以设置了一个暂存量theta_s.
第四题是代价函数的可视化,不需要额外填写代码。
提交
在对应的文件完成代码之后,在命令行窗口输入ex1看看是否正确运行,运行的结果可以和ex1.pdf进行比较,若结果正确,则在命令行窗口输入submit提交,输入邮箱和识别码(在coursera的作业界面领取),即可提交并打分,并且将结果上传,凡是写nice work!的都是表示结果正确。