统计学习综述(1)
机器学习概述
什么是机器学习呢?它本质上是用近似模型对生活中一些真实模型的逼近。我们可以把这个近似模型叫做假设。但是通常情况下,我们选择的假设与生活中的真实情况会有一些出入,比如我们认为宇宙的起源是一场150亿万年前的大爆炸,这个假设能够描述我们观察到的很多现象,但是它与真实的宇宙模型之间有多少误差,我们还无从得知。
于是产生了风险的概念。我们把假设模型和真实模型的差距,叫做风险。严格意义上,风险就是误差的积累。最直观的想法是,使用分类器在样本数据上分类的结果与真实结果的差值来表示这个风险,我们把它取名经验风险。当我们选择了一个假设,或者说我们选择了一个分类器,暂时我们无法得到它与真实模型的差距,但是我们可以做到减小误差,将我们的假设模型不断逼近真实模型。
最初,我们就把这个经验风险的最小化作为机器学习的目标。但是后来发现,很多的分类函数能够在样本集上极小化经验风险,在真实分类的时候却一塌糊涂,即所谓的推广能力差,或者说泛化能力差。
所以,我们又引入了泛化误差界的概念。认为真实误差应该由两部分刻画,一是经验风险,代表了分类器在给定样本上的误差;二是置信风险,代表了分类器未知文本上分类的误差。第二部分不能准确计算,只能给出估计的区间,也使得整个误差只能计算上界,而无法准确的值(所以叫泛化误差界,而不是泛化误差)。
最后我们创造结构风险这个词来描述总体的风险,即结构风险 = 经验风险+置信风险
。目前,统计学习的目标由寻求经验风险最小化变成了寻求结构风险最小化。
感知机
感知机是最简单也很有效的分类模型。让我们从一个二维坐标系开始来理解它。假设现在在二维平面中有一个坐标系,其中有无数的坐标点。我们在这个坐标系中画了一条直线,于是这个二维平面中的点被分成了A和B两类,分别位于直线两侧。如图:
一段时间后,原来的直线经过风吹日晒后消失了,我们不知道原先的直线的位置,于是我们需要找到一条和原来直线无限逼近的新直线来对这些点重新划分。为解决这个问题,现在我们定义了一个计算方法来把这些点分成两类:
f ( x ) = s i g n ( w x + b ) f(x)=sign(wx+b) f(x)=sign(wx+b)
其中
s
i
g
n
sign
sign是符号函数,定义如下:
s
i
g
n
(
x
)
=
{
+
1
,
x
≥
0
−
1
,
x
≤
0
sign(x)= \begin{cases} +1, x \geq 0\\ -1,x \leq 0 \end{cases}
sign(x)={+1,x≥0−1,x≤0
将坐标点带入该函数,得到的值是
1
1
1则被分为一类,得到为
−
1
-1
−1被分为另一类。为了得知具体的函数,我们需要找到
w
w
w和
b
b
b的值,那么我们应该如何确定这个值?我们先给
w
w
w和
b
b
b分别确定初始值,之后进行有限的输入:
- 如果模型运算结果与实际结果相符,不做任何额外操作,继续输入新的数据。
- 如果模型运算结果与实际结果不符(也就是误分类),调整 w w w, b b b的值,使得我们的模型朝着真实模型逼近。
我们最终得到的 w w w和 b b b,要使得模型运算的结果和实际的差距最小。
在这里引出损失函数的定义,损失函数就是用来表现预测与实际数据的差距程度。求损失函数极小值的过程就是求 w w w, b b b的过程。
在损失函数中,这个差距程度怎么体现呢?直观想法是,将损失函数表示为被误分类的点的总数,但是在这种情况下,损失函数将不是 w w w, b b b的连续可导函数,不方便我们求极小值。
于是我们选择使用将被误分类的所有点距离模型表示直线或平面的总距离作为损失函数的意义。
比如当点被误分类,我们矫正时可以将这个模型表示的平面或者直线向该点移动一定距离。但是这样操作后,可能这个点达到了最优,但对于这个空间中的所有点来说,可能反而会随着这个调整而出现更多的误差点。因此我们需要确保总体的误差最小,而不是单个点最优,才能保证 w w w, b b b的调整总是朝着好的方向进行。换成距离的概念就是说误差点距离平面/直线的总长度最小,我们训练得到的模型最接近真实模型。这里的距离更准确的描述是,“到超平面的距离”,所以本质上感知机就是用于确定一个超平面1用于分类。
感知机虽然能够较好地分类,但是它依旧有明显的缺点。我们可以想到,上述例子是一个线性可分的例子,如果给定的样本线性不可分,感知机就会茫然不知所措。这个时候我们引入了支持向量机(svm)。
支持向量机(SVM)
我们的灵感来源如下:
如图,我们把ab点之间的红色部分所有点定为A类,两边的黑色点定为B类。可以看出,此时我们不能找到一个线性函数(即二维空间的直线)将两类正确分开。
但是我们可以找到一条形如
y
=
c
1
x
2
+
c
2
x
+
c
3
y=c_1x^2+c_2x+c_3
y=c1x2+c2x+c3的二次曲线,并且通过点在这条曲线的上方或者下方来判断点所属的类别。重点来了,我们令
z
=
[
1
,
x
,
x
2
]
,
a
=
[
c
1
,
c
2
,
c
3
]
z=[1,x,x^2],a=[c1,c2,c3]
z=[1,x,x2],a=[c1,c2,c3],两个向量作内积,所以原函数可以表示为
y
=
a
z
y=az
y=az。
在任意维度的空间中,因为自变量 z z z 的次数为1,这种形式的函数都是一个线性函数(只不过其中的 a a a和 z z z都是多维向量)。于是我们把原来在二维空间中一个线性不可分的问题,映射到了四维空间,并且变成了线性可分的。我们得到了新思路,也就是说:向高维空间转化,使其变成线性可分的。
我们需要这样的映射,将低维空间中的向量映射到高维空间中,我们把这个称为核方法,而往往高维空间中的向量内积值不好计算,于是我们期望找到在低维空间中的某个运算,恰好等于高维空间中的内积运算,这就是核函数。有了核函数,我们将不必费神去研究从低维到高维的过程,而是可以直接通过核函数,求解高维空间的内积了。
本质上,svm是感知机的一种优化,在感知机公式的基础上,有了对核函数的理解,我们可以得到 f ( x ) = s i g n ( w ⋅ K ( x ) + b ) f(x) = sign(w · K(x) + b) f(x)=sign(w⋅K(x)+b),其中 , K ( x ) ,K(x) ,K(x) 为核函数(在感知机模型中, K ( x ) = x K(x) = x K(x)=x),这就是支持向量机的模型表示。
现在我们回到之前感知机部分例子中二维平面的点,我们发现,想要去找到那样一条用于划分的线,并不是唯一的。我们把它稍微旋转或者平移一下,还是可以达到同样的效果。那么对于同一个问题存在的多个分类函数,我们需要确定一个指标来量化它的“优秀”程度,我们把这个指标叫做分类间隔。形象地,最优的分类函数(即用于划分的超平面),就是分隔间距最大的那中间那个超平面。这个超平面由一些关键点组成,这些关机点来自样本,这就是支持向量。由于现实中很难确定这样的超平面(不管是线性超平面还是经过核变换到高维空间的超平面),我们引入松弛变量允许一些样本出错,但我们希望出错的样本越少越好,所以松弛变量也有限制。引入松弛变量的间隔问题成为软间隔。svm中软间隔的提出,允许数据有了一些线性不可分性。
逻辑回归
在我们已经给出的感知机模型中,通过 s i g n ( ⋅ ) sign(·) sign(⋅) 函数将 x 映射到二值空间,而 s i g n sign sign函数存在一个问题,就是存在阶跃,也就是说这个模型不够光滑。为了解决这个问题,使得函数有较好的连续性,我们引入逻辑回归。
我们先给出逻辑回归函数的曲线:
该函数称为 s i g m o i d sigmoid sigmoid函数,也即 l o g i s t i c logistic logistic函数,是一条S形的曲线,并且曲线在中心点附近的增长速度较快,在两段的增长速度较慢。 w w w值越大,曲线中心的增长速度越快。从图上可知, Y Y Y的值域为 ( 0 , 1 ) (0,1) (0,1),也就是 s i g m o i d sigmoid sigmoid激活函数根据将原在 ( − ∞ , + ∞ ) (-∞ ,+∞ ) (−∞,+∞)范围内的取值范围拉到 ( 0 , 1 ) (0,1) (0,1)之间,它刚好满足概率分布为 ( 0 , 1 ) (0,1) (0,1)的要求,所以我们可以实现用概率去描述分类器,更加方便。我们可以这样判定,低于0.5的归为一类,大于等于0.5的归为一类,这样就可以把全局归为两类了,即可以对样本数据进行二分类。所以逻辑回归模型可以理解为感知机与概率模型的融合,也是感知机的另一优化。
逻辑回归的模型表示:
P
(
Y
=
1
∣
x
)
=
e
x
p
(
w
x
+
b
)
1
+
e
x
p
(
w
x
+
b
)
P(Y = 1|x)=\dfrac{exp(wx + b) }{1 + exp(wx + b)}
P(Y=1∣x)=1+exp(wx+b)exp(wx+b)
P ( Y = 0 ∣ x ) = 1 1 + e x p ( w x + b ) P(Y = 0|x) =\dfrac{1 }{1 + exp(wx + b)} P(Y=0∣x)=1+exp(wx+b)1
朴素贝叶斯
首先,我们介绍下全概率公式:
P
(
B
)
=
∑
i
=
1
N
P
(
A
i
)
P
(
B
∣
A
i
)
P(B)=\sum_{i=1}^NP(A_i)P(B|A_i)
P(B)=i=1∑NP(Ai)P(B∣Ai)
条件概率公式:
P
(
A
∣
B
i
)
=
P
(
A
B
i
)
P
(
B
i
)
P(A|B_i)=P(AB_i)P(B_i)
P(A∣Bi)=P(ABi)P(Bi)
以及贝叶斯公式:
P
(
A
∣
B
)
=
P
(
B
∣
A
)
⋅
P
(
A
)
P
(
B
)
P(A|B)=\dfrac{P(B|A)⋅P(A)}{P(B)}
P(A∣B)=P(B)P(B∣A)⋅P(A)
我们把
P
(
A
∣
B
)
P(A|B)
P(A∣B)看成“给定一个特征B分类到A类”的概率;
P
(
B
∣
A
)
P(B|A)
P(B∣A)的意思看成已知某个特定类别后,此种类别所含有特征的发生概率;
P
(
A
)
P(A)
P(A)是“是A类”这个事件发生的概率,
P
(
B
)
P(B)
P(B)是“有这个特征”这个事件发生的概率。
即用A作为分类的类别,而B作为输入的特征。上面的公式变形为:
P
(
类
别
∣
特
征
)
=
P
(
特
征
∣
类
别
)
⋅
P
(
类
别
)
P
(
特
征
)
P(类别|特征)=\dfrac{P(特征|类别)⋅P(类别)}{P(特征)}
P(类别∣特征)=P(特征)P(特征∣类别)⋅P(类别)
也就是说把每个特征看做是事件,把类别也看做是事件。在实际问题中,是给定多个特征,判别这些特征是属于哪一类别的,我们只要把属于每一个类别的事件概率都求一遍看哪个大就能判断了。
从概率的角度出发建立的最简单的分类模型,我们需要考虑两点:
- 考虑 X 是一维和多维随机变量时候 P ( Y ∣ X ) P(Y|X) P(Y∣X) 的展开式
- 考虑 X 是多维随机变量时各维独立性对展开式的影响。
朴素贝叶斯的模型表示:
P
(
Y
=
C
k
∣
X
=
x
)
=
P
(
X
=
x
∣
Y
=
C
k
)
∗
P
(
Y
=
C
k
)
P
(
X
=
x
)
P(Y=C_k|X=x)= \dfrac{P(X=x|Y=C_k)∗P(Y=C_k)} {P(X = x)}
P(Y=Ck∣X=x)=P(X=x)P(X=x∣Y=Ck)∗P(Y=Ck)
当输入空间 X 为一维空间(及 x 为一维数据)时,该函数和贝叶斯概率求解的方法相同。当输入空间高于一维时,不同维度之间的相关性使得该公式更加复杂,因此我们假设这三个特征之间是相互独立的,也就是说,条件概率 P ( X = x ∣ Y = c k ) P(X=x | Y=c_k) P(X=x∣Y=ck) 各个条件相互独立。
这种条件独立性的假设就是朴素贝叶斯法“朴素”二字的由来。这一假设让朴素贝叶斯法变得简单,但是有时候会牺牲一定的分类准确率。
因此只需要利用多个特征,通过以上公式计算出不同类别的概率,在比较大小,就能实现对样本的分类。
最大熵模型
我们用生活中一个很常见的例子来引出最大熵模型。假设我们现在有一个骰子,它有六个面,那么投一次得到数字6的概率是多少?显而易见是 1 6 \dfrac{1}{6} 61,其实这就是最大熵模型的一个简单应用。
对于这个骰子问题,我们并不知道它到底是均匀的还是不均匀的,我们唯一知道的条件是出现的总概率总是等于1的。
我们把这个已知的条件称为约束条件。除了约束条件,我们对这个骰子一无所知,所以最符合现实的假设就是这个骰子是个均匀的骰子,每一点出现的概率是一个等概率事件。
所谓的最大熵原理其实就是指包含已知信息,不做任何未知假设,把未知事件当成等概率事件处理。
我们再来举一个例子,现在有一个黑色箱子,里面有颜色分别为红,绿,蓝的球,除此之外我们一无所知。这样我们认为取得红球的概率是 1 3 \dfrac{1}{3} 31.
这时,有知情人士透露,取得绿球的概率为 3 5 \dfrac{3}{5} 53,那么我们就多了一个约束条件。根据最大熵原理,我们加入新的约束条件,然后继续把剩下的做等概率处理。现在再来考虑取得红球的概率,我们认为是 2 5 ∗ 1 2 = 1 5 \dfrac{2}{5}*\dfrac{1}{2}=\dfrac{1}{5} 52∗21=51。
计算最大熵根据两个前提去解决问题:
- 解决问题要满足一定的约束条件。
- 不做任何假设,就是在约束外的事件发生概率为等概率。
明白了最大熵模型的大致思路后,我们现在引入信息熵的概念,把这个简单例子“量化”,用来解决更复杂的问题。
首先,我们怎么理解这里的“熵”呢?这个熵和热力学上的熵不一样,在这里,我们用熵来描述信息的不确定性程度。
现在我们来看看信息熵到底是怎么定义的,一个系统的信息熵其实就是系统中每一个事件的概率乘以 l o g log log概率,然后把所有事件相加后取负数。因为概率总是在 0 − 1 0-1 0−1之间,所以 l o g log log后会小于0,取了负号以后熵就是正数了。
给出信息熵的定义如下:
H
(
P
)
=
−
∑
x
P
(
x
)
l
o
g
P
(
x
)
0
≤
H
(
P
)
≤
l
o
g
∣
X
∣
H(P)=-\sum_xP(x)logP(x)\\ 0 ≤H(P) ≤ log|X|
H(P)=−x∑P(x)logP(x)0≤H(P)≤log∣X∣
一般情况下,对于一个有n个事件的系统,每一个事件发生的概率为 p i p_i pi,唯一已知的约束条件是事件发生的总和等于 1 1 1。
对 H ( p ) H(p) H(p)函数进行数学计算,寻找满足系统的熵最大时的事件概率。我们可以得到,当 p 1 = p 2 = … = p n = 1 n p_1=p_2=…=p_n=\dfrac{1}{n} p1=p2=…=pn=n1时,系统的熵最大。
我们之前提过信息熵表示不确定程度,所以熵最大,也就是系统的不确定程度最大,代表系统中没有任何个人的主观假设。以硬币为例,你当然也可以认为硬币正面出现的概率是 0.6 0.6 0.6,背面是 0.4 0.4 0.4,但是这种假设中就包含了你的个人假设,并不是完全客观的,当然你可以通过后续实验验证你的观点,但是在一开始,在你没有得到任何信息的前提下,假设正面和背面出现的概率各是 0.5 0.5 0.5才是最客观的。也就是说,面对未知事件,我们应该假设事件是等概率的,使得系统的熵最大,让我们的推测更加合理。
超平面是n维欧氏空间中余维度等于一的线形子空间,也就是必须是(n-1)维度。这是平面中的直线、空间中的平面之推广(n大于3才被称为“超”平面)。 ↩︎