统计学习方法:概述

时间:2022-06-19
本文章向大家介绍统计学习方法:概述,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
这个系列是对李航写的《统计学习方法》的一个读书笔记。统计学习方法是我在机器学习领域的入门书籍。比起别的书这本相对简单一些。非常感谢李航的这本好书,把我带入了机器学习这个领域。

统计学习

特点

统计学习是机器学习中的一个重要分支。它是关于计算机基于数据构建概率统计模型并运用模型对数据进行预测分析的一门学科。它是以计算机及网络为平台,以数据为研究对象的学科。我们用统计学习方法对数据进行预测、分析。

对象

统计学习的对象是数据。我们从数据中提取特征,抽象出数据的模型,从数据中发现知识,利用得到的知识对新的数据进行预测、分析。这就是我们的机器学习算法经常做的事。然而这一切是有一个前提的, 数据中存在一定的统计规律性 。这是我们进行机器学习、数据挖掘的先决条件。倘若数据中不存在规律性,那我们还挖掘、学习什么呢?当然这个所谓的规律也有一个特点——我们知道它存在但是很难准确描述或者根本没法描述出它到底是什么样的。我们只能用模型来近似得表达它。话又说回来,既然这是统计学习方法,那么我们就可以用概率来描述问题。这就牵扯到一些概率统计方面的知识了。学习统计学习方法要求读者有一定的概率思想。

方法

那么统计学习的方法指的是什么呢?这里所说的统计学习方法,不单单指某一个模型、某一个学习算法。这里的方法指的是一个机器学习解决方法。 统计学习方法可以分为监督学习(supervised learning)、无监督学习(unsupervised learning)、半监督学习(semi-supervised learning)、强化学习(reinforcement learning)等类型。而我们主要将介绍监督学习和无监督学习。 我们给出一些定义:

  • 假设要学习的模型为某个 函数 空间,将这个空间称为假设空间(hypothesis space)
  • 我们应用某个准则,从假设空间中选取一个最优的函数 f(x) 作为模型(最优的函数意味着在给定的准则下有最优的结果)

实现统计学习方法的步骤:

  • 得到数据集,并对数据进行预处理
  • 确定假设空间,即确定 模型 的集合
  • 确定模型选择的准则,即确定模型选择的 策略
  • 确定、实现模型最优解的求解方法,即确定求解模型的 算法
  • 得到最优模型
  • 用得到的模型进行预测、分析,并评估模型

从上面可以看到,有三点是最核心的(废话,你都加粗了XD),就是模型、策略、算法。作者把它称为统计学习方法三要素。后面我们将揭示这三要素到底决定并做了些什么。

重要性

当今是个大数据被炒得炙热的时代。处理海量数据是我们迫在眉睫的需求。而统计学习是处理海量数据行之有效的办法。当数据规模越大的时候,我们的行为数据所产生的群体性规律就表现得越稳定。 统计学习还是计算机智能化的有效手段。按照Andrew Ng的话说,人工智能已经发展到了瓶颈阶段。机器学习在我看来是人工智能的衍生物。它在狭义的人工智能的基础上对计算机的智能化做了后续的贡献。当然再往后将回事深度学习等等更高深的东西。 作者有个观点我很认同。他认为计算机科学由三维组成:系统、计算、信息。统计学习主要做的就是信息这一维。而数据挖掘我个人认为处于的这三者相交的地方吧。

监督学习

监督学习与无监督学习的最大区别就在于是否监督(…这个解释有点无语)。这里的监督指的是外部对学习器学习过程中的监督。这个监督某种意义上来说是个反馈。更直白一点来说,当输入数据中给定了实际的结果值作为学习器学习过程中的参考的话,我们就把它称为监督学习。如果没有参考,则称为无监督学习。(可能我说的更难懂了…)

举个例子,例如在一个预测天气的学习任务中,我们用过去的历史数据来训练学习器。假定这里的历史信息指的时某一天的温度、湿度、风力这三个要素。而我们的预测任务是要预测当天是晴天还是雨天。假如我们在学习器学习的时候,在学习器的训练过程中,学习器对于某条数据得到一个结论值后,我们告诉它当天的实际情况,帮助学习器来修正模型,这就是监督学习。假如我们不告诉它实际情况,任由学习器自己学习,那么这就是无监督学习。

其实这可以类比于我们在学校的学习。每次考试后我们的老师总要来次错题分析,告诉我们正确答案,帮助我们修正自己对知识、题目的理解,这里就是老师在监督我们学习。如果老师不负责任,不管我们的考试结果,而我们自己又不去反思改错,老师继续教,我们继续学,放养式的教学,这就是无监督学习。

从上面这个可能不太恰当的比喻中,我们可以看到:监督学习相比无监督学习有一大优势,那就是它们的区别——监督。监督意味着信息的增加。很显然监督学习所拥有的信息比无监督学习要多得多,尽管它可能只多一维数据,但是这一维数据却意义重大。

