统计学习方法第一章

摘要:用通俗易懂的方式讲解统计学习方法,讲解理解上的重难点,并且记录学习当中的困惑,希望与各位一起交流,有问题请使用石墨文档评论功能,方便其他有同样问题的同学浏览,评论会尽力及时回复。

本文链接:https://shimo.im/docs/YRjp38P9qPkJV6WK

 

 

1.统计学习

1.1 统计学习

所谓统计学习就是使用统计学理论与方法构建的学习系统,举例来说就是我们小学学习过的线性回归,可以用于预测某些变量之间的关系,从而解决实际问题。但在学习线性回归的时候,我们并没有学习支撑线性回归的几个假设,例如变量之间独立互不影响,符合同等的分布以及同方差性等。

往复杂里说,就是在大学期间接触的各种非线性,多变量的复杂函数,主要目的在于揭示自变量与因变量之间的关系,而这就是统计学习要做的事情。

作者将统计学习分为统计学习理论、方法以及应用,从线性回归的角度理解,理论指背后支撑这个回归的一系列假设以及他们的性质研究,方法就是回归算法本身,而应用就是解决实际问题。

另外,需要注意的是目前的学习系统以及电脑本身的架构都是数理抽象的结果,所以统计学习是一个非常重要的信息处理过程,作者提到目前的学习系统从整体上看有三个要素:硬件、硬件中所包含的信息内容以及硬件对信息的处理过程,其中多数智能化的处理过程就是由统计学习完成。这三个要素映射到人身上就更好理解了:肉体、大脑的信息处理能力以及从外界接受的信息。

 

1.2 统计学习的分类

作者将统计学习分为监督学习、半监督学习、无监督学习以及强化学习,其中这些本质差异在于,数据中是否包含了给定的标签以及给定多少,例如还是说线性回归,对于每一个X对应一个Y,其他的算法同理,这就是监督学习。而我们对群体中的人进行分类的时候,将人抽象为反映不同特征的向量,而这些向量在空间中能够从坐标原点出发到达一个点,这里就反映为空间中的点,当我们将点按照不同的簇分类时并不会事先得知哪些点属于这个簇,同时簇也因为分类而在改变,这就是无监督学习,结果事先不可知。

 

1.3 统计学习的流程

首先我们需要清楚统计学习中有哪些要素,作者提到了假设空间、策略和模型,这样的说法对初学者而言还是难以理解的。假设二维坐标空间中有三个点,我们想要做到的是有一根线可以让所有的点都穿过,即X与Y符合所有点的映射关系,那么我们既可以从二次曲线穿过,也有可能用三次曲线穿过,甚至更高次的曲线,当我们放弃一个点,只要求符合两个点时,可选的曲线就更多了。这些可选曲线所代表的函数构成的集合为假设空间,策略就是我如何选择去选择曲线,我可以求解满足三个点的方程,并且要方程足够简单,这是一种策略;另外,我可以放弃一个点,不同策略下得到的也不止有一个方程,可能具有多个,这取决于你的所有要求是否体现在损失函数中。而模型就是我们在假设空间中通过不同的策略得到的曲线所反映的函数。

接下来我们说一下流程,首先我们需要数据,然后我们需要确定假设空间(函数集合),其次选择优化的方式,即损失函数,作为策略,最后求解优化,得到最优模型。

大家可能对假设空间这个步骤有些疑惑,这里也以回归为例,首先我们假设y=ax+b,这里a和b取不同的值时候就是不同的函数,这样的一个表达方式就是假设空间。其他算法也是同理的,如我们假设图神经网络作为一个假设空间,但其中的参数不定,所以包含还是多个模型,后面的几步就是确定一个或者多个符合我们要求的模型。

 

2.监督学习

2.1 监督学习

关于监督学习的理解,上文中已经说明。接下里主要说监督学习的一些基本假设,即自变量互相独立,不收影响,同时符合同一个分布,所谓独立同分布。而我们学习的过程从回归角度来说就是在学习映射关系,而从概率角度来说,我们是在学习数据的分布。

 

2.1 监督学习中的要素

我更愿意从一个简单的例子出发理解问题,首先我们需要理解统计学习有哪些要素。从函数角度出发,具有三个要素:定义域、值域与映射规则。书中把定义域称为输入空间,值域称为输出空间。

唯一一个不同之处在于特征空间,在比较复杂的应用领域,如自然语言处理中,字符或者句子本身为序列化的自变量,但是我们需要将其数字化,这里就选择不同的向量来代表自变量包含的复杂特征,因此这里真正的输入变成了特征向量。

