“机器学习”是人工智能的一部分,学了一段时间,有过停顿和弯路,最近重头拾起来,感觉比第一遍明白了一些,所以做个记录。
最开始是学习Coursera上Andrew Ng的课程,完成里面的作业遇到不少难题,当时为了赶进度着急学完,遇到难题在网上找了不少答案,现在想起来真是一知半解。
Coursera,包括Udacity,Edx,上面的类似的课程很多,当时的想法是都学一遍,可以更牢固些。后来的结果证明不用学那么多,学了一个就要弄明白。类似的课程也没必要学太多,除非是进阶的。学通一门课程,然后得做多练习,比如Kaggle上的竞赛。现在是个容易焦虑的时代,对于有求知欲望的人,更容易引起“知识焦虑”,但是学了很多,如果不实际应用,这种焦虑不会减轻,还会在在学习 - 焦虑的循环上。
第一次学Andrew Ng的课程的同时,也学了Coursera上的Matlab和Python的课程,讲的都非常好。Coursera上还有一个系列的华盛顿大学的机器学习课程,学了一段时间,没坚持下去,他们讲的是GraphLab,不是开源的,所以应用的可能性也不大。
现在是第二次学Andrew Ng的课程,作业重新自己用Matlab做了一遍,听第二次课,感觉容易了很多,作业也好做了很多。因为学过一遍,不着急往下走,就用Python(numpy)把作业重写一遍,再用scikit-learn重写一遍。用scikit-learn重写的原因是想在学完多变量线性回归后做Kaggle上的House Prices题,里面有三个教程,其中一个用到scikit-learn,所以找个了教程,先学了一遍scikit-learn,再用它完成作业,最后再做Kaggle上的竞赛题目。
知乎上有很多机器学习的指南,好像其中一个提到一个印度人写的,觉得挺实用,里面要学的东西也不是很多,我开始是按这个来的,链接在这儿。scikit-learn有一个视频的教程,youtube上的,看不了,但是其按照其代码可以很容易地学下去。
用Python完成作业,可以重头写,或者把作为的Matlab的作业翻译成Python,这里有个Matlab和Python的函数对照表,很实用。
用numpy时,可能遇到的问题:
写computeCost(X,y,theta)和gradientDescent(X,y,theta,alpha,num_iters)函数时,用到y的计算,要把y reshape一下:y.reshape(m,1),要不然会出现维数不一致的错误。
用sciket时,可以参照其源码06_linear_regression,要把数据文件加一行标题:population,profit。
pd.read_csv这行,要把 index_col=0去掉。
sns.pairplot这行,由于只有一个feature,可以用lmplot实现,更简洁些。
numpy完成作业时,可以得到和matlab同样的结果。sciket时的结果会不同,因为它用到了train和test的split,numpy和matlab没用到,numpy和matlab用的是gradientDescent的循环。