上一篇笔记其实是在看过网易公开课上的课程后写的,程序甚至数据等等都是自己在没有什么资料的情况下编出来的,现在转战coursera.org平台,同样的老师,几乎同样的课程,但毫无疑问coursera上的用户体验好多了,包括一个课程需要的quiz,exercise,wiki甚至一个小型的bbs,上面能发现来自世界各地的与你一起学习的人,建了一个QQ群,就汇集了来自许多地方的中国人,甚至包括来自HK,*,USA,UK的华人,感觉很新鲜。
秉着认真的态度,我有重新学习了看过的课程,许多之前不明白的地方引刃而解,系统地完成了第一个program exercise,感觉很有收获,顾作笔记2.
exercise主要还是对liner regression 的代码化,但代码,怎么说,因为是按照给出的格式写的,所以更加规范化了。
ex1主要是对针对一元一次函数的拟合,主要需要完成的函数包括
plotData(X, y);
computeCost(X, y, theta);
gradientDescent(X, y, theta, alpha, iterations);
完成起来难度不大,但第一次交没过,原因是我自己修改了alpha的值,导致虽然答案正确但是过程变化趋势不正确,后修改过之。后面针对多features的拟合其实和这个可以用同一套代码,就随便贴贴吧。
J =(X*theta-y)’*(X*theta-y)/2/m; 这是computeCost中的主要代码,因为文档建议Octave尽量不要用枚举,随意我采用了矩阵的方式。
theta_temp=theta;
for j=1:size(X,2)
for i=1:m
theta_temp(j)=theta_temp(j)+alpha/m*(y(i)-X(i,:)*theta)*X(i,j);
end
end
theta=theta_temp;
补注:在这之前没看V号课程视频,所以这里还是有些复杂,最后我全部把它矩阵化了,结果一句就足够了:
theta=theta-alpha/m*X’*(X*theta-y);
不得不感叹线性代数的简便性啊
这是gradientDescent中的主要代码部分,因为要simultaneously decrease theta,所以得用临时数组存起来,当然以前也长干这事,并没有什么难度
下面是效果图
最后还实践了Normal Equations,主要就是一个公式的应用
不得不说Normal Equations确实要快很多,但是正如课上讲到的,以后将会有许多机器学习算法不能用到它。个人感觉matlab上的拟合就是用的Normal Equations来实现的。
总的来说,exercise的难度不大,但却是我第一次提交exercise,想在也算熟悉了coursera上的流程了。有些贪多报了三门课,准备以后再学Model Thinking,怕实在吃不消,我会坚持下去吗,当然,我会坚持下去。
本文出自 “DarkScope从这里开始(..” 博客,请务必保留此出处http://darkscope.blog.51cto.com/4254649/989042