最近的十几年机器学习非常火热,尤为是其中的一个分支深度学习在工业界取得很好应用,吸引了不少眼球。不过从其历程来看,机器学习的历史并不短暂~从早期的感知机到八十年代火热的神经网络,再到九十年代被提出的经典算法集成学习和支持向量机;而最近的十年算得上是机器学习发展的黄金年代,软、硬件计算条件大幅提升,尤为是如今数据量的爆发式增加让机器拥有充分“学习”的资本,另外一方面如今开源项目愈来愈多,即使一些算法的实现很复杂,我等小白只须要调几个接口也能完成对数据的处理;在这个年代里,不一样的人充斥着不一样的野心,计算机科学家仍在探索人工智能的奥义,资本、媒体都在热炒机器学习概念,大数据、AI俨然成为宠儿,各行程序员也在茶余饭后有了谈资。盛名之下,其实难副,机器学习、人工智能的发展还处在浅层,特别是深度学习这些被媒体过分炒做的产物,从计算智能到感知智能再到认知智能,前面的路依然很远。长路漫漫,无论怎样,愈来愈多的人投入这个行业确实对行业自己有很大的发展,特别是能够看出,国内外不少高校的专家学者已经把研究阵地转向工业,不只仅是由于报酬丰厚,更由于工业界提供了现实场景更丰富的数据,而这些数据让算法拥有很好的施展空间。 程序员
还记得16年在亚马逊买了一本南大周志华老师的<<机器学习>>,到手以后真的超出了预期,书上面的算法介绍的比较系统,每一章节提到了某个领域的经典算法,后面给出的附录也适合非科班同窗看懂~更可贵是这是一本中文的能够当成教材的书~并且从写的内容来看,真的很谦虚、严谨,总之比较推荐入门的同窗看,由于以前一直被广为人知的仍是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."机器学习
我常常这样总结: “设计模型,并从已观测的数据中学习出模型参数,而后经过模型对未知进行分预测 。”这样说彷佛仍是有点抽象,台大李宏毅老师ppt解释的很是形象:函数
这个图解释的含义是什么呢?能够这样看:性能
机器学习的本质是进行预测,好比咱们想要判断一幅输入的图像是猴子,猫仍是狗。怎样预测呢?学习
(1)首先,咱们须要找到一个模型来表达预测的过程,这个模型可能包含一个或者多个须要设定的参数,所以模型是一个多个函数组成的集合;测试
(2)在模型肯定了以后,咱们须要从数学上寻找一个函数来表示这个模型,即从函数集合中寻找一个可以“准确”地表达模型,这一步咱们须要在已知的数据上进行学习,即让函数可以在已知数据上得到很不错的预测效果;大数据
(3)使用(2)中肯定的函数对未知的数据进行预测。
一个典型的机器学习系统包含输入和输出空间,分别对应输入和输出全部可能取值的集合。输入值,简称样本,描述了样本不一样特征或者属性的取值,它能够是一个向量,矩阵,张量或者其余更为复杂的数学形式;好比:
\( x=\left ( x^{1},x^{2},...x^{n}\right )\)
输出值通常是离散或者连续的值,若是是离散的,对应于分类问题,此时描述了样本的类别标签,若是是连续的则对应于回归问题,描述了具体的输出值,输出值一般能够用\(y\)表示。机器学习系统的目标在于利用已知数据信息,设计“合理的”函数映射,在给定新的未知数据时,使得输出值比较符合咱们的预期:
\(F=\left \{ f|Y=f_{\theta }(X),\theta \in R^{n} \right \}\)
大写的\(X\)和\(Y\)分别对应于某个输入或者输出的集合。好的特征输入对于机器学习模型的设计尤其重要,好比不少电商须要预测用户可能购买或者感兴趣的产品,怎样基于用户过去的购买、浏览、收藏等行为构建行为特征,把具体的用户行为数学化;若是咱们须要对房价进行预测,咱们可能会拥有已有房产的大小、地理位置、户型甚至当前房市整体行情等特征,咱们须要选择哪些特征并处理成模型的输入形式,这对预测的最终结构很是重要,像这种特征选择或者处理在数据挖掘中作的很是多,咱们有时叫作业务模型构建,这其实并非机器学习过分关注的问题,机器学习更加关注与模型和算法自己。
我把机器学习作的事情归纳成任务、策略和方法,其中任务描述了机器学习的最终目的,而策略描述了机器学习在处理问题时使用的方案,方法则是机器学习在处理实际问题中使用的具体方法。
2.任务
机器学习的本质在于使用已知数据的”经验“来预测未知数据,从模型的输出来看,咱们处理实际问题的最终目的主要能够分红两种,一是分类(classification),即预测某个输入样本对应的类别,或者叫标签;二是回归(regression),即预测输入样本对应的具体的输出值。
(1)通俗一点的来说,分类也就是咱们一般所说的“识别”,好比上图中判断图像中是否包含一只猫。分类包含二元分类和多元分类,即模型可能输出的标签是2个或者大于2个,好比判断图像中是否存在猫,判断一封邮件是否是垃圾邮件,这里输出有或者无,是典型的二元分类,判断图像中是猫仍是狗、猴子或者其余动物则是多元分类,能够看出分类模型中输出的值是离散的值。
(2)回归是指模型的输出多是多个连续的值,好比要预测明每天气的最高温度,这里的温度就是一个存在于某个范围区间的值;房价预测、无人驾驶方向盘输出角度预测均可以当作是回归任务。
3.策略
在不一样的场景下咱们会遇到不一样类型的数据,而数据的不一样也会致使咱们设计机器学习模型的策略不一样,一般状况下能够分红如下几种:
(1)有监督学习(supervised learning),即给定的样本是有标记的;
(2)无监督学习(supervised learning),即给定的样本是无标记的;
(3)半监督学习(semi-supervised learning),一部分样本是有标记的,另外一部分是无标记的。
大多数现实机器学习模型都是有监督学习,由于已知输出的数据训练效果对最后预测的结果影响太大了。有监督学习强调人类教“机器”进行“学习”,好比小孩子可能没有见过猴子(现实的或者图片),可是父母会告诉他:“这是一只猴子”,所以孩子的大脑皮层会对此作出记忆和处理,认为这种类型的东东是一只猴子;而且在看到其余动物的时候,大脑会将其图像和猴子的特征进行类似度比较,来判断是一只猴子仍是其余动物,这一行为是典型的有监督学习;无监督学习强调让机器本身去学习,好比聚类算法,机器能够本身进行归类,而不须要任何标记的数据。考虑到现实场景获取有标记的数据代价较高,你须要人工的方式去打标记,而网络社会中包含大量没有标记的数据,这些数据很好获取,更为重要的是这些数据对于对于预测自己是有很大帮助的,好比近些年比较热门的一个方向迁移学习,若是咱们要作人脸识别,因为人脸头像存在角度、光照等复杂外界因素的干扰,那么是否能够借助这些大量的不一样场景的无标记数据实现模型自己的迁移,从而使其更能适应干扰,提升识别的精度呢?这就是迁移学习的一个重要做用。
4.方法
方法就是具体的模型设计用到的方法,好比线性方法或非线性方法,线性方法好比早期的感知机,线性回归,线性的子空间投影方法(如经典的降维算法,主成分分析)等等,非线性方法好比如今火热的深度神经网络,支持向量机等等,这些在后面的文章中会提到。
5.经验风险最小化、结构风险最小化和过拟合、欠拟合
有了模型和样本以后咱们须要利用这些样本,即经过这些已经观测获得的数据对模型参数进行训练,这个过程也就是“学习”或者“训练”,而后经过学习的模型对未知数据进行预测的过程能够称之为“预测”,预测的目的在于检验学习获得模型的好坏。然而一个机器学习系统的好坏不只和模型设计有关,并且和数据的特色有很大关系,“No free lunch”告诉咱们,模型的设计必然会带来某些方面的代价或者损失,所以必须综合数据的特色、算法模型、开销等等各个方面来设计,好比在某些状况下样本规模大小和数据的分布彻底不知道,假若在设计模型的时候过于追求精度,导致模型对训练样本的预测效果很好,可是在预测新的未知数据时效果不好,也就是咱们常说的“过拟合”问题。
举一个很直观的例子,小明学习的基础并非很好,在学习了一个新的知识点以后作了不少习题,这些习题套路固定,题型相似,而后须要进行测试,若是测验用的题目和题型与练习的题目变化不大,那么小明在考试中颇有可能取得很好的成绩,然而这种测试得到的成绩“掩盖”了背后的假象,一旦出题老师换一个全新的套路,小明的成绩颇有可能就炸了。能够看出,“过拟合”意味着模型适应不一样场景数据的能力,咱们有时候叫作“泛化能力”。过拟合问题是机器学习长期须要面对的挑战之一,而现实中有不少状况掩盖了过拟合带来的问题,其中之一即是数据量,好比小明若是平时作的习题足够足够多,那么仍是颇有可能应付测验的。
再者,咱们也不能让一个模型为了过于适应复杂场景,追求算法的适应能力,可是过多的损失了精度,这就是“欠拟合”。下面的样本分布图(样本分布图一般以二维坐标的形式展现样本的分布状况)给出了一个示例来展现欠拟合和过拟合。用小圈圈表示二维平面中的样本,其中红色圈圈表示训练样本,绿色圈圈表示真实样本,而后我分别用不一样的多项式曲线去拟合这些样本,能够看出第一幅图中的简单直线并无准确的对训练样本和真实样本进行拟合,可是从必定程度表示出了样本的“大概趋势”,这是“欠拟合”;第二幅图中的曲线拟合地效果比较好,尽管在个别样本稍有误差,但就预测真实样本而言是三张图中最好的,这正是理想状况下须要寻找的模型;相比较而言,第三幅图中的曲线虽然能“完美”地反映出训练样本点的位置,不过存在很大的缺陷,也就是曲线过于复杂,在真实的环境下会遭遇严重的过拟合问题,好比横坐标9到10的这些点与预期值差异巨大。
在不少状况下,大量的数据是不可多得的,有时候咱们尝试从模型而不是数据方面着手解决此问题,所以怎样合理地控制模型,使之避免过拟合呢?
首先在监督学习中,咱们须要定义必定的标准来保证学习的精度的好坏,显而易见的是,咱们可使用一种叫作“损失函数”的东东来衡量结果,损失函数能够解释为“衡量预测值和实际值之间的一致性”。损失函数可使用\(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和模型复杂惩罚之间的平衡因子~不过不一样模型处理过拟合会使用不一样的方法,好比在回归分析中添加的\(L_{1}\),\(L_{2}\)惩罚项,获得的lasso回归和岭回归;在决策树中使用剪枝来下降模型复杂度;在深度神经网络中使用dropout;等等。
6.模型评估和验证
在咱们训练获得一个模型以后,咱们须要必定的手段来对模型进行评估,大多数状况咱们会预留出一部分数据做为测试集,使用这一部分数据进行验证工做。在模型评估环节当中咱们不只须要模型有精确地预测效果,还须要很强的健壮性,在算法精度和性能上都有好的表现。一般的一个作法是咱们须要对样本集合作交叉验证,屡次选取不一样或者不一样规模的训练集合进行评估。另外,不一样的场景咱们须要考虑的侧重点可能不同,好比咱们作一个帐号产品缺陷检测系统,咱们会更关注在真实的缺陷样本是否被检测出来,而不是真实的完好陷样本有没有被检测出来。咱们在相似于这样的二分类问题中使用召回率、错误接受率、正类准确率、准确率和F-measure等指标来衡量分类效果,用FP、FN、TN和TP定义如下行为样本的个数:
FP:真实样本是负例,被错误地预测为正例;
FN:真实样本是正例,被错误地预测为负例;
TN:真实样本是负例,被正确地预测为负例;
TP:真实样本是正例,被正确地预测为正例。
召回率(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)\)
现现在不少模型的优劣能够经过比较有名的benchmark来度量,每一个benchmark的度量标准可能不同,好比在图像分类竞赛中有些度量标准还包括top5,咱们用最匹配的5个样原本衡量准确率,所以,模型评估很大程度取决于业务场景和设定的规则。
7.总结
机器学习是一门关于预测的学科,即设计模型利用已知的数据预测未知的数据。数据分布和模型自己都对预测的结果有必定的影响,没有完美的模型,咱们构建的是适用于不一样场景的模型;在预测过程当中咱们会遇到过拟合、欠拟合等挑战,而在benchmark上对模型评估和验证为咱们提供了调节模型的指标。
暂时写到这,后面的文章准备从线性模型开始,写一些机器学习中经典或者重要的算法。