那么是否无监督学习就那么的不靠谱呢?也不尽然。无监督学习也是很重要的一种学习。因为很多情况下我们并没有指导信息或者说我们不知道该用什么信息作为指导信息,这时候我们就能用无监督学习。而监督学习与无监督学习的优势可能只在数据量不大的情况下非常明显。在数据量非常大的时候,无监督学习可以通过大量的特征与训练数据弥补指导信息的缺失带来的弊端(Andrew Ng貌似有这么说过,没说过那我也是这么认为的)。

我们在统计学习中讨论的主要都是监督学习的问题。监督学习是统计学习极其重要的分支,也是统计学习中内容最丰富、应用最广泛的部分。

对于一个机器学习系统,我们给定输入,系统给出输出。输入一般我们称为训练数据集,输出则往往是预测得到的值。在这里探讨的输出,根据不同的任务可以使一个分类值(对应分类任务)、一个实数值(对应回归任务),也可以是一个概率分布(对应生成模型)。当然学习任务多种多样,我们可能还有其它需求,例如在深度学习的任务中我们需要挖掘信息的抽象表征,这时候我们得到既不是分类、也不是概率分布、也不是普通意义上的实数值,当然这不在我们在统计学习中的讨论范围内。

基本概念

有必要介绍一下我们对几个空间的称呼。 我们在机器学习中,学习目标是学习出一个模型。在有的地方称为概念(concept)。就统计学习方面而言,直观一点理解为模型就好。概念我一直觉得显得有些抽象了。

  • 输入空间:输入空间是指我们的输入数据的空间,它应当包含所有可能出现的输入数据(即使在你暂时给定的输入数据中有些值还没有出现)。我们把一条输入数据称为一个样本(sample)或实例(instance),通常我们用x来表示输入数据。此处x是一个n维向量。
  • 输出空间:输出空间取决于预测任务。若是分类问题,往往输出空间是一个离散值的集合,特别的,如果是二分类问题,我们通常有{+1,-1}集合和{1,0}集合。选取其中的哪种视具体情况而定,在实际意义上来说这两者没区别。如果是回归问题,输出空间往往是R,即一个实数空间。对于生成模型,则要复杂一些,例如决策树,输出的就是一棵树。这个以后再来说明。
  • 假设空间:这个前面有提到。指的是模型的空间。或者更广泛一点的,我们说是从输入空间到输出空间的映射的空间。

学习系统

以下都是个人见解… 对于一套统计学习方法,我们需要设计一个问题系统(这是本人自创词汇么…)。 我的意思是,我们生成一个完整一些的解决方案,我们至少要拥有以下部分:

  • 数据生成器:通常我们需要有个模块来进行数据处理。往往raw data是无法直接使用的。我们需要对数据进行一些处理使它可以被学习器接受或者说使学习器有更好的效果。这部分有许许多多的事情可以做,细节很多,详情可以参考我的另一篇关于特征工程的文章。
  • 学习器:这当然必须存在,实现学习任务的核心,它主要是学习算法。
  • 模型:这是我们的学习目标。我们需要通过一定程度的学习训练得到模型,用模型来描述特征与预测之间的关系。
  • 预测器:预测器主要做的事就是对一条新来的数据进行预测,得到结果后(如果有必要的话)反馈给学习器让它继续学习,更新模型。我觉得预测器还需要对模型有个评估功能,用来评价模型好差。

这是我在最初设计2048游戏AI的时候的机器学习部分的设计。就我现在的简介而言,我觉得一般的“问题系统”应该具备这些模块。既方便编程,也方便理解。

三要素

其实在上面我也剧透过了,还加粗了。

对于统计学习方法李航先生有个很精炼的描述:

方法=模型+策略+算法

等式右边就是统计学习三要素。可以说这直接就把统计学习方法抽象化了(有朝一日如果写个面向对象的统计学习方法包的话,可以考虑这个结构)。

模型

我们反复提到模型,模型到底是什么呢? 其实模型是一个抽象概念,同时它又是事物的抽象表示。 可能大部分人都玩过玩具模型,比如什么鸟海、爱宕、俾斯麦、列克星敦…之类的poi 当然这是比较具体的模型。它是对实物的简化、缩小化(当然有些nb玩具模型也是可以很疯狂的1:1的)。但是我们说的模型,是对事物本身和事物之间的联系的一个描述。通常我们在统计学习中所说的模型指的是一个函数或者是一组函数,以及各种各样的相关信息。这些都是数学模型。说来也很神奇,简简单单的几个数字、字母,就被称作模型了。但是数学就是这么“奇葩”。

回到正题,如前文所说,模型描述的是输入空间到输出空间的映射。这一句话简单又好理解,以至于不知道该怎么说下去了。。。好吧,那我们说说关于模型的另一件重要的事: 参数

显而易见的,模型基本都是有参数的。 拿一个我们最熟悉的模型来说:

y=x

