美文网首页
机器学习【一/你应当知道的基础知识】

机器学习【一/你应当知道的基础知识】

作者: 木千之 | 来源:发表于2018-08-30 16:11 被阅读31次

    2018/8/30 10:41:49

    与20世纪末吹嘘即将迎来生物世纪不同,人工智能已经成为当今最热门的学科之一,而机器学习作为人工智能的重要分支也早已引起全社会的广泛关注,每年投身机器学习领域的研究者与工程师络绎不绝,大学中机器学习类的本科课程一定位列最受欢迎课程之一。然而,对于广大非计算机专业的同学来说,到底什么是机器学习并不那么容易理解;而对于像我这样入门三年之久的老菜鸟而言,虽然用过的算法模型十数个,然而如果要问我如何认识机器学习这门学科,竟也一时抓不住重点。

    因此,自己感到十分有必要重新系统学习下机器学习的基本知识。这里面有两点需要澄清:

    1. 为什么不直接取网上搜集资源?对于领域研究而言,直接从Google学术上跟踪最新研究进展文献,以及从GitHub上阅读开源项目实现无疑是最为深刻的学习途径,然而,对于寻求系统性的学习者而言,上述途径都不如直接选择一本通俗易懂的教材来的合适;这里自己选择了是国内周志华老师的《机器学习》教材,自认为可谓全面、深度适中,十分契合自己做一个回顾补漏;

    2. 入门三年,为什么还要想起来读书呢?说来惭愧,虽然入门三年,但是自己更多的是使用各种机器学习算法,很多时候一个算法仅仅是一个函数库调用,输入,然后分析输出;可以说自己很多时候知道机器学习大概什么样子,但是不明白为什么是这样,为什么这样做;而这,显然直接制约了自己对于“机器学习”这门工具的理解和灵活使用的可能性;因而,自己决定抽出宝贵的时间,注重理解与实验复现地重新系统学习、梳理一遍基本的机器学习算法;

    同时,在自己整理写下笔记的同时,也希望这个系列可以帮助读到这篇文章的同学们,对于非计算济专业的读者来说,希望可以帮助大家建立对于机器学习更为清晰的理解;对于计算机专业的读者来说,欢迎就文中的疏漏与不足提出意见,不吝赐教。

    壹.什么是机器学习?

    说机器学习之前,让我们一起来回顾下人类自身获取知识的途径。马克思认识论中讲到知识来自于实践,并经历抽象分析后再次指导实践。这里的实践自然就是实际的经验,既有如何生火做饭的经验,也有如何打造工具的经验。正是基于不断地从实践中总结,人类得以创造、积累知识,作为宝贵的财富代代流传,并实现从猴子到智人的进化转变。

    人类进化:从猴子到智人,到...码农?

    机器学习,本质上就是再现了上述分析过程。这里的经验具体化到了大量人工分析过的数据,而得到的知识表现为各种学习器与分类器模型,最终学习得到的学习器与分类器可以对未来的数据进行趋势预测及类别分类。

    当今广为接受的一个机器学习定义是Mitchell于1997年提出的,其英文表述为:

    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.

    也许上述表述看上去有些晦涩,且让我为你举个栗子。比如垃圾邮件。如今网易等大型第三方邮件运营平台多都有反垃圾过滤引擎,然而尽管如此,你已然可能收下面这样的一封垃圾邮件,如下图所示。其标题表明这是一个违法开发票的广告,而主页文本内容则是历史等无关内容的随机堆砌。

    针对当前的这个垃圾邮件识别任务T,如果以识别能力P为度量,那么我们可以引入一个全新的垃圾邮件学习器(如贝叶斯),通过分析大量标题中含有分割关键词的已标记垃圾邮件集合E,使得其可以学习标题的新特征,从而过滤到该垃圾邮件,那么,我们可以说对于任务T和度量P,该程序对E进行了学习。

    上述定义中的几个要素不言自明:首先你必须有个分析比较的计算任务与度量标准;其次你必须有可以供学习的作为“知识”的标记数据集;最后必须通过学习,度量指标有所提升。

    一封我收到的垃圾邮件

    贰.为什么要引入机器学习?

    我认为这主要是信息社会发展到一定程度的产物。机器学习诞生于上个世纪80年代,彼时计算计刚开始在世界普及,我们国家甚至很少见到一台家用“586”,那时网络尚未普及,数据量极少。

    最近十年,网络迅速普及,随之而来的各种智能手机APP迅速占领人们的生活,导致个人生活工作的大量信息转化为流量进入到各种APP的口袋,相应行业获得了前所未有的数据红利。在此基础上,亚马逊运用的大数据分析预测技术更是刺激了人们的神经,使得人们看到了大数据分析的必要性和巨大潜在价值。

    与此同时,高性能计算与大存储技术迅速发展,软硬件日新月异,GPU都逐渐成为一种常用高性能计算设备走入寻常百姓家庭。技术的发展为大数据奠定了技术基础。

    汇总上述价值挖掘的内在驱动与技术基础,大数据分析岗位迅速成为社会上求职的佼佼者,何况我国在该领域刚刚起步,人才培养尚未成型。

    机器学习作为大数据分析的核心方法,已在诸多方面普及应用。在当今的数据时代,如果对于核心的机器学习丝毫不了解,便无法涉足数据分析领域,更无法更好地理解这个瞬息万变的信息社会。

    叁. 基本术语

    加入现在摆在我们眼前的是上面所举的垃圾邮件过滤任务,工作需要我们研发一款更好的垃圾邮件识别引擎,那么我们的首要工作是确定分析的数据对象。

    显然,这里我们要分析的是现在或将来所有可能的垃圾邮件,我们称这个全体为样本空间(sample space)。为了训练我们的垃圾邮件过滤器,我们需要提供一些已经识别为垃圾邮件的数据和正常邮件数据作为训练数据,而这其中又要具体分两个部分:一部分用于训练过滤器(一般称作学习器/分类器,Learner/Classifier),习得的过滤器代表了程序从经验中学到的“知识”,我们称之为“假设”(hypotheis),而数据的真实类别称作“真实”(ground truth);一部分作为验证集(validation set)来评估习得过滤器的性能,调整参数等。

    学习过程其实就是不断学习调整过滤器使得假设与真实间的误差最小的过程。一旦学习过程完成,过滤器就要在新的真实数据组成的测试集(test set)上应用,进行实践检验,进而根据实际表现不断反馈调整。

    需要我们注意的是,上述学习过程其实隐含的一个前提统计假设:独立同分布(independent and identically distributed),即我们可以假设垃圾邮件整体符合一个未知的真实分布,而我们所训练过滤器的数据集来自于多次从这个未知分布中独立抽样(数据集少要求有放回抽样)。而机器学习的最终目标也是能够学习得到在近乎无限的测试集上拥有较高表现泛化能力(generalization)的学习器。

    直觉上,训练集越多,得到未知分布的信息就越多,自然越能够学习得到整体分布的特征规律。然而,事实上我们能够用来训练的数据总是占所有数据的极小一部分,因而我们学习得到的学习器可能存在多种问题。

    一个问题是欠拟合(underfitting),即学习器学习的特征太过肤浅,无法达到刻画整体数据的目的,如将标题中出现“发票”字样就当作垃圾邮件,很有可能将单位通知发票报销的邮件当作垃圾邮件过滤删除,耽误大家拿到小钱钱。但是此类问题较为容易,增加特征或者提高学习器复杂度即可解决。

    难的是过拟合(overfitting),即学习器学的特征态势深刻,以至于特征仅仅出现在训练集中,不是所有数据的共同规律。还是以垃圾邮件为例,如果学习器将文本内容的“志愿军”“美国”“海外”“中国历史”等词汇作为垃圾邮件的标志特征,那么自然会漏掉其他文本信息的垃圾邮件。很多算法都有处理过拟合的措施,但是在现实中,过拟合无法避免。

    由于训练学习器的数据远小于样本空间,因而对于同一个训练数据集往往可以得到多个假设。这就像对于一个二元一次方程x+2y=5而言,如果仅有一个方程会同时有类似(x=1,y=1)与(x=2,y=0.5)的多个无穷解,原因在于一个方程给的信息量不足与确定变量特征。机器学习也是类似的问题,因此,其实现实中往往可以得到多个可能的学习器,那么该如何取舍呢?

    我们首先要区分机器学习算法的优化目标。很多机器学习算法的求解其实都是一个优化问题,即在现有数据集上求最符合我们目标的。一种常用的目标是误差函数(训练集上假设与真实的差,如均方误差),通过梯度下降计算得到结果;另一种则使用其他理论,如决策树中的信息熵优化。不同的优化目标不能直接比较。

    一个通用的归纳偏好(inductive bias)奥卡姆剃刀原则,指的是当多个假设都符合观察数据时,选最简单的。如哥白尼提出日心说就因为日心说与地心说都符合观察规律,然而日心说解释更简单。当然,“最简单”的含义需要在具体工作中进行确定,有的是需要调整的参数少,有的是模型计算简单等。

    事实上,从泛化能力上考察所有的机器学习算法,会得出没有免费的午餐定理,即考虑泛化误差,所有的机器学习算法期望相同。但是这并不是说所有的算法都一样,而是告诉我们脱离具体问题,空泛地谈论算法优劣没有意义。在某些问题上表现差的算法,说不定在另外一些问题上大放异彩。

    肆.评估方法

    前面已经提到,已有数据集会进一步分为训练集与验证集,训练集负责训练学习器,得到假设,而验证集负责调整参数,评估性能。这部分我们介绍几个常用的,训练集与验证集的划分方法。

    1. 留住法

    最朴素的方法。

    直接从数据集中随机抽取一部分作为训练集,剩余就是验证集。当然,抽取时为了保证类别分布一致性,尽量采用分层抽样(stratified sampling),即按照原有类别比例抽取样本组成训练集与验证集。

    一般而言抽取2/3~4/5作为训练集,剩余作为验证集,然而,即便如此每次抽样的随机性导致可能方案很多,而不同的方案训练得到的学习器均不相同。因而,实际中一般要求进行多次(如100次)留住法实验后,性能度量取平均值作为该算法的评估。

    2. 交叉法

    最常用的方法。

    通俗来讲,就是将已有数据尽量相等的分成K份,燃油依次用每份当作验证集,其余当过训练集,这样所有的数据集都当过训练集和验证集。

    常用的折数有5-10-20等,当然最终评估也要取均值。该方法比留住法更为合理,因为所有数据都得到了充分利用。

    推荐。

    3. 自助法

    不好理解的名字。

    其实说白了就是“有放回抽样”。每次随机抽样结束放回再进行下一次,直到选购训练集,剩下的自然就是验证集。

    这种情况训练集中可能出现重复样本,因而也需要训练多次。自助法适合数据集较小的情况,可以用重复抽样来凑够训练集个数。但是重复样本导致训练的学习器可能丧失了某些重要样本的信息。

    伍.性能度量

    终于等到你,终于讲到这里,因为性能度量对于机器学习太重要了。一个算法好不好,来来来,用性能度量“拉出来看看”。

    1. 错误率与精度

    一个自然的评估算法的标准,自然是其整体的对错,比如分类算法,就是分类正确和错误的比例。是的,你没想错,这就是错误率和精度的定义。下述样本均分析的验证集。

    错误率(Error Rate)=分类/预测错误样本个数/验证样本总数 精度(Accuracy)=1-Error Rate

    嗯,还有其他要说的么,这个是最最朴素的评估标准,基本所有算法通用。

    2. 查准率与查全率

    这部分有些文章会列出关于分类结果的那个混肴矩阵,不过我个人感觉没必要记那个呀,不就是TP/FP/TN/FN么~

    所以,这里我不准备贴那个表,如果有兴趣可以去翻周志华老师教材第二章,或者随便百度就好了。

    我想说的是,为啥要引入查准率与查全率呢?

    错误率与精度是对于算法整体对错的一个评价,然而很多情况不能表达我们的关切!比如还是我们那个垃圾邮件过滤栗子,假设垃圾邮件标记为正类(Positive),普通邮件为负类(Negative)。某个过滤器分析100封邮件(其中正类10封,负类90封),加入将全部邮件都判断为负类,那么错误率才10%,精度高达90%。然而这个结果并不能解决我们的问题,因为我们的目标是过滤正类垃圾邮件,而不是单纯确保低错误率!

    因此,我们必须表达对于正类垃圾邮件的特殊关切!是的,就因为这个引入了查准率与查全率(成对分析某个类别的分类性能)。

    查准率(Precision):判断为正类的真正类(True Positvie, TP)在所有判断为正类样本中的比例,即TP/(TP + FP) 查全率(Recall):检测出的正类样本占所有正类样本的比例,即TP/(TP+FN)

    可以看到,用查准率和查全率来衡量上述栗子,发现惨不忍睹:0~

    通常而言,查准率与查全率往往是一对矛盾的变量。如为了确保更多的正类被检测到,往往需要放宽阈值条件,结果导致大量负类被误判为正类;反之亦然。

    因此,通常需要综合考量查准率与查全率,人们为此发明了P-R曲线。通过该曲线可以方便看出不同算法的性能:

    如果一个曲线包含另一个曲线,则“大”曲线更优;

    如果曲线存在交叉,则一般需比较曲线围成面积,或简单地比较平衡点(P=R),高点曲线更优;

    P-R曲线

    哦对了,好像还有个F-measure,是P与R的调和平均,也是为了可以直观地综合衡量查准率与查全率。

    3. ROC与AUC

    虽然P-R曲线弥补了错误率精度的不足,但是现实中有些问题还是难以直接计算P-R曲线。比如异常检测领域,通常结果都是对于样本属于异常的概率或者实数值预测,导致需要我们需要将数值结果与既定阈值比较。自然,你会想到,一个样本属于异常还是正常取决于我们人为规定的阈值。然而如果这样,你怎么说一个异常检测算法好不好呢?

    于是人们引入了受试者曲线ROC与所围成的面积AUC。受试者曲线ROC前提是将所有验证集样本根据异常概率可能由大到小排序,然后来评价该排序的质量,从而侧面反映异常检测算法识别异常的能力。

    ROC中两个度量可以看作正类负类的两类“召回率”:

    真正例率(True Positive Rate, TPR):即正类的召回率,TP/(TP+FN) 假正例率(False Positve Rate):即负类误报的召回率,FP/(FP+TN)

    同样,ROC曲线中的TPR与FPR也通常是矛盾冲突的,因此需要类似于P-R曲线那样综合衡量。不同的是ROC曲线更容易从验证集绘制得到AUC面积,从而可以利用AUC比较性能优劣。(方法么,你可以调用各种函数库,不需要我们自己计算哦~)

    陆.比较检验

    其实我不确定要不要提这个部分,因为这部分实在涉及太多数理统计知识了,数学专业学这个头疼的不在于少数。因此很多关于周老师教材的学习笔记都跳过这部分不提,但是我感觉还是要多少提一下吧!

    跳开二项分布、T检验的这样的专业术语方法,我们需要明白的是,为啥要比较检验呢?

    比如我们现在从实验室环境的数据中学到了一个垃圾邮件的过滤器,那么能不能直接部署在实际中呢?万一FP太高导致用户收不到正常邮件咋办?

    因此,需要利用实验室的验证集误差来估算下泛化误差的上界,可以接受的话再部署是不是更心安一些?

    这就是比较检验的意义,可以从理论上说明该算法实际的误差上界。然而我认为现实意义很有限,因为本身比较检验就是统计分析,统计分析都是概率结果,也就是说即便1%的黑天鹅你也会遇到的,那么这个也就是算作一个理论参考吧,还要看算法实际的表现反馈调整。

    柒.小结

    作为开篇,我们简单介绍了机器学习的重要概念与分析方法,提到了样本空间、训练集、验证集以及得到的假设与真实。再次基础上我们介绍了三种分割数据集的评估方法,并介绍了错误率/精度、查准率/查全率以及ROC三种性能度量;最后简要提了下比较检验的理论意义。最末附上自己的一张导图,希望对大家建立对机器学习的基本认识有帮助。

    机器学习基础知识

    相关文章

      网友评论

          本文标题:机器学习【一/你应当知道的基础知识】

          本文链接:https://www.haomeiwen.com/subject/rofdwftx.html