统计学习基础知识
现在我们开始统计学习系列课程的学习,首先先给大家介绍一下统计学习的基础知识。
1. 统计学习种类
统计学习一般分为两个主要类别:监督学习(predictive learning, supervised learning)以及非监督学习(descriptive learning, unsupervised learning),因为监督学习在实际中应用更为广泛,我们将主要精力放在监督学习上。
1.1 监督学习
监督学习的目标是在一个输入输出对的集合中(训练集) D = ( x i , y i ) i = 1 N D={(x_i,y_i)}_{i=1}^N D=(xi,yi)i=1N学习一个从输入变量 x x x到输出变量(标签) y y y的映射, N N N是训练样本(采样)的数目。简单来看, x i x_i xi可以是一个向量,例如一个人的身高,体重等,复杂来看 x i x_i xi可以是一张图片,一句话,一封邮件,一个时间序列等等。输出 y i y_i yi可以是连续的,也可以是离散的,当 y i y_i yi是连续的时,该学习问题被称为回归(regression)问题,当 y i y_i yi是离散的时,该学习问题被称为分类(classification)问题。
1.1.1 分类问题
分类问题的输出在 y ∈ { 1 , 2 , 3 , . . . , C } y\in\left\{1,2,3,...,C\right\} y∈{ 1,2,3,...,C}中取值, C = 2 C=2 C=2对应二分类问题, C > 2 C>2 C>2对应多分类问题。
例如:
这是一个二分类问题,左侧是形象化描述,方框中的训练集用图形展示,右侧是数据化描述,训练集用表格展示。训练数据有很多个形状和颜色,某些搭配是属于‘yes’类的,某些搭配是属于’no’类的,我们要推断新出现的蓝色的月亮,黄色的环和蓝色的箭头属于哪一类(泛化能力)
概率描述的必要性
因为新出现的蓝色的月亮,黄色的环和蓝色的箭头是在训练集中没有的,我们无法100%确定他们属于哪一类别,所以要引入概率来描述这种不确定性
用条件概率 p ( y ∣ x , D , M ) p(y|x,D,M) p(y∣x,D,M)来描述输出 y y y的概率分布, x x x是新出现的输入, D D D是训练集, M M M是选择的模型,在上述例子中, p ( y e s ∣ 蓝 色 月 亮 , D , M ) + p ( n o ∣ 蓝 色 月 亮 , D , M ) = 1 p(yes|蓝色月亮,D,M)+p(no|蓝色月亮,D,M)=1 p(yes∣蓝色月亮,D,M)+p(no∣蓝色月亮,D,M)=1。一般情况下, D D D和 M M M都是确定的,所以条件概率也被简写为 p ( y ∣ x ) p(y|x) p(y∣x)。
给定输出条件概率,我们一般用取值最大的猜测作为新输入的推断(预测)输出 y ^ \hat{y} y^:
y ^ = f ^ ( x ) = arg max c = 1 , 2 , . . . , C p ( y = c ∣ x ) \hat{y}=\hat{f}(x)=\mathop{\arg\max}_{c=1,2,...,C}p(y=c|x) y^=f^(x)=argmaxc=1,2,...,Cp(y=c∣x)
这对应着最可能的类别标签,也叫作 p ( y ∣ x ) p(y|x) p(y∣x)的众数。
一些实际应用
文本分类
x x x是文本的一种结构化表示,文本分类是计算概率 p ( y = c ∣ x ) p(y=c|x) p(y=c∣x),一个特殊的应用是垃圾邮件过滤,其中 y = 1 y=1 y=1代表垃圾邮件, y = 0 y=0 y=0代表非垃圾邮件
大部分分类学习算法要求输入向量 x x x是定长的,可以用bag of words的方式来表示变长的文档,基本思路是当词 j j j在文档 i i i中出现时 x i j = 1 x_{ij}=1 xij=1,这样训练集就可以被结构化为一个binary的共现矩阵,在共现矩阵上可以应用各种分类算法来学习规律

图片分类

