强烈推荐Andrew Ng的机器学习课程
从12.30到1.17修完了Coursera上的Andrew Ng的机器学习课程,计划上又可以划掉一件事了。
课程的主要内容大致如下:
- 监督学习:线性回归、逻辑回归、神经网络、支持向量机
- 非监督学习:K均值、主成分分析、异常检测
- 案例:垃圾邮件
- 特殊领域:推荐系统(协同过滤)、大规模机器学习(map-reduce)
- 方法论:偏差/方差问题、正则化、学习曲线、误差分析、如何收集样本数据、机器学习流水线、上限分析等等
习题主要是两大类:选择题和编程题(matlab),选择题又分为单选和多选,只有答案没有解释,有些题难度还是有的。编程题自认为相对简单,只需了解简单的matlab编程和矩阵知识,上课好好听讲基本上就是满分。我的总成绩为98.4,编程题基本上100,选择题错了两个,想参考的可以戳这里。
课程用我自己的话总结就是:不装逼,说人话,循循善诱,详略得当。
记得Andrew Ng在讲到神经网络的反向传播算法时,花了大量的篇幅来介绍这一算法,尽管如此还是害怕有些学生不会影响自信心,他这样说道:作为多年的从业者,有时候猛然想起这个算法也得想好一会,这个算法不是那么直观。在讲到svm还是哪一课的时候,记不太清了,他又鼓励同学们:原理不懂也没有关系,事实上这些算法的原理直到最近我才搞明白,事实证明不了解算法的原理也能很好的使用它们。这一点比那些一瓶子不满半瓶子晃荡的老师强多了。
抛开老师的谦虚,在初学一样东西时,适当的忽略一些底层细节是一个很重要的学习方法。我发现不少同学包括我自己在学习机器学习的时候遇到一个算法,不由自主的想了解全部的数学细节,不这样心里就不踏实,以至于还没走到机器学习的门槛就已经倒在线性代数、概率论、数值分析的汪洋大海里了,其实这是一个本末倒置的学习方法。这就好比买了一辆汽车,难道你还要去修一门内燃机原理的课程?当然这不是鼓励大家囫囵吞枣,而是让大家抓住重点,不要把面铺的太广,否则收不回来。真正好的方法是学机器学习就把重点放在机器学习上,一些底层细节就当成既有的事实,等到学有余力再重点突破。所以学习的时候一定要控制自己那种无限扣细节的冲动。
另外一个其他课程没有或者很少提到的是这门课程Andrew Ng介绍了很多的机器学习方法论,比如学习曲线、误差分析、流水线、上线分析等等,这才是真正的金玉良言,可遇不可求的。众所周知,象棋的规则很简单,难的是如何开局,如何化解对手的攻势,如何一步一步积累自己的优势达到胜利,这些都是需要在实践中摸索,如果纯靠自己摸索,新手要走不少的弯路,而如果一开始别人把这些告诉你,你就可以事半功倍。
观察课程的主要内容可以看到这门课介绍的算法并不是很全面,比如常见的决策树、随机森林、贝叶斯算法等等都没有,有人可能觉得这是课程的缺点,我倒觉得这反而是优点,有道是一招鲜吃遍天,机器学习的算法是有固定的模式的,比如监督学习,基本上都是提出一个假设函数,然后去拟合现有数据,也就是生成一个代价函数,然后用数学方法找到使代价函数最小的参数,所以学会这些典型的算法再去学其他的算法没什么难度;另一个是影响机器学习性能的关键往往并不是算法本身而是你拥有的数据量、特征的选取、如何进行误差分析、如何进行模型的调优,这一点课程也有论述,我就不班门弄斧了。总之,这是一门我强烈推荐的课程,适合入门者进阶者。