机器学习漫游

   最近的十年机器学习很是火热,不过从其历程来看,机器学习的历史并不短暂~从早期的感知机到八十年代火热的神经网络,再到九十年代被提出的机器学习经典算法集成学习和支持向量机。不过最近的十年可谓赶上了机器学习发展的黄金年代,即软、硬件计算条件大幅提高,尤其是现在数据量的爆发式增长让机器拥能够进行充分“学习”的资本,另一方面现在开源项目越来越多,即便一些算法的实现很复杂,小白们只需要调几个接口也能完成对海量数据的挖掘工作;早这个年代里,不同的人充斥着不同的野心,计算机科学家仍在探索人工智能的奥义,资本、媒体都在热炒机器学习概念,大数据、AI俨然成为宠儿,各行程序员也在茶余饭后多了很多谈资,似乎这也成为他们各种“炫技”的资本。

       盛名之下,其实难副,看机器学习、人工智能的发展还处在浅层,算法应用的场景也十分有限,现在火热的深度学习从本质来说并没有十分重大的理论创新,主要还是因为赶上了硬件、数据量的提升。不管怎么样,长路漫漫,一切都需要慢慢来。现在从高校进入企业的博士、教授也越来越多,不仅钱给的足,硬件条件好,又能实现自己的梦想,何乐而不为呢。不过这样一来,有多少人真是潜心在学术界有所突破呢?不过话又说回来了,毕竟像机器学习、模式识别这样的研究生课程在国内毕竟发展时间短,除了一些名校,其他学校开设这些课程的少之又少,让一些计算机学科的教授去教授统计、概率还有一些复杂的优化算法这样的课程,想都不敢想~~~~

            

        不过现在来看国内的大环境在慢慢变好,很多老师不仅自己的积累沉淀很深,也很乐意分享,特别是,我还记得去年在亚马逊买了一本南大周老师的<<机器学习>>,到手之后真的超出了预期,上面的算法介绍的比较系统,而且比较新,后面给出的附录也适合非科班同学看懂~更难得是这是一本中文的可以当成教材的书~而且从写的内容来看,真的很谦虚、严谨,总之比较推荐入门的同学看,因为除了之前一直被广为人知的还是NG的斯坦福大学Machine Learning公开课,现在终于有本好的中文图书了。
 前面似乎有些偏题了:)初衷只是想写一个机器学习系列笔记的开篇,算是对自己的一个督促吧,现在很多时候感觉脑子不动真的是要上锈了~好了不多说了,下面进入正题吧~


 1.基本概念    

          机器学习到底是什么?Wiki上有Tom M. Mitchell这样一段定义:  

        "A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P if its performance at tasks in T, as measured by P, improves with experience E."

         我比较喜欢这样对机器学习进行定义:

        “设计模型,并从已观测的数据中学习出模型参数,然后通过模型对未知进行分预测 。

         一个典型的机器学习系统包含输入和输出空间,分别对应输入和输出所有可能取值的集合。输入值,简称样本,描述了样本不同特征或者属性的取值,它可以是一个向量,矩阵,张量或者其他更为复杂的数学形式;比如:

               x=\left ( x^{1},x^{2},...x^{n}\right )\

输出值一般是离散或者连续的值,如果是离散的,对应于分类问题,此时描述了样本的类别标签,如果是连续的则对应于回归问题,描述了具体的输出值,输出值通常可以用y\表示。机器学习系统的目标在于利用已知数据信息,设计“合理的”函数映射,在给定新的未知数据时,使得输出值比较符合我们的预期:

          F=\left \{ f|Y=f_{\theta }(X),\theta \in R^{n} \right \}\

大写的X\Y\分别对应于某个输入或者输出的集合。根据已给出数据的不同,可以划分不同的场景:

         1)如果给出的样本不包含对应的y\,此时归为无监督学习问题,如聚类分析、主成分分析等;

         2)如果给出的样本包含所有对应的y\,此时归为有监督学习问题;如回归分析,支持向量机等;

         3)介于1)和2)之间,既给出的样本只包含部分对应的y\,此时归为半监督的问题,如协同训练等,这一类问题比较复杂,很多有监督或者无监督学习的算法通过构造可以演变成半监督学习问题。

         有了样本之后我们需要利用这些样本,即通过这些已经观测得到的数据对模型参数进行训练,这个过程也就是“学习”或者“训练”,然后通过学习的模型对未知数据进行预测的过程可以称之为“预测”,预测的目的在于检验学习得到模型的好坏。然而一个机器学习系统的好坏不仅和模型设计有关,而且和数据的特点有很大关系,“No free lunch”告诉我们,一个模型的设计必然会带来某些方面的代价或者损失,因此必须综合数据的特点、算法模型、开销等等各个方面来设计,比如在某些情况下样本规模大小和数据的分布完全不知道,倘若在设计模型的时候过于追求经度,致使模型对训练样本的预测效果很好,但是在预测新的未知数据时效果很差,也就是我们常说的“过拟合”问题。

         举一个很直观的例子,小明学习的基础并不是很好,在学习了一个新的知识点之后做了很多习题,这些习题套路固定,题型类似,然后需要进行测试,如果测验用的题目和题型与练习的题目变化不大,那么小明在考试中很有可能取得很好的成绩,然而这种测试获得的成绩“掩盖”了背后的假象,一旦出题老师换一个全新的套路,小明的成绩很有可能就炸了。过拟合问题是机器学习长期需要面对的挑战之一,而现实中有很多情况掩盖了过拟合带来的问题,其中之一便是数据量,比如小明如果平时做的习题足够足够多,那么还是很有可能应付测验的。机器学习尝试从模型而不是数据方面着手解决此问题,因此怎样合理地控制模型,使之避免过拟合呢?