1.1.2 回归问题
分类问题的输出 y y y是在一个连续的区间内取值,在推断时取后验概率分布的期望 E ( y ∣ x ) E(y|x) E(y∣x)。其应用例子包括:
预测某只股票第二天的最高股价
预测某篇文章接下去1小时的点击次数
预测一个机器人手臂在空中的位置
预测某个医院科室接下去一个月的就诊人数
回归问题和分类问题的主要区别不是输出的离散或者连续(就诊人数也可以认为是一个多分类问题),二者最主要的区别是对输出的分布假设不同,后续我们会涉及到。
1.2 非监督学习
非监督学习只有输入数据 x x x而没有输出 y y y,我们的目标是挖掘 x x x中感兴趣的信息,非监督学习有时也被称为知识发现,其代表就是聚类,主成分分析,关联分析,协同过滤,社区发现等。以聚类为例:小时候你在区分猫和狗的时候,别人和你说,这是猫,那是狗,最终你遇到猫或狗你都能区别出来(而且知道它是猫还是狗),这是监督学习的结果。但如果小时候没人教你区别猫和狗,不过你发现猫和狗之间存在差异,应该是两种动物(虽然能区分但不知道猫和狗的概念),这是无监督学习的结果。
聚类正是做这样的事,按照数据的特点,将数据划分成多个没有交集的子集(每个子集被称为簇)。通过这样的划分,簇可能对应一些潜在的概念,但这些概念就需要人为的去总结和定义了。
聚类可以用来寻找数据的潜在的特点,还可以用来其他学习任务的前驱。比如市场分割。也许你在数据库中存储了许多客户的信息,而你希望将他们分成不同的客户群,这样你可以对不同类型的客户分别销售产品或者分别提供更适合的服务。
聚类示意:

2. 统计学习中的基本概念
让我们看看一个简单的案例,曲线拟合:
我们有如下的数据点,这个数据点是通过 y = s i n ( 2 π x ) y=sin(2\pi x) y=sin(2πx)加上一些高斯噪声生成的

现在考虑一个关于 x x x的多项式拟合上述蓝颜色的点:
f ( x , w ) = w 0 + w 1 x + w 2 x 2 + . . . + w M x M = ∑ j w j x j f(x,w)=w_0+w_1x+w_2x^2+...+w_Mx^M=\sum_jw_jx^j f(x,w)=w0+w1x+w2x2+...+wMxM=j∑wjxj
虽然 f ( x , w ) f(x,w) f(x,w)是关于 x x x的非线性函数,但是是关于参数 w w w的线性函数,这种和参数保持线性关系的模型被称为线性模型。
可以通过最小化 f ( x , w ) f(x,w) f(x,w)和 y y y的差别来求解参数 w w w,其中一种是误差的平方和:
E ( w ) = 1 2 ∑ n { f ( x n , w ) − y n } 2 E(w)=\frac12\sum_n\{f(x_n, w)-y_n\}^2 E(w)=21n∑{
f(xn,w)−yn}2
因为 E ( w ) E(w) E(w)是关于 w w w的二次函数,所以其导数是关于 w w w的一次函数, E ( w ) E(w) E(w)的最小值是唯一的,当数据量比较小时,可以通过最小二乘直接获得解析解,在数据量比较大时,一般通过梯度下降法来逼近这个解。
2.1 统计学习三要素:模型,策略,算法
模型: 在上述的曲线拟合问题中,线性函数 f ( x , w ) f(x,w) f(x,w)就是模型,当然我们也可以选择其他的线性模型或者非线性模型,选择合适的模型是应用统计学习算法的第一步
策略: 有了模型,统计学习接着需要考虑的是按照什么样的准则学习最优的模型,在上述的曲线拟合问题中,误差平方和 E ( w ) E(w) E(w)就是一个准则(策略,损失函数),其余的准则还有0-1损失函数,绝对值损失函数,对数损失函数等
算法: 有了准则,就要考虑在该准则的约束下如何寻找参数 w w w的最小值,最常用的就是梯度下降法或者同类别的基于梯度的算法(我更倾向于叫这一步为优化或者寻优,算法是一个比较泛的概念)
2.2 欠拟合和过拟合
上述模型,策略和算法都是针对模型的学习过程(拟合过程)的,而统计学习最终是要预测我们没有见过的样本(泛化能力),这里就涉及到一个在训练样本上的拟合程度的问题,是损失函数 E ( w ) E(w) E(w)越小泛化能力越强吗?答案是不一定,还是考虑上述曲线拟合问题,当多项式的阶数 M M M不同时,拟合的效果如下:
可以看到在 M = 0 M=0 M=0和 M = 1 M=1 M=1时,模型未能很好的拟合训练集的散点,在 M = 3 M=3 M=3时看起来还不错,在 M = 9 M=9 M=9时拟合的程度最好,事实上,在 M = 9 M=9 M=9时,可以做到 E ( w ) = 0 E(w)=0 E(w)=0(思考一下为什么),但在 M = 9 M=9 M=9时,拟合出来的曲线和真正的数据分布的曲线 y = s i n ( 2 π x ) y=sin(2\pi x) y=sin(2πx)相去甚远,当有一个新的数据点出现时,例如在左边的第一个和第二个点之间,预测曲线会给出一个非常差的预测结果,此时称为模型过拟合。而在 M = 0 M=0 M=0和 M = 1 M=1 M=1时,称为欠拟合。
事实上,当 M M M从 0 0 0取到 9 9 9时,有如下的训练误差和测试误差的对比:

