Python_Machine_Learning/机器学习与优化.md
https://intelligent-optimization.org/LIONbook/
本书是机器学习实战领域的一本佳作,从机器学习的基本概念讲起,旨在将初学者引入机器学习的大门,并走上实践的道路。本书通过讲解机器学习中的监督学习和无监督学习,并结合特征选择和排序、聚类方法、文本和网页挖掘等热点问题,论证了“优化是力量之源”这一观点,为机器学习在企业中的应用提供了切实可行的操作建议。
本书适合从事机器学习领域工作的相关人员,以及任何对机器学习感兴趣的读者。
人不应该过着野兽般的生活,而是要追寻美德与知识。—————— 但丁
**优化是指为了找到更好的解决方案而进行的自动化搜寻过程。**可以说,流程、方案、产品和服务之所以能持续改进,正是缘于优化为之提供的强大动力。优化不仅关乎方案的确定(从一些给定的可行方案中,选出最好的一个),它还能主动创造出新的解决方案。
**优化催生了自动化的创造和革新。**这看起来非常矛盾,因为自动化通常不会和创造与革新联系起来。因此,那些相信机器只能用来处理单调的重复性工作的人们在阅读本书时,会觉得书中的观点简直是胡言乱语,甚至会感受到如同被挑衅一般的愤怒。
几乎所有的商业问题都可以归结为寻找一个最优决策值x, 这要通过使某个收益函数goodness(x) 最大化来实现。为了能形象地理解,我们假设有一个集合变量x = (x1; ... ; xn),它描述的可以是一个或多个待调节的旋钮,也可以是将要做出的选择,还可以是待确定的参数。
在市场营销中,x 可以是一个向量,其数值表示为各类宣传活动(电视、报纸、各种网站、社交媒体)分配的预算,goodness(x) 则可以是由这些宣传活动而产生的新客户数量(产生的新粉丝数量).
在网站优化中,x 可以涉及图片、链接、话题和不同大小文本的使用,goodness(x) 则可以是该网站的普通访客成为客户的转化率。
在工程学中,x 可以是一个汽车发动机的设计参数集,goodness(x)则可以是该发动机每加仑汽油所能行驶的英里数。
将问题归结为**“优化一个收益函数”也激励着决策者,使用量化的目标,就可以用可衡量的方式来领会宗旨,也就可以专注于方针的制定而非执行的细枝末节。**当人们深陷于执行的泥潭中,以至于遗忘了目标时,企业就染上了“疫病”,此时如果外界环境发生了变化,这种“疫病”将会使企业无法做出及时的应对。
自动化是解决这个问题的关键:将一个问题形式化地表述后,我们**把得到的收益模型输入计算机,计算机将自动创造出并找到一个或多个最佳的选项。**另外,当条件和重点发生改变时,只需要修改一下收益函数的量化目标,再重启优化过程就可以了。当然,CPU 时间会是个问题,也并非每次都能保证找到全局最优解决方案。但可以肯定的是,使用计算机来搜寻,无论是速度还是范围,都远远领先于人力搜寻,并且这一领先优势会越来越明显。
然而,在大多数现实场景中,优化的惊人力量仍遭到很大程度的压制。优化在现实中没有被广泛采纳的主要原因是,标准的数学优化理论假设存在一个需要最大化的收益函数,也就是说,有一个明确定义的模型goodness(x) 为每个输入配置x 匹配一个结果。而目前,在现实的商业情境里,这个函数通常是不存在的。即使存在,靠人力找到这个函数也是极其困难、极其昂贵的。试想,问一个CEO“请您告诉我,优化您业务的数学公式是什么”,显然不是咨询工作中开始对话的最佳方式。当然,一个经理对于目标应该会有一些想法和权衡,但是这些目标并没有以数学模型的方式给定,它们是动态的、模糊的,会随着时间改变,并且受限于估计误差和人们的学习进程。直觉被用来替代那些明确给定的、量化的和数据驱动的决策过程。
如果优化是燃料,那么点燃这些燃料的火柴就是机器学习。机器学习通过摒弃那种明确定义的目标goodness(x) 来拯救优化:我们可以通过丰富的数据来建立模型。
机器学习与智能优化(learning and intelligent optimization,LION)结合了学习和优化,它从数据中学习,又将优化用于解决复杂的、动态的问题。LION 方法提高了自动化水平,并将数据与决策、行动直接联系起来。描述性分析和预测性分析之后,LION 的第三阶段(也是最终阶段)是规范性分析(prescriptive analysis)。在自助服务的方式中,决策者手中直接握有更多的权力,而不必求助于中间层的数据科学家。就像汽车的发动机一样,LION 包含一系列复杂的机制,但是用户(司机)并不需要知道发动机的内部工作原理,就可以享用它带来的巨大好处。在未来的几十年内,LION 方法带来的创新,将会像野火那样,以燎原之势延伸到大多数行业。那么企业就像野火频发的生态系统中的植物一样,只有适应并拥抱LION 技术才能生存下来,并繁荣昌盛;否则,无论之前如何兴盛,在竞争逐渐加剧的挑战面前,都可能土崩瓦解。
LION 范式关注的并不是数学上的收益模型,而是海量数据,以及如何针对多种具体选择(包括实际的成功案例)进行专家决策,或者如何交互地定义成功的标准。当然,这些都是建立在让人们感觉轻松愉快的基础之上的。例如,在市场营销中,相关数据可以描述之前的资金分配和宣传活动的成效;在工程学中,数据可以描述发动机设计的实验(真实的或模拟的)和相应的油耗测量方式。
用于优化的机器学习需要数据。数据来源可以是以往的优化过程,也可以是决策者的反馈。
丹尼尔是一名南非的采矿工程师,他曾遇到一个问题:如何在一张地图上找到挖掘金矿的最佳坐标。 大约在1951 年,他开创性地将统计学的思想应用于新金矿的估值,而这一方法仅需用到有限的几个矿坑。需要优化的函数是Gold(x),即坐标x 处的金矿的金量。当然,在一个新的地方x 评估Gold(x) 是非常昂贵的。你可以想象,挖一个新矿没那么快,也没那么简单。但是在一些试探性的挖掘之后,工程师们会积累一些把坐标x1; x2; x3 ... 和金量Gold(x1); Gold(x2); Gold(x3) 关联起来的实例知识。克里金的直觉告诉他,用这些实例(来自以往优化过程的数据)可以建立起函数Gold(x) 的模型。这个称为GoldModel(x) 的模型归纳以往的实验结果,为地图上的每个位置x 给出金量的估计值。通过优化,这个模型找到使预计黄金产量GoldModel(x) 最大化的地点xbest,于是这个xbest 成为下一个挖掘的地点。
这种技术现在被称为克里金法(Kriging),它背后的理念是未知点对应的值应该是其邻近已知点所对应的值的加权平均,权重与这些已知点到该未知点的距离相关。高斯过程、贝叶斯推断和样条函数(spline)都涉及了相关的建模方法。
在一开始,待优化函数中的某些信息是不全面的,只有决策者才能够调整优化的过程。许多现实问题,即使不是大多数,都需要借助有学习参与的迭代过程来解决。在了解了越来越多的案例后,用户会认识并调节自己的喜好,系统会从用户的反馈中建立起他的喜好模型。这一过程将持续下去,直到用户满意或者直到耗尽为这一决策分配的时间。
商业领域里充斥着各种数字形式的数据。大数据指的是大量的半结构数据。顺便提一句,在20 世纪七八十年代,数据对于当时的存储设备来说是庞大的,而如今的“大数据”更多是商业上的宣传概念:即便是最大的公司产生的所有数据,只需一台PC 就足以处理了。
随着社交网络的爆发、电子商务的迅速扩张和物联网的兴起,网络正在掀起一场由结构化和非结构化数据引起的海啸。这场海啸驱使人们在信息技术领域花费多达数十亿美元。也有新的证据表明,标准的商业智能平台使用率正在下降,这是因为企业界已经不得不开始考虑一些非结构化的数据,而这些数据拥有无法估量的现实价值。例如,社交网络产生大量的数据,其中的大多数无法分类,也无法用传统数据的刚性层次结构来表示。试想,你该如何评估Facebook 上一个“赞”的价值?况且非结构化数据需要用自适应方法来分析。再想想,随着时间的流逝,一个“赞”的价值会发生怎样的变化? 由于这类问题的存在,我们需要在数据建模、自适应学习和优化等领域运用更加先进的技术。
为了让软件能够自我改进,并能快速适应新数据和调整后的业务目标,需要使用LION方法。这种方法的优势在于能够从过往的经验中学习、在工作中学习、应对不完全的信息,并快速适应新的情况,而这些能力通常只与人类的大脑联系起来。
LION 技术这种内在的灵活性是至关重要的,因为在求解过程开始之前,我们很可能无法确定哪些是对决策有影响的因素和重点。例如,我们要给一个市场营销的前景评分来估计其价值,应该考虑哪些因素?这些因素又对结果分别有多大程度的影响? 如果使用LION 方法的话,这些问题的答案就是:“这些都不是问题。”系统会开始自我训练,源源不断的数据加上终端用户的反馈将快速提升系统的性能。专家||这里指营销经理||可以通过表达他们自己的观点来改善系统的输出。
每一家企业都需要数据来满足3 项基本需求:
传统的描述型商业智能(business intelligence,BI)擅于记录和可视化过往的表现。构建这样的记录意味着需要聘请顶级顾问,或雇用那些有统计、分析和数据库等领域知识的专业人员。专家必须要设计数据提取和操作的流程,然后交给程序员来实际执行。这是一个缓慢而繁琐的过程,毕竟大多数商业的境况都是瞬息万变的。
因此,那些严重依赖于BI 的企业正在利用性能快照,尝试理解当前情况和未来趋势,并对此做出反应。这就如同开车的时候只盯着后视镜,很有可能会撞上什么东西。现在对于企业来说,就像是已经撞到了一堵僵化的墙,并且缺乏快速适应变化的能力。
预测分析确实在预见方案效果方面做得更出色,然而,将数据驱动模型和优化进行整合, 自动创建完善的解决方案,才是LION 真正的强大之处。
规范性分析做到了引领我们直接从数据到最佳改进方案,以及从数据到可执行的洞察力,再到行动本身!
对于处在不同业务状态的企业而言,全面采用LION 方法作为商业实践的步骤会有所不同。更重要的是,相关数据的情况也会影响这一进程。显然,在数据收集完成的时候引进LION范式会相对容易,开销也更少。对某些企业来说,由于遗留系统的迁移和转换需要涉及大范围的整理,开销会非常大。这也正是那些老练的服务提供商能大显身手的地方。
除了整理和定义相关数据的结构之外,最重要的一点就是建立起数据分析团队和商业终端用户之间的合作。LION 方法通过自身的特性提供了一种合作方式,助其共同发现蕴藏在结构化或半结构化数据中的潜能。数据分析团队能够和商业终端用户高效地并肩合作,关键在于能够使业务目标的不断变化迅速反映到模型上。LION 方法的引入可以帮助数据分析团队在价值创造链中产生根本性的变化,它能揭示隐藏的商机,也能加快他们的商业伙伴对客户要求和市场变化的反应速度。
就业市场也将被打乱。从人类的实例中进行学习的软件将推导出我们在使用却又不明确了解的规则。这将消除进一步自动化的障碍,在许多需要适应性、常识和创造性的任务中,机器将会代替工人,也许会让中产阶级处在风险之中。
LION 方法可以说是一种极具颠覆性的发现隐藏价值的智能方法,它能快速适应改变并改进业务。通过恰当的规划和实施,LION 技术可以帮助企业在竞争中独领风骚,避免被燎原之火灼伤,同时也可以帮助个人在高技能人才的就业市场中保持竞争力。
如果你还记得小时候是如何识字的,那么你就可以理解什么是从实例中学习,尤其是监督学习。父母和老师给你展示一些带有英文字母(a、b、c,等等)的实例,然后告诉你:这是a,这是b。
在监督学习中,由监督者(老师)给出一些已标记的实例,系统根据这些已标记的实例来完成训练。每一个实例是一个数列,它包括一个作为输入参数的向量x,称为特征(feature),和与之相对应的输出标记y。
那些懒惰的初学者在采蘑菇的时候遵循简单的模式。通常他们在采摘蘑菇之前没有学习任何相关的知识,毕竟,他们到特伦蒂诺是来度假的,而不是来工作的。当发现一个蘑菇时,他们会在书中寻找相似的图片,然后仔细检查对照细节列表中的相似特征。这就是机器学习中懒惰的“最近邻”(nearest neighbor)算法在实际问题中的一次应用。
为什么这样一种简单的方法是有效的呢?我们可以用Natura non facit saltus(“自然不允许跳跃”的拉丁文)原则来解释它。自然的事物与特征常常是逐渐改变,而不是突然改变的。如果你将书中的一个可食用的蘑菇作为原型,然后发现你自己采摘的蘑菇与这个原型蘑菇的各项特征非常相似,那么你也许会认为你的蘑菇是可以食用的。
在机器学习领域,最近邻方法的基本形式与基于实例的学习、基于案例的学习和基于记忆的学习有关。它的工作原理如下:我们把已标记的实例(包括输入及相应的输出的标记)储存起来,不进行任何操作,直到一个新输入模式需要一个输出。这种系统被称为懒惰的学习者:它们只是将这些实例储存起来,其他的什么也不做,直到用户询问它们。当一个新输入模式到达时,我们在存储器中查找到与这个新模式相近的那些实例,输出则由这些相近模式的输出所决定。
一个更具健壮性和灵活性的方法是考虑大小为k 的近邻集合,而不仅仅是最相近的那一个,不难猜到这种方法被称为K 近邻(KNN)方法。它的灵活性来源于可以使用不同的分类方法。例如,新实例的输出可以用多数同意规则,即输出这k 个近邻中占大多数的那一个输出。如果想要更加安全的方法,可以仅在这k 个近邻的输出完全相同时才确定新实例的类别(一致同意规则),否则就输出“未知”。这个建议可以用在区分有毒的蘑菇时:如果输出“未知”,就联系当地警方寻求帮助。
如果面临的是一个回归问题(预测一个实数,例如蘑菇中有毒物质的含量),我们可以将这k 个最相近的实例的输出平均值作为新实例的输出。当然,这k 个实例到新实例的距离可能有所差别,而且在某些情况下,距离较近的实例对新实例的输出影响更大是很合理的。在这种被称为**加权K 近邻(WKNN)**的方法中,权重取决于距离。
y=sum(yi/(d(xi,x)+d0))/sum(1/(d(xi,x)+d0))
其中d(xi; x) 指两个向量在属性空间中的距离(例如欧氏距离),d0 是一个小的偏移常数,用以避免出现0 作为除数的情况。d0 越大,距离较远的点的贡献就越大。如果d0 趋近于无穷大,那么这k 个实例的权重就几乎一样了。
WKNN 算法很容易实现,并且相应的估计误差也很小。它的主要缺点是需要大量的内存空间,以及在测试阶段巨大的计算量。因此我们常常将已标记的实例进行聚类,用来减少所需的内存空间。聚类方法按照相似性将它们划分成一个个小组,并且只存储每个小组的原型(中心)。
本书接下来将继续考虑新实例和内存中实例之间的距离,并且将这一想法一般化。核方法与局部加权回归就可看作最近邻方法的一般化,这两种方法并不是粗鲁地直接将远处的点排除,而是根据它们到查询点的距离,灵活地赋予它们相应的重要性(权重)。
KNN(K 近邻)是一种原始的懒惰的机器学习方式:它只是把所有的训练实例存在存储器中(输入和对应的输出标记)。
当有一个新输入并需要计算其对应的输出时,在存储器中查找k 个最接近的实例。读取它们的输出,并根据它们的大多数或平均值推导出新实例的输出。当存储了非常多的实例时,训练阶段的懒惰会让预测阶段的响应时间变得很长。
相似的输入经常对应着相似的输出,这是机器学习领域的一个基本假设,因此KNN方法在很多实际案例中都有效。它与人类的某些“基于案例”的推理具有相似性。虽然这个方法简单粗暴,但它在很多现实案例中的效果都令人惊奇。
从现在起,不要做一个懒惰的学习者,别以为这样可以高枕无忧。继续读下面的章节,坚持学下去。早起的鸟儿有虫吃,睡懒觉只能肚子空空了。
数据挖掘,名词,对数据进行的严刑逼供.如果拷打得足够久,它会向你坦白任何事情。
无论是对于人类,还是对于机器来说,学习都是一种强大却又微妙的能力。真正的学习涉及如何从一个现象中提取深层次的、基础的关系,如何简要地概括各种不同的事件所遵循的规律,以及如何通过发现基本的定律来统一解释不同的情况。
最重要的是,我们真正的目标是能够泛化的模型,以及模型对新实例的解释能力,新实例是指与训练实例来自同一个应用领域,但在学习阶段没有遇见过的实例,而从实例中学习仅仅是走向这一终点的途径之一。与此相反,死记硬背常常被认为是非常低效的学习方式,它虽然对初学者有一定的作用,但是无法使你成为真正的专家。如果目标是泛化,那么模型在学习集上的表现并不能保证泛化是正确的,还可能导致我们对结果过于乐观,因此要极其谨慎地估计这个模型的性能。归根结底,只擅于死记硬背的学生日后在生活中未必能取得个人的成功。
事实上,开始机器学习流程之前,用户会根据直觉和智能在原始数据中提取一个具有代表性的子集,这一步是非常有用的。特征(或属性)是观察到的现象的各个可度量的性质,这些性质包含了与输出有关的有用的信息。这一准备阶段称为特征选择(选出一个集),以及特征提取(生成一个组合)。
分类问题(识别以特征x 描述的某一特定目标的类别)中,输出是类别的相应编码。输出y 属于一个有限集,例如yi = +-1,或者yi 属于{ 1,...,N}。例如,可以将蘑菇分为两类:可食用的和有毒的。
回归问题的输出从一开始就是一个实数值,它的目标是通过建模研究因变量(输出值y)与一个或多个自变量(输入值x)之间的关系。例如,根据蘑菇的特征来预测其有毒物质的含量。
监督学习方法使用实例构造一个函数y = f(x),将输入x 和输出y 关联起来。这一关联选自一个灵活的模型f(x;w),其中的灵活性来自可调整的参数(即权重系数)w。
在许多情况下,特征提取需要一些来自人类的洞见,然而最优参数的确定则是完全自动的,这也是这一方法被称为机器学习的原因。让模型对训练集中的实例进行正确的分析,从而确定那些自由参数。
如果需要优化的函数是可微的,一个简单的方法是使用梯度下降(gradient descent)。人们可以重复地计算这个函数关于权重的梯度,并朝着负梯度的方向移动一小步。事实上,这是神经网络里很流行的一种技术,称为基于误差反向传播(backpropagation)的学习.
偏差-方差困境可表述如下:
区分监督分类的两类方法也是有意义的。第一类热衷于得到某个关于输入是如何产生输出的“构造性的模型”;第二类更在意结果,即获得正确的分类。前者关心对内在机制的解释,后者则单纯地在意其性能。
第一类情况下,生成方法(generative method)尝试在实例中建模,为不同的类型y 生成实测数据x 的过程进行建模。给定某个类,比如有毒的蘑菇,它具有某种外形的概率是多少?
判别算法(discriminative algorithm)就不会尝试建模数据的生成过程,它们直接估计p(yjx),这个问题在某些情况下比之前生成方法的两步过程(首先建模p(xjy),然后才导出p(yjx))要更简单。判别型方法的例子包括多层感知器神经网络,以及支持向量机(SVM)等,接下来的章节里将会讨论。
判别算法所示的捷径具有深远意义,我们不必知道某些类别如何产生输入实例,也不必为此建立一个详尽的模型,就可以构造精确的分类器。想要不用冒着生命危险去采摘蘑菇,并不需要成为真菌学家,你只需要大量有代表性的蘑菇实例集,并且它们已经正确地分好了类。
认识到不需要成为某个领域的专家就可以做出贡献,这是个人的一小步,却是LION 发展道路上的一大步。不用说,成功的企业用朴实低调而又功能强大的数据驱动和优化驱动的工具,弥补了专业知识方面的缺憾。
基于已标记实例的学习要求我们采用细致的实验程序来测量学习过程的效果。尤其注意,不能将已经用于训练的实例再用于测试学习系统的性能,如果这么做,将是一个可耻且无法原谅的错误。机器学习的目标是获得一个拥有泛化能力的系统,用以分析新的或以往未见过的数据;否则,这个系统就不是在学习,而只是记住了一些已经知道的模式,这也是学校不停更换考试题的原因.
然而现实可能与理想相差甚远。一些情况下,训练集是相当小的,并且需要尽可能保证它们能同时满足训练和性能测试的要求。这种情况下,实例集必须清楚地分为训练集和验证集,前者用来训练,后者用来测试性能.
一个典型的性能测试是系统输出与监督者给出的正确输出之间的均方根(root mean square,RMS)误差。值集的RMS 值是原始值的平方的算术平均的平方根。
一般而言,学习过程通过优化模型参数以使得模型尽可能好地拟合训练数据的输出。那样的话,如果我们从验证数据的同一个总体中取一个独立的抽样作为训练数据,一般会导致验证数据集的误差大于训练数据集的误差。如果训练过度的话,这种差异很可能会变得非常严重,并导致过拟合(过度训练)。当训练实例很少,或者模型中的参数很多时,更容易发生这种情况。
分层交叉验证(strati¯ed cross-validation)作为一种改进,可以避免训练集和测试集中不同类的平衡问题。它能够避免有时发生这种情况,即某一个类在训练集中很多,而在验证集中很少(相对于所有实例的平均出现率)。应用分层能够分别从每个类别中抽取出K 个测试样本,以保证不同类别的实例分布均衡。
在测试一个模型的性能时,各种各样的误差带来的影响并不一样。如果你将有毒的蘑菇当作可食用的,你可能会有生命危险;如果你将可食用的蘑菇当作有毒的,你只是浪费了一点时间。根据问题的不同,确定最佳分类的标准也随之改变。考虑一个二元分类(输出“是”或者“否”)。一些可能的标准是:准确率(accuracy)、精确率(precision)和召回率(recall)。虽然它们的定义都很简单,但是需要小心区分以避免混淆(见图3-4)。
大多数惯用右手的人拥有线性思维, 爱用传统的方式思考。(读者可以自由选择是否相信我们的开场白。)
优化的强大力量建立在拥有神奇力量的线性代数上。你是否记得在学校里老师说“好好学习线性代数,你会受益终身”?好吧,多年以后你会发现他是对的。线性代数是“数学生存工具包”,当你面临一个棘手的问题时,应该首先试试线性方程组。在很多情况下,即使你不能用线性代数直接解决这些问题,至少也能得到一个不错的逼近。这不足为奇,解释数据的模型也是这样的。
输入与输出特征的线性相关是一个广泛采用的模型。这一模型十分简单,并且训练起来很容易。另外,模型中每一项的权重系数都为这一项对应的特征的重要性提供了直观的解释:某一项权重系数的绝对值越大,对应的属性的影响就越大。所以,为了不让问题变得复杂,不要轻易尝试非线性模型,除非你的理由十分充足。
可以肯定的是,计算两个很大数的和的系统,与玩“赶尽杀绝”这类动作游戏的系统是很不一样的。进行逻辑演算或推理的系统认出母亲的脸的系统也是很不一样的。前一种系统是迭代的,它的工作方式是按照顺序的步骤来进行的,需要有意识地努力集中注意力。后一种系统以并行的方式工作,速度很快,无须太多努力,以非符号的方式(不会用到符号和逻辑)工作。
机器学习中的不同机制可以模仿这两类系统。线性判别器运用迭代梯度下降的学习方法来逐步改进,它更多模仿的是非符号系统;基于一连串“如果{那么{否则”规则(后面的章节将会提到它们)的分类树更多模仿的是逻辑系统。
线性模型如此普遍的深层原因是存在于许多或大部分物理现象中的平滑性(“自然不允许跳跃”)。图4-5 中的例子表明,青少年的平均身高随着年龄逐渐增长,而不是跳跃式地增长,直到青春期之后慢慢停滞。
线性模型通过最小化式(4.2) 中的平方误差和确定下来。
实数(比如pi 和“大多数”的数)无法在数字计算机中表示出来,它们是“伪的”。数字计算机中的每个数都被赋以一个固定的有限的二进制数,没有方法来表示一个无限数位的数,像3:14159265 : : :。因此,在计算机中表示的实数都是“伪的”,它们能并且经常造成误差。误差会在数学运算的过程中不断传播,在某些情况下,一连串运算的结果可能与数学上的结果相差甚远。找一个矩阵,求它的逆矩阵,并且将二者相乘。你期望会得到单位矩阵,但最后你却得到一个不同的答案。也许你应该查查银行使用的小数精度。
如果没有办法来改变训练样本点的选择,而样本点又没有如愿地分布时,用以保证数值稳定性的数学工具是岭回归(ridge reghression)。它在需要最小化的(最小二乘)误差函数中加入了一个正则化(regularization)项 w转置*w
传统的线性回归模型(一组输入{输出对的线性逼近)通过最小化线性模型预测值与训练样本输出值之间的平方误差和来找到可能的最好的实验数据线性拟合。最小化可以是“一招制胜”,通过推广线性代数中的矩阵求逆,也可以通过迭代的方式逐步修改模型参数并降低误差。广义逆法可能是拟合实验数据的最常用的技术。
在分类中,线性模型旨在用线条、平面与超平面来分离实例。要确定分离平面,人们可以要求把输入值映射到两个不同的输出值(如+1 和¡1)并使用回归。考虑到泛化性,找到健壮的分离超平面的更先进的技术是下面章节中将会描述的支持向量机。
计算机中不存在实数,它们只能用有限大小的二进制数字逼近,而这可能会导致误差 和不稳定(样本点的小扰动导致结果变化较大)。
一些机器学习方法与生物大脑从经验和功能中的学习方式存在松散的联系。学习骑自行车与符号逻辑方程无关,而是关于如何进行逐步调整以及⋯⋯迅速从初始的事故中恢复过来。
一个严谨的建模工作的输出并不是一个单一的“带走它或者留下它”的模型。通常,人们通过评价一个模型的性能(拟合的优劣)来处理多种建模体系结构,通过确定模型参数估计值的置信区间(例如误差线)来选择尽可能好的架构,等等。读完本章之后,你应当可以从一个普通用户变成专业的最小二乘法大师。
学习数据显著的模式和关系,意味着需要消除非显著的细节,例如测量噪声(由物理测量中有限精度导致的随机误差)。想想如何建模一个人的身高随着年龄改变的趋势。如果你重复用高精密仪器测量你的身高,那么每个测量会得到不同的值。这些带噪声的测量反映了一个简单的事实,那就是只能用有限的数位来描述你的身高(没有哪个精神正常的人会回答自己的身高是1823477 微米)。
在统计学中,如果一个模型倾向于描述随机误差或噪声而不是数据间的基本关系,那么就会产生过拟合(over-ftting)现象。当一个模型过于复杂时,例如相对于可用的数据量有太多的自由度(在我们多项式的例子中,就是有太多的参数),过拟合现象就会产生。
一般来说,过拟合模型的预测性能会很差。如果用人类的行为来打比方,可以想想教学:如果一个学生只关注并记住老师在课堂上讲的一些细节(例如数学课上某个特定练习的细节),而不是提炼并理解基本的规则和意义,他只能靠着记忆空洞地重复老师的字眼,却无法将他的知识举一反三应用到新案例上。
了解广义最小二乘拟合的基本方法后,现在从统计学的角度来思考一些附加的动机。鉴于我们有选择不同模型的自由,比如拟合多项式的次数,那么用于辨别最佳模型构架的方法将是十分珍贵的,毕竟不能仅仅依靠肤浅的“目测卡方”方法。
下面是最小二乘拟合的过程。
多项式拟合以一种特定的方式使用线性系数模型(linear-in-the-coe±cients model)来处理非线性问题。该模型包括(待定)系数的线性加权和乘以原始的输入变量的积。如果积被替换为输入变量的任意函数,相同的技术也可以使用,只要这个函数是固定的(函数中没有自由参数,仅作为乘法系数)。通过最小化平方误差来确定最优系数,这就意味着求解一组线性方程组。如果系数的数目大于输入{输出实例数,会出现过拟合(over-¯tting),用这样的模型来推断新输入值的输出结果是危险的。
多项式拟合的优度(goodness of a polynominal fit)可以通过预测观察到与实测数据的差异的概率来评价(给定了模型参数后数据的似然率)。如果这个概率很低,那么不应该太过于信任该模型。但关于误差如何生成的错误假设容易导致我们得出过于乐观或过于悲观的结论。统计从假设开始建立坚实的科学建筑。如果建立在无效假设的沙土上,即使最坚实的统计建筑也会倒塌粉碎。幸运的是,基于可行性强的大规模计算的方法(例如交叉验证)是容易理解的,并且具有健壮性。
像自助法(bootstrapping)这样“荒谬”的方法(对同一数据进行带放回的再抽样,并以蒙特卡罗的方式重复估计过程),可以用于获取估计的参数值周围的置信区间。你不过是最大化了自己被当成线性最小二乘法大师的概率。