根据不同的自变量和因变量(这里不一定具有因果关系,为理解和表述方便所作),可对监督学习进行细分。首先当自变量与因变量为连续变量时,为回归问题;当因变量为类别变量时,为分类问题;当自变量和因变量都是序列变量时,为标注问题。

另外,作者没有提到的一种类型是自变量为序列,因变量为连续变量等其他情况,例如判断情感强度时就是一种新的种类,这部分只是一个简单的分类,不必过于纠结。

这部分难以理解的地方在于,向量维度比较高,不太好理解。以西瓜为例,具有大小、颜色、藤蔓三种特征,不同的西瓜可由三维向量直接表示,而到了更加复杂的语言或者文本时已经不能分辨特征的具体含义。但是需要注意的是,我们在实际代码输入的时候并不是一个个地输入,而是成批输入数据,中间的转换矩阵是一致的,输出也是相应成批。

例如下{x1,x2,x3}T*w ={y1,y2,y3}

这里,w与不同的x分别运算得到y。

其中x由多个不同的特征组成x1={x11,x12,..,x1n}.

 

2.2 监督学习的过程

从整体上看,监督学习为首先从已知因变量的数据中学习数据分布或者映射关系,然后保留这些模式,对于新的测试数据产生相应的输出,从而可以用于实际当中。

 

 

3.统计学习三要素

 

3.1 模型

这里的模型以监督学习为对象,分为两种,一种是条件概率分布,另一种是决策函数。

其中条件概率揭示当输入和概率参数已知时,输出相应Y的概率。决策函数直接以x,y之间的映射关系为主,输入x时,直接输出y的预测值大小。

 

3.2 策略

这里主要指损失函数,其中作者提到了两种,一种是经验风险最小化,另一种是结构风险最小化,分别对应具体的最大似然估计和最大后验估计。

首先经验风险最小化,从回归角度来讲,就是标记与预测之间的差距,无论是具体使用哪种计算方式。而这也具有理论基础,就是大数定律,当数据规模够大时,样本均值与期望接近。具体证明如下图,玻璃屏幕上不太会写:

 

大数定律证明

 

 

但是,实际情况并没有足够的数据,而且也不知道什么才是足够,因为样本数据分布是不清楚的。

书中作者用几个点连线来距离说明,同样的数据,不同次数的曲线仍然可以满足经过所有点的要求,这里体现为训练损失为0,但是我们最终想要的是,模型可以学到整体的正确分布,从而预测新的数据,即测试损失尽可能小。但是在作者的例子中,随着模型的复杂度升高,训练集损失确实在一直下降,但测试集损失却是先下降再上升,所以我们需要想办法得到一个复杂度时钟,并且预测能力比较好的模型。

因此,出现了结构风险最小化,即在经验风险中加入了模型复杂度函数,具体就是一个系数乘以参数向量的范数。

接下来,我们具体展开对最大似然函数的讨论,似然即可能性。最大似然函数的核心思想在于,将目前所发生事情认为是该事件集合中最有可能发生的事情,即概率最大。例如在放回情况下抽签,共有两种签,共抽取10次,结果为8,2,那么有p(a)=p^8*(1-p)^2,求该函数的最大值,得到p=0.8(舍去负值)。

然后,我们进入对最大后验概率估计,这里其实就是贝叶斯后验估计。贝叶斯估计的核心思想在于,通过已有的先验知识推断后验概率,具体讲解我认为链接里面已经讲得很通俗了:先验概率、后验概率的理解 - 徐唱 - 博客园 (cnblogs.com)

而在书中,作者首先有一个对数据分布的先验概率g{setae},然后已知y标签的情况下,数据的情况,最后得到数据已知情况下得到某些标签的概率。我们要做的是,通过调整seta来使得后验概率最大,从而得到数据分布。拓展内容:极大似然估计与最大后验概率估计 - 知乎 (zhihu.com)

下文中主要针对作者的两个论断:[0] 极大似然估计和最大后验概率估计的统计学解释 - 知乎 (zhihu.com)

(1)当模型是条件概率分布,损失函数是对数损失函数时,经验风险最小化就等价于极大似然估计。

(2)当模型是条件概率分布、损失函数是对数损失函数、模型复杂度由模型的先验概率表示时,结构风险最小化就等价于最大后验概率估计。

 