以及不同模型的参数取值:

2.3 如何避免过拟合
2.3.1 从模型出发(交叉验证,AIC, BIC)
从曲线拟合问题的直观上来看,我们可以选择复杂度较低的模型,例如 M = 3 M=3 M=3。那么在面对一般化的问题时,该如何选取合适复杂度的模型呢?可以从训练的数据集中抽出一部分,作为验证集,验证集不参与训练,但是能够作为一个假的测试集来验证模型是欠拟合还是过拟合。
分割训练集和验证集,也是比较主观的,如果分割的不合适,可能也对选出的模型泛化能力有负面作用,另外,训练数据是比较珍贵的,扔掉一部分数据是比较可惜的,所以会采取利用全部数据的交叉验证(cross validation)的方式:

上图描述的是 10 10 10折交叉验证,常用的还有 3 3 3折, 5 5 5折, N N N折( N N N为样本数量)交叉验证, N N N折交叉验证也称为留一交叉验证(leave one out cross validation),交叉验证选择在验证集上平均误差最低的模型。交叉验证也存在一些缺陷,当模型比较复杂时,要训练和测试多次,尤其当可选择的模型范围很大时,训练和测试的次数会成指数级增加。但交叉验证仍然是在数据集有限的情况下最常用也是最好用的避免过拟合的方式之一。
此外,还有计算量相对较小的 A I C AIC AIC和 B I C BIC BIC准则, A I C AIC AIC由日本统计学家赤池弘次在1974年提出,$BIC$1978年由Schwarz提出。他们提供了权衡估计模型复杂度和拟合数据优良性的标准。
AIC准则的其中一种表达式为:
A I C = k + E ( w ) AIC=k+E(w) AIC=k+E(w)
BIC准则的其中一种表达式为:
B I C = k l n ( N ) + E ( w ) BIC=kln(N)+E(w) BIC=kln(N)+E(w)
其中 k k k代表模型参数的个数, N N N代表训练集样本数目。通常 A I C AIC AIC或 B I C BIC BIC的取值越小,模型泛化能力越强。
2.3.2 从策略出发(正则化)
在参数取值图中,我们可以看到, M = 9 M=9 M=9的多项式模型的参数取值和波动非常大,虽然这个模型有很强的能力来拟合训练集。而在 M = 3 M=3 M=3时,参数是在一个相对较为合理的范围之内的,那么如何把模型的参数限制在一个较为合理的范围之内呢?我们考虑在损失函数 E ( w ) E(w) E(w)上加入一个对参数取值的惩罚:
E ( w ) = 1 2 ∑ n { f ( x n , w ) − y n } 2 + λ 2 ∣ ∣ w ∣ ∣ 2 E(w)=\frac12\sum_n\{f(x_n, w)-y_n\}^2+\frac\lambda2||w||^2 E(w)=21n∑{
f(xn,w)−yn}2+2λ∣∣w∣∣2
参数 λ \lambda λ用来控制惩罚的程度, ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣是 L 2 L2 L2范数,在回归问题中,上述策略被称为岭回归(ridge regression)。
或者:
E ( w ) = 1 2 ∑ n { f ( x n , w ) − y n } 2 + λ ∣ ∣ w ∣ ∣ 1 E(w)=\frac12\sum_n\{f(x_n, w)-y_n\}^2+\lambda||w||_1 E(w)=21n∑{
f(xn,w)−yn}2+λ∣∣w∣∣1
∣ ∣ w ∣ ∣ 1 ||w||_1 ∣∣w∣∣1是 L 1 L1 L1范数,在回归问题中,上述策略被称为lasso回归。他们的统计学意义我们后续会涉及。
2.3.3 从寻优出发(Early Stopping)
考虑上述多项式拟合 M = 9 M=9 M=9的情况,那么大的参数取值是寻优算法通过不断迭代得到的。那么我们在寻优时,是否能否通过早一些停止迭代来避免这个问题呢,答案是可以的,而且在实际工程中这个办法也很有效,就是早停法(Early Stopping)。
一般在算法寻优时,训练集和验证集的误差呈如下的曲线:

