Coursera_Stanford_ML_ex1 作业记录

完成ex1也有一段时间了,看网上并没有类似的作业解答,所以今天就打算新开一个专题,记录一下自己在做作业的过程中遇到的困难,我全程使用MATLAB完成作业,希望也能帮助到学习这门课的同学。

首先让我们看一下作业的要求:

一.打星号的.m文件中,plotData,warmUpExercise基本没有什么难度,现在我把我实现的部分贴出来供大家参考

warmUpExercise:

                 A=eye(5); %Return the 5x5 identity matrix

plotData(plot的句柄表示标记数据点的方式):

                figure; % open a newfigure window

               plot(x, y, 'rx','MarkerSize', 10,'LineWidth', 2);

               xlabel('population');

               ylabel('profit');

实现效果:

      

computCost和gradientDescent目的是使用梯度下降法得到使误差达到最小时的参数

误差以方差来代替:在计算时就可以直接使用矩阵相乘的形式简化计算:

J=(X*theta-y)'*(X*theta-y)/2/m;

参数向着误差减小的方向变化,α之前是减号的原因是在计算导数的时候,如果所处的位置是单调增的,导数大于0,那么误差随着对应参数的增大就有远离最小值得趋势(可能是局部最小值,但是在这一章中,误差函数为凸函数只有一个最小值点不用担心算法陷入到局部最优解):

在计算时依然可以利用矩阵运算简化计算:

theta=theta-alpha/size(X,1)*X'*(X*theta-y);

注意:这两行是写在一个for内的,而且每次迭代不能计算一个赋一个值,会导致计算其他参数时赋值参数位置的改变,无法得到最优解。

   拟合曲线(误差32.0727):

参数选择:

二.附加题中将一元的函数换成二元的函数,最高次仍为一次,程序基本一致。

误差随迭代次数的变化:

梯度下降与正规矩阵法得出结果的比较,可以看出在最值点的误差较大。

总结一下,ex1基本没有什么难度,主要是练习使用矩阵运算,在MATLAB中尽量不要使用for会降低运算速度,能用矩阵运算就用矩阵运算。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值