2.策略

         在监督学习中,我们需要设计一定的标准来保证学习的好坏,显而易见的是,我们可以使用一种叫做“损失函数”的东东来衡量结果,损失函数可以解释为“衡量预测值和实际值之间的一致性”。损失函数可以使用L\left ( Y,f(X)) \right )\来表示,很容易想到的一种关于L\的表示是使用衡量预测值和实际值之间的偏差,为了保证偏差总是大于0的,可以用L\left ( Y,f(X)) \right )=\left ( Y-f(x) \right )^{^{2}}\来表示,还有的模型可能会使用偏差的绝对值之和、0-1值或者其他的方式定义损失函数。实际上如偏差平方和形式的损失函数是基于最小二乘拟合的一种应用,基于极大似然估计可以得到,在后面博客中写到线性回归的时候提到~

如果给定训练集合,也就是包含多个样本的数据集,模型关于样本的平均损失可以称之为经验损失或者经验风险,顾名思义,也就是根据已给出的数据经验式地衡量模型的好坏。比如,对于训练集

           \left \{ (x_{1},y_{1}),(x_{2},y_{2},...,(x_{m},y_{m}))\right \}\

对应的经验损失可以定义为:

          R_{emp}(f)=\frac{1}{n}\sum _{i=1}^{n}L(y_i,f(x_i))\

直观地来说,如果需要机器学习的预测效果好,要求经验损失最小,也就是我们常说的经验风险最小化(Empirical Risk Minimization, ERM),基于此策略,可以考虑如下的经验风险最小化最优化模型:

\mathrm{min} \frac{1}{n}\sum _{i=1}^{n}L(y_i,f(x_i))\

在样本数据量很大的情况下ERM往往能获得很好的预测效果,但是正如前面提到的,一旦数据规模较小,会出现“过拟合”的情况。过拟合是很多机器学习问题都会面对的一大挑战,很多方法用来避免出现过拟合。其中一个常见的做法是对模型的复杂程度进行约束,也就是添加正则化项(regularizer)或惩罚项(penalty)直观上来说模型越复杂,越难以模拟真实场景。翻看很多paper,不管是大牛的也好,灌水的也好,限制模型复杂度作为惩罚项已经是一件司空见惯的事情了~毕竟惩罚项很容易对模型进行解释了,尽管有时候随意添加惩罚项的效果并不怎么好... 这种约束模型复杂程度的做法叫做“结构风险最小化”,意在ERM的基础上限制模型复杂度:

               R_{srm}(f)=\frac{1}{n}\sum _{i=1}^{n}L(y_i,f(x_i))+\lambda J(f)\

      上式中J(f)\即模型复杂度项,系数\lambda\为ERM和模型复杂惩罚之间的平衡因子~

3.模型评估

      前面提到ERM在某些情况下(如小样本)会出现过拟合的情况,而正则化则能够从某些方面改善此问题。下面的图示给出了一个示例。用小圈圈表示二维平面中的样本,其中红色圈圈表示训练样本,绿色圈圈表示测试样本,然后我分别用不同的多项式曲线去你拟合这些样本,可以看出第一幅图中的直线并没有准确的判断出一些点的位置,第二幅图中的曲线则较好地反映出了样本点的位置,相比较而言,第三幅图中的曲线虽然也能反映出绝大数点的位置,不过存在很大的缺陷,也就是曲线过于复杂,因此虽然在给定的样本集上能有很好地效果,但是在真实的环境下会遭遇严重的过拟合问题,比如横坐标9到10的这些点与预期值差别巨大。图一和图三分别对应机器学习问题中的欠拟合和过拟合问题,在机器学习的模型评估环节当中我们不仅需要模型有精确地预测效果,还需要很强的稳定性。通常的一个做法是我们需要对样本集合做交叉验证,多次选取不同或者不同规模的训练集合进行评估。另外,不同的模型需要考虑的侧重点不一样,在二分类问题中使用召回率、错误接受率、正类样本准确率、识别精度、F-measure等指标来衡量分类效果。

召回率(Recall Rate):其定义为\frac{TP}{TP+FN}\。召回率是一种重要的分类器性能衡量指标,因为在实际应用中需要重点考虑的是正类的数据,其反映了被正确判定的正类样本占总的正类样本的比重,即衡量着正类样本检测的全面程度。

错误接受率(False positive rate):其定义为\frac{FP}{FP+TN}\。 其反映了分类结果中负类数据被预测为正类数据的比例。

正类检测准确率(Precision):其定义为\frac{TP}{TP+FP}\,衡量检测到正类样本的准确率。

正类样本准确率(Accuracy):其定义为 \frac{TP+TN}{TP+FN+FP+TN}\。其衡量着所有正确分类的样本占总样本的比例。

从以上定义看出,一个好的的分类器预测模型,希望能满足较高的召回率、正类检测准确率以及准确率,较低的错误接受率。然而,实际情况中,查准率和召回率之间往往难以同时都达到较高的值,需要在二者之间寻求权衡,因此需要折中考虑二者。本文引入F-measure值来考虑衡量准确率和召回率的调和平均数,其被定义为:

F=2\ast\beta\ast recall*pre/(recall + \beta ^{2}\ast pre)\

                                                         

发表评论

电子邮件地址不会被公开。 必填项已用*标注