coursera Machine Learning ex1

作业需要的Octave下载地址为:Octave-3.2.4_i686-pc-ming32.gcc-4.4.0_setup.exe

安装时唯一注意的地方就是在

这个界面的时候只需要勾选image就可以了。

安装完毕后,打开之,然后使用cd命令跳转至我们解压的作业文件夹。


1.Simple octave function

    先来个热身...只需要在warmUpExercise.m中添加一行A=eye(5);即可.


2.Linear regression with one variable

    进入正题!按照pdf的指导,我们需要先将数据放到图中,然后再看到后面,哎呀,教授连这部分的代码都写好了,只需要我们复制粘贴到plotData.m中就可以了……

    之后pdf又重新梳理了一下视频中所学的几个公式,最后终于需要我们自己动手了!我们需要修改computeCost.m文件,以完成代价函数J(θ)的实现。增加的代码如下:

Hx = X * theta - y;
J = sum(sum(Hx.^2,1)) ./(2*m);
    这个完全难不倒我们。完成了代价函数的实现后,接下来我们需要实现梯度下降法,打开gradientDescent.m文件,增加以下代码:

Hx = X * theta - y;
theta = theta - ((Hx.*(alpha/m))' * X)';
    其实这2行代码一点也不难,唯一稍微有些搞的地方就是theta,X,y都是矩阵,计算的时候注意矩阵相乘时候行数和列数的对应即可。

    后面就是运算结果的可视化显示,无需我们写代码,不过看着很酷炫的样子……


3.Linear regression with multiple variables

    这部分虽然是附加内容,但是表示一次作业居然只写了4行代码,这简直说不过去么,所以就把这部分也做了。

    首先是数据的规范化,在featureNormalize.m中添加如下代码:

for iter = 1 : size(X, 2)
	mu(iter) = mean(X(:, iter));
	sigma(iter) = std(X(:,iter));
	X_norm(:,iter) = (X_norm(:,iter) .- mu(iter))./sigma(iter);
end
    其实一开始我是直接就计算了mu(1),mu(2)以及sigma(1),sigma(2)的,然后第一次提交的时候惨遭0分……给出的错误提醒是该函数应该能够对所有的矩阵都能进行数据规范化的处理,一看到这个我就明白了,我一开始的处理是在已知只需要计算2个属性的均值和标准差的基础上进行的,如果输入的矩阵的列数不为2就会出错!这次的错误也是提醒了需要注意 程序的一般性,最好不要让程序只能够正确处理一些特定的数据

   然后是代价函数和梯度下降,这两部分的代码直接可以套用单变量时的代码,所以不再贴出来了。

   之后需要对学习率进行选择,在多次的尝试之后,发现只需要在ex1_multi中把alpha设置为0.1,num_iter设置为50即可达到pdf中图片一样的效果。

alpha = 0.1;
num_iters = 50;
   另外需要修改的就是估计一下1650㎡,3间卧室的房子的价格,代码如下:

price = theta(1)+(1650-mu(1))/sigma(1)*theta(2)+(3-mu(2))/sigma(2)*theta(3);
   最后是Normal Equations,其实这部分的话只需要把公式用octave的语言重写一遍即可。代码如下:

theta = pinv(X'*X)*X'*y;
   同样的,需要用该方法进行1650㎡,3间卧室的房子的价格的估计:

price = theta(1)+1650*theta(2)+3*theta(3);

总结:

   第一次作业还是比较简单的,很多时候只需要把原来的数学公式用octave语言重写一遍即可,不过感觉通过实际动手操作下,自己对于单变量和多变量的线性回归的理解更加的深入了。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值