机器学习之路
自从答应简二毛博士将自己的机器学习历程和心得分享给大家至今,转眼间半年已经过去了,感谢简博士分享和开源精神的鼓舞,这也正是本系列关于机器学习介绍博客的动力来源。
之前有些网友,师弟们问我,学习机器学习怎么入手,从看什么书开始。这里说一下个人见解:
如果你只愿意看一本书,那么推荐Bishop的PRML,全名Pattern Recognition and Machine Learning. 这本书是机器学习的圣经之作,尤其对于贝叶斯方法,介绍非常完善。该书也是众多高校机器学习研究生课程的教科书,如Deep Learning的开山鼻祖Hilton在多伦多大学教授机器学习课程(CSC2515)时也选择了这本书。该书电子版在Bishop个人网页提供直接下载。不过提前说明一下,这本书如果看了半年,看完三遍才能理解透,也属于正常。第一遍看不懂很正常,所以需要持之以恒。
http://research.microsoft.com/en-us/um/people/cmbishop/prml/
第二本书就是ESL(The Elements of Statistical Learning)。中文翻译叫统计学习基础,其实这个翻译不够准确,Statistical Learning并非statistics,叫机器学习基础更加准确。该书数学推导,理论系统很完备,结合后面的exercise用R语言自己联系一下,对于理解机器学习的基本方法很有帮助,如:Logistic,Ridge regression等。这本书同样可以在作者网站上直接下载到电子版。
http://statweb.stanford.edu/~tibs/ElemStatLearn/
有了理论基础,再结合一些教授的课程进行学习,效果更好。目前很流行的斯坦福大学机器学习公开课,在网易公开课中甚至都有中文版字幕出来,是非常不错的入门教程。不过个人更喜欢Hilton的机器学习课程。因为你看了上述两本书之后,基础知识基本都OK了,再看Stanford公开课还是基础。而Hilton的课程更加贴近目前的学术研究热点,比如对于Neural network,Deep Belief Nets的介绍,他的课程中包括了最早期的RBM的实现 http://www.cs.toronto.edu/~hinton/MatlabForSciencePaper.html 。值得一看。他老人家的课程地址: http://www.cs.toronto.edu/~hinton/csc2515/lectures.html 特别推荐做一做其中的assignments: http://www.cs.toronto.edu/~hinton/csc2515/assignments.html
下面说一下数据集,孔子云“学而时习之”,光说不练是学习的大忌,练习就需要数据集,配合上述课程的数据集是mnist data, http://yann.lecun.com/exdb/mnist/ 这个链接中也可以看到众多大牛在该数据集上的突破。
本系列机器学习之路的内容主要参考来源于:PRML,ESL和Hilton CSC2515。
关于软件,是使用Matlab还是R。很难说哪个软件好,哪个不好,只有适不适合自己。R更适合做学术研究,有众多的包和data可以使用,方便快速地实现自己的算法原型。不管是在内置函数的数量还是质量上,尤其处理大量数据时R的确要强于Matlab。同时R还有CRAN,里面基本可以找到绝大多数我们需要的算法,介绍,教程等。
而Matlab强项在于矩阵运算,Matlab也有很多工具箱,里面的算法相对很成熟,Matlab的图形绘图性能也强于R。
二者的区别其实在于商业软件和自由软件的区别。Matlab庞大,成熟,美观,官方文档齐全,当然还有价格不菲。R免费,论坛强大,算法包更新快,紧贴研究的最前沿等等。当然二者可以相互转换,我记得Matlab有执行R语言程序的工具箱,同样R也有运行Matlab程序的包。
总结就是工程人员,更适合Matlab,学术研究还是用R更自由。详细的对比
http://www.math.umaine.edu/~hiebeler/comp/matlabR.pdf
机器学习方法
谈到机器学习,一堆概念和方法很容易混淆,比如:VC dimension, least squares, maximum likelihood maximum conditional likelihood,maximum penalized (conditional) likelihood,back propagation,Recurrent networks,Newton and Quasi-Newton Methods,Conjugate Gradients,Constrained Optimization,Mixtures of Experts,Hierarchical mixtures of experts EM Algorithm,PCA, Factor Analysis , Independent Components Analysis,Deep Belief Nets,Restricted Boltzmann Machines,Markov Chain Monte Carlo,Gibbs Sampling,Kernel Methods,kernel density,Association Rules Apriori,Sparse Kernel Machines,Graphical Models
Approximate Inference 等等。
在分类这些方法之前,首先描述一下几个概念:
- 回归和分类(Regression and Classification), 给定一组输入X和输出Y的数据集S,我们通过回归或者分类方法来拟合数据集S,得到拟合模型F, 当有新的数据输入Xi时,通过拟合模型F来预测输出Yi的值。
- 求解方法:在上述拟合模型F的过程中,我们怎么知道什么样的模型是好的,什么样的模型是不好的呢,那么就需要评价函数,有了评价函数之后,我们就需要对该评价函数进行参数求解,使得我们的误差最小,注意,这里的误差最小是针对训练集的数据。
- 校验方法:通过上述求解方法得到了我们的求解出的拟合模型F,那么在真实数据中,是否也能够实现误差最小化呢,这里的误差最小是针对真实的测试数据,这个时候我们就需要使用校验方法。
- 有些数据集,我们预先知道,或者预先假设好它的分布模型,再进行模型拟合,这个过程叫做有监督的学习(或者针对给定的输入,我们又给定的输出与之相对应)。比如,中国男生身高分布,我们预先设定好其为高斯分布,再进行参数拟合,或者对不同收入阶层的人进行购买力的统计和预测,我们预先假设其满足线性可分,采用线性分类方法,这些都属于有监督的学习。无监督的学习是指给定一组输入,我们没有预先设定的输出和预先设定的模型分布。根据输入变量内在关系进行学习的方法。典型的就是聚类,统计出一组用户的购买物品参数,根据这些参数对用户进行聚类分析,得出其属于重度购买用户还是轻度用户等等。还有如关联规则学习中著名的啤酒与尿布apriori 算法都属于非监督学习算法。
- 数据加工方法:如今一个炒作非常火爆的一个概念叫做大数据,凡是和统计学沾边的都自称做大数据的,一个很小的互联网网址做后来数据处理的,也自称做大数据的,如今的社会风气实在让人无语,忍不住吐槽一下。回到正题,当数据量很大,部分数据不够完整,数据维数很高的时候,我们就需要借助于强有力的数据加工方法,其中包括提取有效的主成分,提取相似度高的输入因子等等。
- 数据采集方法Sampling:现代计算机的方法,使得产生随机数几乎不需要成本,这就导致了Sampling方法的重大突破。当我们一直模型分布的时候,进行数据采集很方便,预先设定好模型,进行计算机随机数采集跳转获得相应的分布数据即可。但是当模型很复杂,或者我们根本不知道是什么模型的时候,很难适应计算机预先设定好模型进行采集,那么,我们如何获得和真实数据项一致的分布数据进行学习计算呢,这个时候就需要我们的Sampling方法派上用场了。
有了上述基本概念之后,我们就对一堆机器学习的概念机械归纳和分类:
- 回归和分类模型有:Liner regression,Logistic regression, Ridge regression, Lasso, Linear Discriminant Analysis,Basis Expansions,Smoothing Splines, Kernel Methods, Additive Models, Trees,Nearest-Neighbors Methods, SVM 等等,这些只是大致的方法,里面还包括了各种细致的算法,如Trees中包括 Classification trees, Random Forest 等等
- 求解方法:最常见的Least Square,在这上面依次有maximum likelihood,EM, Gradient Descent等。其中Gradient Descent又包括Classic Newton methods, Quasi-Newton Methods等等。
- 校验方法最常见是交叉验证(Cross Validation),其中包括留一验证(LOOCV),K-Fold CV, Boostrap 等等。
- 无监督的学习方法主要有:关联规则,聚类,自组网,主成分分析,因子分析,独立成分分析,已经如今很热门的Page Rank, deep Learning都属于无监督学习的一种。大多是的分类和回归模型都是有监督的学习或者半监督的学习。
- 数据加工的方法主要有: 如收缩法的Ridge regression , Lasso, 降维法的PCA,ICA特征提取的因子分析等
- 数据采样方法有:Bagging,Boosting,MCMC(Markov Chain Monte Carlo), Gibbs Sampling等
- 神经网络,之所以把神经网络单独分类主要是因为神经网络包罗万象,既可以属于有监督学习,有可以属于无监督学习,既可以是分类,也可以是回归,很难将其分在哪一类,所以干脆以后单独介绍。
声明
本系列介绍系本人的学习体会,难免有不足和错误,还望广大网友指正。比如也有的地方将Boosting总结为基于树的分类模型,只是个人觉得Boosting的思想更像是Sampling,所以将其归纳在采样方法中。开篇介绍到此,之后有空本系列会陆续更新,力求简要介绍各种常见的学习方法和学习策略。也欢迎广大网友共同探讨。
本系列参考:
http://research.microsoft.com/en-us/um/people/cmbishop/prml/
http://statweb.stanford.edu/~tibs/ElemStatLearn/
http://www.cs.toronto.edu/~hinton/csc2515/lectures.html