我们可以根据验证集误差的变化来决定何时停止训练,选取参数被调整到最合适的模型。实际工程中,早停法有很多种应用方式,例如在连续多次迭代验证集误差都持续上升则停止,上升比例超过一定程度停止等等。
2.3.4 从数据出发(增加数据集)
考虑上述多项式拟合 M = 9 M=9 M=9的情况,当我们把数据量从 10 10 10个增加到 15 15 15个和 100 100 100个的时候,拟合曲线有如下的变化:
直观上来看,大的数据量和大的模型容量是适配的,这样能在很大程度上避免过拟合,但是在实际工程中仍然要结合交叉验证,正则化和早停法一起使用。另外,有标注的样本是非常昂贵的,一方面需要在实际生产过程中采集样本,另一方面要给每个样本打上一个合适的标签(答案) y y y,有些标签是随着业务运行获得的,有些标签是需要人为标注的。
例如,在机器学习在风控场景的应用中,为了预测一个客户未来贷款违约的可能性,我们要找很多历史上违约和履约的客户进行学习,而违约的客户量本身就是很少的,坏样本(违约)很珍贵。
在图像识别中,为了识别一张图片是猫还是狗,需要人为给每张图片标注猫,狗或者其它的分类
为了识别一张图片上的文字区域,需要人为给每个文字区域画上框:

自动驾驶为了识别车道线,行人,建筑物,汽车等元素,需要人为给每个像素点做标注:

自然语言处理为了识别每个单词的词性,需要人为给每个汉字做标注:
今年海钓比赛在厦门市与金门之间的海域举行。
今(O)年(O)海(O)钓(O)比(O)赛(O)在(O)厦(B-LOC)门(I-LOC)市(E-LOC)与(O)金(B-LOC)门(E-LOC)之(O)间(O)的(O)海(O)域(O)举(O)行(O)。
数据是AI的“衣食父母”,尤其在现在深度学习算法更加依赖大量的数据,有标注的数据十分珍贵,数据也是AI公司的核心竞争能力之一。
2.4 过拟合产生的原因
令 f ( x ; D ) f(x;D) f(x;D)为在训练集 D D D上学习的函数 f f f在新样本 x x x上的预测输出, y y y代表真实的输出
我们考虑在同一个学习场景下的很多个数据集,例如在曲线拟合案例中,在 y = s i n ( 2 π x ) y=sin(2\pi x) y=sin(2πx)上生成很多个 N N N个点的数据集,学习算法在这些数据集上的期望预测为 f ˉ ( x ) = E D ( f ( x ; D ) ) \bar{f}(x)=E_D(f(x;D)) fˉ(x)=ED(f(x;D))
使用样本数相同的不同训练集产生的方差(variance)为:
v a r ( x ) = E D ( ( f ( x ; D ) − f ˉ ( x ) ) 2 ) var(x)=E_D((f(x;D)-\bar{f}(x))^2) var(x)=ED((f(x;D)−fˉ(x))2)
方差的含义:方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响。
期望输出与真实标记的差别称为偏差(bias),即:
b i a s ( x ) = ( f ˉ ( x ) − y ) 2 bias(x)=(\bar{f}(x)-y)^2 bias(x)=(fˉ(x)−y)2
偏差的含义:偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力。
模型的泛化能力可以分解为偏差和方差的和:
E D ( ( f ( x ; D ) − y ) 2 ) = E D ( ( f ( x ; D ) − f ˉ ( x ) ) 2 ) + ( f ˉ ( x ) − y ) 2 E_D((f(x;D)-y)^2)=E_D((f(x;D)-\bar{f}(x))^2)+(\bar{f}(x)-y)^2 ED((f(x;D)−y)2)=ED((f(x;D)−fˉ(x))2)+(fˉ(x)−y)2
一般来说,偏差与方差是有冲突的,这称为偏差-方差窘境(bias-variance dilemma)。考虑上述曲线拟合问题,如果我们在 y = s i n ( 2 π x ) y=sin(2\pi x) y=sin(2πx)上新采样 10 10 10个不同的样本点,那么 9 9 9阶的多项式将会发生非常大的波动,但仍然能拟合这 10 10 10个点,这就是低偏差,高方差的一个表现,最后泛化误差仍然很高。下图给出了一个示意图:

