音乐播放器
My Brain
 
文章 标签
8

Powered by Gridea | Theme: Fog
载入天数...
载入时分秒...

机器学习实战(二):监督学习

监督学习

一、形式化定义

在监督学习的过程中,我们输入的训练数据是成对输入的(x,y)(x,y)xRdx\in R_d是输入实例,yy是其标签,整个训练数据表示为:

D={(x1,y1),...,(xn,yn)}Rd×CD = \{(x_1, y_1), . . . ,(x_n, y_n)\} ⊆ R_d × C

其中RdR_ddd维特征空间,CC是标签空间,xix_i是第ii个样本的特征向量,yiy_i是第i个样本的标签
数据点(xi,yi)(x_i,y_i)来自一些未知的分布P(X,Y)P(X,Y)

最终我们希望学习出一个模型函数hh,对于一个新的数据点(x,y)(x,y),我们有较高概率的 h(x)=y  h(x)y~h(x)=y~或~h(x)\approx y

监督学习的标签空间决定了问题的类型,典型的标签空间如下:

Type Lable Space E.g.
二分类 C={0,1} or C={1,+1}C = \{0, 1\}~or~C = \{−1, +1\} E.g. 垃圾邮件过滤问题. 一个邮件要么是垃圾邮件(-1)要么不是(+1)
多分类 C={1,2,,K}(K2)C = \{1, 2, · · · , K\} (K ≥ 2) E.g. 人脸识别问题.一个人的身份可以是K个身份中的一个
回归 C=RC = R E.g.预测某一天的温度或者某个人的身高

二、损失函数

2.1 定义

什么是损失函数?顾名思义,它是一个用于评估模型对于数据集拟合的损失程度的函数,我们希望预测的效果越差,损失函数的值越大,这也为我们在搭建模型算法的过程中提供了方向:我们要尽可能得使得模型的损失函数输出最小化,以达到较好的拟合效果。
同时在优化过程中,损失函数输出的值变化也可以说明我们的在模型优化上的进展。

事实上,我们可以设计一个非常基本的损失函数来进一步解释它是如何工作的。对于我们所做的每个预测,我们的损失函数将简单地测量预测值和实际值之间的绝对差,即:

L(h)=1ni=1nh(xi)yiL(h)=\frac1n\sum_{i=1}^n|h(x_i)-y_i|

其中LL是损失函数,hh是我们训练出的模型函数,nn是验证集的样本数量,h(xi)h(x_i)是特征向量xix_i的预测标签,yiy_i则是实际的标签,显然当我们预测完全准确时L(h)=0L(h)=0,预测值与实际值差别越大,损失函数的值越大,这满足损失函数的特性。

image-20220429205624930

2.2 经典的损失函数

2.2.1 Zero-one loss

0-1损失函数的形式化定义如下:

L1/0(h)=1ni=1nδh(xi)=yiδh(xi)=yi={1,if h(xi)=yi0,o.w.δh(xi)=yi={1,if h(xi)yi>t0,o.w.L_{1/0}(h)=\frac1n\sum_{i=1}^n\delta_{h(x_i)\not=y_i}\\ 对于分类问题:\delta_{h(x_i)\not=y_i}= \left\{ \begin{aligned} &1,if~h(x_i)\not=y_i\\ &0,o.w.\\ \end{aligned} \right.\\ 对于回归问题:\delta_{h(x_i)\not=y_i}= \left\{ \begin{aligned} &1,if~|h(x_i)-y_i|>t\\ &0,o.w.\\ \end{aligned} \right.

根据δ\delta函数的定义,当我们的预测值准确时,会给损失函数加上0,对于不准确的预测值则会给损失函数加上1
0-1损失函数也有明显的缺点,对于分类问题影响并不大,但是对于回归问题,tt是某个自定义的阈值,δ\delta函数对于所有的误差大于阈值的惩罚相同,即错误的预测所带来的惩罚都为1,对于一些很离谱的预测(比如1预测成了10000)并没有额外的惩罚。

2.2.2 Squared loss

平方损失函数的形式化定义如下:

Lsq(h)=1ni=1n(h(xi)yi)2L_{sq}(h)=\frac1n\sum_{i=1}^n(h(x_i)-y_i)^2

平方损失函数常用于分类问题,它有两个主要特点:
①损失函数的值永远是非负的
②损失函数的值与预测的绝对误差呈二次关系

显然平方损失函数规避了0-1损失函数的缺点,对于预测误差较大的样本,所带来的惩罚也越大,但同时对于预测较准确的点,所带来的惩罚也会变得更小,对于噪声数据的处理会使得模型的效果变差。

2.2.3 Absolute loss

绝对损失函数的形式化定义如下:

Labs(h)=1ni=1nh(xi)yiL_{abs}(h)=\frac1n\sum_{i=1}^n|h(x_i)-y_i|

绝对损失函数的值随着预测失误而线性增长,因此更适合于噪声数据

三、泛化能力

学习方法的泛化能力,是指由该学习方法学习到的模型对未知数据的预测能力,是学习方法本质上重要的性质。

对于给定的一个损失函数LL,我们可以得到一个使得损失函数最小化的模型hh,即:

h=argminhH L(h)h=\underset{h\in H}{argmin}~L(h)

机器学习的很大一部分集中在这个问题上,即如何有效地进行最小化。如果我们得到一个模型函数h()h(·),它在我们的训练数据DD上的损失很小,我们该如何确定它在DD之外的数据上的损失也很小呢?这就是泛化的问题,一个泛化能力较差的模型如下:

Bad example:

h(x)={yi,(xi,yi)Dx=xi0 ,o.w.h(x)=\left\{ \begin{aligned} &y_i,(x_i,y_i)\in D \cap x=x_i\\ &0~,o.w. \end{aligned} \right.

对于这个模型函数,我们在训练的数据集DD上的误差为0,但是对于数据集DD外的数据点,显然将会有很大的误差,这就是过拟合问题。

四、过拟合

什么是过拟合?

image-20220429214453836

在模型的监督学习过程中,我们往往是在训练集上设计模型,在测试集上评估模型的准确性,如上图所示,图1是欠拟合的情况,即模型在训练集上也没有很好的准确性,因此在测试集上的准确性也不会高;图2是较为合适的拟合,它规避了噪声的影响,较为准确得对两类点进行了划分;图3则是过拟合的情况,它最大化了模型在训练集上的准确度而忽略了噪声点的影响,使得模型在训练集上表现得很好,但是在测试集上却表现不佳。

在西瓜书中也有一个比较形象的例子:

image-20220429214520865

五、训练与测试

5.1 定义

image-20220429214711346

训练是使得模型可以学习的过程,而测试则是模型进行预测的过程,训练集的标签是已知的,即可观察的,而测试集的正确标签则是未知的,我们的模型要从已知的特征与标签的对应关系中进行学习,然后对未知的测试集进行预测。

**No free lunch rule:**一个模型hah_a即使在某些问题上比另一个模型hbh_b好,也必然存在另一些问题使得hbh_b效果比hah_a

5.2 数据集的划分

对于所提供的数据集,为了训练模型,我们往往需要对数据集DD进行划分,一般划分成训练集DTRD_{TR}、验证集DVAD_{VA}、测试集DTED_{TE}三部分。
一般的划分比例为80%(DTRD_{TR}),10%(DVAD_{VA}),10%(DTED_{TE}),对于不同的数据集可以进行调整。

image-20220429215011461

为什么我们需要验证集DVAD_{VA}
DVAD_{VA}用于检查从DTRD_{TR}中获得的模型函数h()h(\cdot)是否存在过拟合的问题,也就是我们所追求的目标不只是hh在训练集DTRD_{TR}上的损失最小化,也要兼顾在验证集DVAD_{VA}上的损失最小化,如果h()h(\cdot)DVAD_{VA}上的损失很大,h()h(·)将根据DTRD_{TR}进行修订,并在DVAD_{VA}上再次验证。该过程将不断来回,直到在DVAD_{VA}上产生低损失,在验证集上的误差是接近泛化误差的。

DTRD_{TR}DVAD_{VA}的大小之间有一个权衡:对于较大的DTRD_{TR},训练结果会更好,但如果DVAD_{VA}较大,验证会更可靠(噪音更少)。

对于监督学习实际的应用问题,我们一般只需要在提供的已知标签的数据集上进行训练集与验证集的划分,根据所提供的数据集的特点,有如下的划分规则:
①含有时间成分的数据集:一定要遵循过去预测未来的规则,不能利用未来的数据去预测过去的数据。
②不含有时间成分的数据集:可以均匀随机得进行划分

利用验证集进行模型评估的常用方法为k折交叉验证,其原理如下图所示:

image-20220504164717077

六、总结

1)学习的过程:

Learning:h()=argminhH 1DTR(x,y)DTRL(x,yh())Learning:h(\cdot)=\underset{h\in \mathcal{H}}{argmin}~\frac1{|D_{TR}|}\sum_{(x,y)\in D_{TR}}L(x,y|h(\cdot))

2)评估的过程:

Evaluation:ϵTE=1DTE(x,y)DTEL(x,yh())Evaluation:\epsilon_{TE}=\frac{1}{|D_{TE}|}\sum_{(x,y)\in D_{TE}}L(x,y|h(\cdot))

根据监督学习的上述基本原理,我们将在后续文章中开始相关算法的实战!