它的参数在哪…… 我当然不会搬起石头砸自己的脚。这样一个具体的模型,怎么会是我们要研究的问题呢?这只是假设空间中的一个点罢了。在我们用学习器得到这个模型前,我们所设定的模型应该是这样的:

y=k⋅x+b

聪明的你应该很快就能说出它的参数:k和b。 我们所谓的学习,说是学习模型,其实真正学习的是学习模型参数。在我们提出一个假设空间后,通过算法确定了模型参数,也就确定了一个唯一的模型。

在统计学习方法中,模型分为两类。一种是概率模型,通常由条件概率表示。一种是决策模型,它是非概率模型,我们可以在后面的内容看到两者的区别。

策略

所谓策略,值的就是模型学习时候的准则。 所谓准则,就是在学习时候控制学习过程的控制器。 通常这个控制器由损失函数来描述。在监督学习中,损失函数可以理解为一个关于y与y^的函数。其中y^为学习器的预测输出。 常用的损失函数多种多样:

  1. 0-1损失函数 L(Y,f(X))={1,0,Y≠f(X)Y=f(X)
  2. 平方损失函数 L(Y,f(X))=(Y−f(X))2
  3. 绝对损失函数 L(Y,f(X))=|Y−f(X)|
  4. 对数损失函数 L(Y,P(Y|X))=−log(P(Y|X))

如何选取损失函数是一门学问。通常情况下我们不需要考虑学习方法的策略,因为更换策略可能导致我们的算法也需要有所改变。当然,如果有必要做出改变那还是必要的,只是我认为这不是该优先考虑的优化方向。

有了损失函数该如何评估模型的好坏呢? 损失函数只能评估某一个样本的预测结果的好坏,在统计环境下,特别是概率背景下,我们需要通过计算期望损失来评估模型在数据集上的总体表现。 我们通过统计学的知识可以知道,我们要求期望损失,只要在知道数据的联合概率分布的情况下做积分即可得到期望。但这里存在一个矛盾,那就是:我们的学习任务是旨在通过学习得到一个模型来描述输入与输出的映射,在概率背景下我们的映射可以表示为联合概率分布,而我们在求期望的过程中却需要用到这个概率分布,这就产生了矛盾。因此我们只能通过一个比较简单但是通常行之有效的办法来解决这个问题

E(f)=1N∑i=1NL(yi,f(xi))

没错,就是求平均值。我们将这个期望损失称为经验风险。

在一些稍微复杂一些的模型、算法中,我们在损失函数中往往会加入一些惩罚项或者称之为正则化项。这是一种策略的引入——结构风险最小化。 为什么要考虑结构风险呢?因为往往在学习过程中,如果我们对模型的训练不加以控制,可能会得到一些只适合于当前训练数据的模型,这就是过拟合(overfitting)现象。在数据量不大的情况下,我们的样本是有限的,并不能包含所有可能出现的值。过拟合将导致模型只能描述这些有限数据,而不能很好的描述还没有出现过的数据,即模型的泛化能力较差(泛化能力指的是模型对未出现过的数据的预测能力)。 举个例子:在决策树的ID3算法中,我们可能会产生一些不必要存在的子树,而这样的子树的产生就是过拟合现象,是对当前有限的样本的过度建模。因此我们可以在损失函数中加入一个惩罚项来描述树的复杂度,以此来控制树的深度。

算法

在统计学习方法中,我们可以看到,在我们通过思路构建出模型,在用我们的策略——求出经验损失后,我们需要去优化我们的经验损失函数。即使得经验损失函数最小化,来逐步降低我们的训练误差,使模型逐步逼近真实模型。然而该如何调整模型参数使得期望损失能够下降呢?通常我们在得到期望损失的时候,都会提出一个最优化目标,我们的优化目标就是最优化期望损失。接下来要做的就是求解这个最优化问题(在推导过程中一般都会用到最优化理论的知识)。 很多情况下,我们的问题并没有解析解。我们无法通过直接解析问题得到一个解的表达式。这时候我们的算法就该登场帮助我们求解问题。 由于计算机的特性——计算速度快、可以并行计算、任劳任怨。为了充分发挥我们计算机的长处,我们的算法通常都具有迭代若干次这一特点。 我们在设计算法、编写算法的时候要考虑不少东西,不仅仅是算法的可靠程度,还有工程是的一些问题。当然在这样的初学者环境下,我还是不提矢量编程、并行计算什么的了吧(其实我自己也不懂,写的代码又臭又慢…)

模型评估

这大概是概述最后的尾声(我保证书上概述后面的内容我不写是我在偷懒…),但仍然是非常重要的一个部分。 衡量模型时非常重要的。之前提到用损失来衡量模型。这是针对训练过程中的误差来学习、更新模型模型的。而这里所说的模型评估,则是在完成训练之后,对预测器输入预测数据,在得到预测结果后,对模型的预测结果进行的评估。 评估的方法有很多种,最常见的就是AUC了。

欢迎同学们转发,评论。