我前面说过,提高记忆的最好方法最好就是做个小测验、作业、实战、review or something。只要你做过以上这些动作,大脑又会有新一轮的总结。
machine-learning-ex1是我的第一次提交程序小作业。由于对每一个问题都深而细地研究,所以做的时间比较长。打开ex1.m我们可以发现各个步骤的作业都封装在主程序ex1.m里面,目的是让大家深入浅出循序渐进地理解每一个步骤每一个公式的含义(吴教授的用心良苦啊)。
作业的第一部分warmUpExercies.m大概就是热个身,这个没什么好说的了。
作业的第二部分是画图,完善plotData,这个plotData的Hint其实给了很大的提示,而且也是课程视频里面讲过实现方法,也没什么好说的了。xlabel和ylabel是对应的x轴y轴显示文字标签。
plot(x, y, 'rx', 'MarkerSize', 10);
xlabel('Population of City in 10,000s');
ylabel('Profit in $10,000s');
第三部分:computeCost。
Hyposthesis = X * theta;
Temp = (Hyposthesis - y).^2;
J = sum(Temp) / (2*m);
用一句话就是
J = sum((X * theta - y).^2) / (2*m)
最后算出来的答案是:54.24
刚开始我用的是for循环慢慢理解,对于新人来说,一开始就要从最基本的for循环求和开始理解,才慢慢地,用一步解决。一步到位虽然简单明了,但是很多新人没搞懂。弯路是最好的捷径。
接着就是gradientDescent求theta最优解。这部分的详细分解我已经在文章说过,也不细细说。最先要从for循环开始,一层一层嵌套,就像剥洋葱一样,到最后理解会非常清晰。答案是-3.6303 1.1664。
最后一部分就是画图,让你可以清晰看见J和梯度算法的可视化