一个形象的打靶示意图来解释bias和variance的区别:

那么如何合理的在bias和variance中寻找一个折中呢,这时就可以考虑应用2.3节中的方法了。
2.5 最大似然估计和贝叶斯估计
2.5.1 贝叶斯定理
A A A和 B B B代表两个事件,则 A A A和 B B B共同发生的概率为:
P ( A , B ) = P ( A ∣ B ) P ( B ) = P ( B ∣ A ) P ( A ) P(A,B)=P(A|B)P(B)=P(B|A)P(A) P(A,B)=P(A∣B)P(B)=P(B∣A)P(A)
贝叶斯定理有如下表示:
P ( A ∣ B ) = P ( B ∣ A ) P ( A ) P ( B ) P(A|B)=\frac{P(B|A)P(A)}{P(B)} P(A∣B)=P(B)P(B∣A)P(A)
我们开看如下的具体案例:
假设一个人去医院做一个结肠癌的检查,这个检查不太准确,一个确定有癌症的人可以有80%的概率检查为阳性,一个没有癌症的人可以有10%的概率检查为阳性,即 p ( x = 1 ∣ y = 1 ) = 0.8 p(x=1|y=1)=0.8 p(x=1∣y=1)=0.8, p ( x = 1 ∣ y = 0 ) = 0.1 p(x=1|y=0)=0.1 p(x=1∣y=0)=0.1
其中 y = 1 y=1 y=1为这个人有癌症, y = 0 y=0 y=0为这个人没有癌症, x = 1 x=1 x=1为检查为阳性。
假设这个人的检测呈阳性,那么直观来看他有很大的几率有结肠癌。但是如果考虑结肠癌在人群中发生的概率 P ( y = 1 ) = 0.004 P(y=1)=0.004 P(y=1)=0.004(先验知识),那么此时有:
P ( y = 1 ∣ x = 1 ) = P ( x = 1 ∣ y = 1 ) P ( y = 1 ) P ( x = 1 ∣ y = 1 ) P ( y = 1 ) + P ( x = 1 ∣ y = 0 ) P ( y = 0 ) = 0.031 P(y=1|x=1)=\frac{P(x=1|y=1)P(y=1)}{P(x=1|y=1){P(y=1)}+P(x=1|y=0){P(y=0)}}=0.031 P(y=1∣x=1)=P(x=1∣y=1)P(y=1)+P(x=1∣y=0)P(y=0)P(x=1∣y=1)P(y=1)=0.031
也就是说只有百分之三的概率这个人真正有结肠癌,这就是先验知识对观测的修正作用,贝叶斯定理在统计学习中应用十分广泛,下两小节我们考虑一个简单的参数估计和统计推断问题来探索一下贝叶斯估计的应用。
2.5.2 最大似然
考虑一个扔硬币问题,硬币投掷的结果 x ∈ { 0 , 1 } x\in\{0,1\} x∈{ 0,1},其中 x