补充:可能需要理解一下对数损失函数在计算什么内容,其实它与最大似然一致,反映的是条件概率的最大化。详解请看:https://www.zhihu.com/question/27126057

 

3.3 算法

算法具体指最优化算法,在已知损失函数的情况下求解参数的方法。一般情况下,我们直接可以通过求导解决,但是对于更加复杂的函数而言,我们需要使用迭代的方式求解近似解,例如梯度下降法等。

 

4.模型评估与模型选择

该部分在上文中有所涉及,因此就简单讲解。

 

4.1 训练误差与测试误差

这两个误差的区别就在于所使用的数据,以及不同阶段使用的损失函数,需要注意的是训练时候的损失函数和测试时候的损失函数不一定是一致的。

 

4.2 过拟合与模型选择

这里主要涉及对过拟合的理解,其实作者在文中的画图例子中已经讲解地非常清楚了。意为,在同样的数据面前,为了让训练数据的损失更小,从而使得模型更为复杂,体现在参数量上,反而使得测试时的损失更大的一种情况。

 

5.正则化与交叉验证

 

5.1 正则化

正则化在前文中结构风险最小化中已经有所涉及,具体为模型参数的范数乘以一个整数作为正则化项。

 

5.2 交叉验证

这里的内容比较关键,从整体上理解就是划分数据,从而能够重复利用数据,并且得到不错的数据分布。一般情况下,需要有训练集、验证机以及测试集三个数据集。

简单交叉验证就是数据对半分(比例可以自行分配,一般为82分),然后分配为训练集和测试集。需要注意的是,数据抽取需要遵循随机性,如果不遵循随机的话很可能无法形成整个分布,例如数据为正太分布,但你只选取了前半部分,即数据分布为正态分布的一半,无法得到整体的分布。

K折交叉验证就是,将数据随机分为k个小数据集,并且互不相交,选取其中k-1个作为训练集合,剩下1个数据集作为测试集合,这样的过程重复k次(与书中的可能的S中选择重复进行一样,指在S个数据集中重复选择,那么从排列组合角度来说,共有S个不同的情况)。其中特例为k正好等于数据集中数据个数n,称为留一交叉验证。

在实际的运用中,会使用简单交叉验证,但有训练集、验证集以及测试集三个数据集,且比例不一。

 

 

6.模型泛化能力

首先,我们要意识到存在一个真的模型完全描述了整体的数据,但我们通过样本估计总体的模型分布时候存在一定的误差,即估计出的模型与真模型之间存在差异,这就称为模型泛化误差。

泛化从整体上说就是该模型在测试数据中的表现性能如何,即模型是否具有整体的数据描述能力,从而更好地预测测试数据。

泛化误差具有一个上界,这里作者以二分类为例,证明了该上界,这里不做详细描述。

 

7.判别模型与生成模型

该部分内容有些抽象,所以难以理解,这里做重点讲解。

 

7.1 判别模型

正则化在前文中结构风险最小化中已经有所涉及,具体为模型参数的范数乘以一个整数作为正则化项。文中提到,判别模型就是直接学习决策函数或者条件概率分布,,即X与Y的映射关系,而不关心数据的分布,只关心对应输入的标签是否预测正确。

 

7.2 生成模型

对生成模型的理解较为困难,生成模型指的是模型学习输入与标签之间的分布关系,强调学习数据的分布。如下图,不但要学习输入的分布,还要学习联合概率分布才能准确描述条件概率分布。

 

 

8.模型分类

这里的分类依据已经在上文中提到,即输入与输出的形态,这里重点具体讲解。

 

8.1 分类问题

逻辑回归就是最典型的分类问题所使用的模型,输入可以是连续的,类别的,输出是类别变量,而这里的类别就是使用概率输出做判断的,大于等于某概率阈值取值为1,否则为0.这里类似激活函数,将输出极大地区分开来。

目前这里的分类依据,主要集中在输出上,即输出为类别变量。当类别大于2时,标签呈现为onehot向量形式。

 

8.2 回归问题

上文中已经以输出为重点讲解,这里不做赘述。

 

8.3 标注问题

这是一个更为复杂的情况,即输入为序列,但输出可以任意,可以是序列、连续值或类别。唯一需要注意的是,序列并不是一个简单的向量输入,而是需要从序列的成分或者直接用向量表示序列作为输入。

体现在语音、自然语言中就是上下文之间存在时序和逻辑的连续性,需要考虑新的表征方式以揭示这样的关系,而不能简单使用向量或者连续值代替。

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值