监督学习定义
在开始介绍监督学习之前,根据个人的理解,我们给监督学习一个形式化的定义:
给定数据集 S={x(i),y(i)},1≤i≤m S = { x ( i ) , y ( i ) } , 1 ≤ i ≤ m ,假设集合 H={h1,h2,...,hk} H = { h 1 , h 2 , . . . , h k } ,以及经验误差 εˆ=1m∑m1I{hi(x(i))≠y(i)} ε ^ = 1 m ∑ 1 m I { h i ( x ( i ) ) ≠ y ( i ) } , 机器学习的目的是寻找经验误差最小的 hi h i 满足:
hˆ=argminhi∈H εˆ(hi) h ^ = a r g m i n h i ∈ H ε ^ ( h i )
数据集S包含m个样本,针对不同的数据有不同的表现形式。对于 y(i) y ( i ) 来说,如果其值是连续的则代表着一类回归问题,例如如房屋面积与价格的数据集。如果其值是离散的,则代表着一类分类问题,例如判断垃圾邮件的数据集。
假设集合 H H 可以理解成我们对与 x(i) x ( i ) 之间关系的一种猜想,且所有 hi h i 具有相同的形式,即 hi h i 或者是线型模型,或者是非线性模型,亦或者是神经网络,SVM,不同的是每个 hi h i 的参数是不同的。例如,对于线型模型 y(i)=θ(i)0+θ(i)1∗x(i) y ( i ) = θ 0 ( i ) + θ 1 ( i ) ∗ x ( i ) ,对应于每一个 hi h i 有一组 θ(i)0 θ 0 ( i ) , θ(i)1 θ 1 ( i ) 。
经验误差 εˆ ε ^ 表达的含义是我们希望找到这样一个 hi h i ,它在S上的计算的错误率,即针对每一个样本应用假设 hi h i 计算 hi(x(i)) h i ( x ( i ) ) 的值,其中 hi(x(i))≠y(i) h i ( x ( i ) ) ≠ y ( i ) 的样本数量最小。其中, I{true}=1 I { t r u e } = 1 , I{false}=0 I { f a l s e } = 0 。
监督问题解决方法
机器学习问题可以理解为在已知的解空间中搜索最优解的问题。搜索最优解的方法可以分为两类:判别学习方法(discriminative learning algorithm)和生成学习算法(generate learning algorithm)。
具体的说,判别学习算法是直接对
p(y|x)
p
(
y
|
x
)
进行建模,给出数据集中样本的特征x到分类标记y的映射关系。而生成学习算法是对每一个类别分别建模,用新的样例去匹配每一个模型,匹配度高的作为新样例的类别。其涉及到贝叶斯概率的知识,生成学习算法需要分别对条件概率
p(x|y)
p
(
x
|
y
)
和后验概率进行建模,然后按照贝叶斯公式:
p(y|x)=p(x|y)p(y)p(x)
p
(
y
|
x
)
=
p
(
x
|
y
)
p
(
y
)
p
(
x
)
求出针对每一个模型的后验概率。实际中,我们往往省略
p(x)
p
(
x
)
,所以最终的要计算的是:
判别学习算法
再深入介绍判别是算法之前,我们首先来介绍两个有用的概念指数分布和广义线型模型。
指数分布
指数分布是指可以表示为指数形式的概率分布。指数分布的形式如下:
广义线型模型
在指数分布中, η η 以不同的映射与其他概率分布函数中的参数产生联系,从而得到不同的模型(参见下两节),例如逻辑回归模型以及最小二乘模型。这种能力可以形式化的定义为广义线型模型(Generalized Linear Model,GLM):
- y|x;θ∼ExpFamily(η) y | x ; θ ∼ E x p F a m i l y ( η ) ,即给定样本x与参数 θ θ ,y服从指数分布族中的某个分布
- 给定一个x, 我们需要的目标函数 hθ=E[T(y)|x] h θ = E [ T ( y ) | x ]
- η=θTx η = θ T x
文章开始部分提到,监督学习的目的是寻找是误差最小的假设 h h ,我们首先面对的问题就是如何确定的形式,这就是广义线型模型的作用所在,在接下来的两节里我们将介绍如用使用广义线型模型推导出最小二乘模型和逻辑递归模型。
最小二乘模型
首先,我们将高斯分布转换成指数族分布。为了方便计算,将高斯分布的方差置为1,推导过程如下:
由指数分布族公式可知:
由广义线型模型可知:
至此,我们已经确定了假设函数h的形式,并发现假设函数中一个未知变量
θ
θ
,最终问题转换成如何求解
θ
θ
。值的注意的是,这里的
θ
θ
和x是向量。根据广义线型模型和上述的推导过程,我们可以知道
y(i)|x(i);θ∼N(θTx(i),σ)
y
(
i
)
|
x
(
i
)
;
θ
∼
N
(
θ
T
x
(
i
)
,
σ
)
,表达成概率的形式为:
这样,我们得到关于 θ θ 的似然函数:
这里强调一下似然函数和概率的区别,个人理解它们本质上是一个表达式,关键在于以哪个参数为未知量。即如果认为上述表达式是关于随机变量x,y的,则该表达式是概率。反过来,如果认为其是关于 θ θ 的一个一元函数,则就是似然函数。最大似然函数估计也就是计算是表达式去最大值的未知量 θ θ 。
为了方便计算,我们对上式右边取对数:
由上式可知,为了使 L(θ) L ( θ ) 最大,必须保证 12σ2∑m1(θTx(i)−y(i))2 1 2 σ 2 ∑ 1 m ( θ T x ( i ) − y ( i ) ) 2 最小,也即保证误差最小。这就是我们经常用到,但是不知所以然的误差的平方和最小的推导过程。
至于如何求解上式,暂时放到一边,我们稍后再做总结。
逻辑回归模型
首先,我们将伯努利分布转换成指数族分布:
由指数分布族公式可知:
由广义线型模型可知:
到这里,同样我们需要求解假设函数中的未知量
θ
θ
,不同的是y|x的分布变了,求解方法也发生了变化。这里有:
似然函数为:
同样,为了计算方便,取对数:
生成学习算法
在这一节中,我们首先介绍输入值为连续的高斯判别算法,以及输入值为非连续的朴素贝叶斯算法。
高斯判别算法
高斯判别算法是一种生成学习算法,不要因为它的名字而混淆。在高斯判别算法中,
p(x|y)
p
(
x
|
y
)
属于多变量正太分布,对于二元分类问题其概率密度函数为:
其均值和协方差为:
p(y) p ( y ) 属于伯努利分布,其概率分布为:
极大似然函数的对数形式,可以表示为:
因此,可以得到各个参数的极大似然估计为:
值得注意的是,在高斯判别算法的似然函数中包含了多种模型,比如上面的似然函数中包含了两个模型分别是 p(x|y=0) p ( x | y = 0 ) 以及 p(x|y=1) p ( x | y = 1 ) ,所以似然函数可能是这种形式的 L(ρ,μ0,μ1,Σ)=p(x|y=0)∗p(x|y=1)∗p(x|y=1)... L ( ρ , μ 0 , μ 1 , Σ ) = p ( x | y = 0 ) ∗ p ( x | y = 1 ) ∗ p ( x | y = 1 ) . . . ,这说明第一个样本服从模型 p(x|y=0) p ( x | y = 0 ) ,第二三个样本服从 p(x|y=1) p ( x | y = 1 ) 等等。最终反映在参数的极大似然估计中就是我们看到的 ∑m1I{y(i)=0}x(i) ∑ 1 m I { y ( i ) = 0 } x ( i ) ,以此来表达服从该模型的样本的个数。
进一步,我们将下式整理得:
可以看出,这是逻辑回归的公式。事实上,当先验概率分布服从指数分布族中的任何一个分布时都可以推导出逻辑回归模型。反之,逻辑回归模型的先验概率不一定必须时指数分布族。实际应用中,由于高斯判别分析算法比逻辑回归有更多的前置假设,所以当数据服从或大致服从正态分布时,使用高斯判别分析算法效果更好。否则,逻辑回归算法更有鲁棒性。
朴素贝叶斯
高斯判别算法是针对特征向量x为连续值时的问题。而朴素贝叶斯针对的时特征向量为离散值的问题。
我们知道生成学习算法需要分别对
p(x|y)
p
(
x
|
y
)
和
p(y)
p
(
y
)
进行建模,但是当影响因素比较多时,计算
p(x|y)
p
(
x
|
y
)
是比较困难的。例如邮件分类的实例中,假设词典里有50000个词,即向量长度为50000,向量中每个分量的取值为{0, 1},那么如果直接计算
p(x1,x2,...x50000|y)
p
(
x
1
,
x
2
,
.
.
.
x
50000
|
y
)
,因为50000个词有
250000
2
50000
种组合,所以要计算
250000−1
2
50000
−
1
次
p(x1,x2,...x50000|y)
p
(
x
1
,
x
2
,
.
.
.
x
50000
|
y
)
,这是一个庞大的计算量。针对这种情况,朴素贝叶斯假设
x1,x2,...x50000
x
1
,
x
2
,
.
.
.
x
50000
是条件独立的,因此:
因此,若假设朴素贝叶斯方法的参数为:
则,似然估计函数为:
最后,参数的似然估计为:
求解极大似然函数
以上部分讲述了解决问题的思路,即最终转化为极大似然估计问题。在这一节里,我们介绍几种求解极大似然估计的方法。
直接求导
这可能是最简单,也是我们最熟悉的方法。为了极值,我们令函数的导数为零,然后求解方程即可。不再详细介绍。
梯度上升/梯度下降
我们知道,梯度方向是增长最快的方向,因此沿着梯度的方向即可找到使似然函数值最大的变量的值,沿着梯度的反方向即可求出使误差函数(cost function)值最小的变量值(这也就是所谓的最小二乘法)。
梯度上升的更新规则如下:
梯度上升的更新规则如下:
梯度上升/梯度下降的收敛规则是:一是判断两次迭代后参数的变化,而是判断两次迭代后目标函数的变化。
具体梯度上升/梯度下降又分为:批梯度下降算法(batch gradient descent)和随机梯度下降
(stochastic gradient descent),不再赘述。
牛顿方法
对于一个函数
f(x)
f
(
x
)
,如果我们要求解
f(x)=0
f
(
x
)
=
0
的解,我们先随机选一个点,然后求出该点的切线,即导数,延长它使之与 x 轴相交,以相交时的 x 的值作为下一次迭代的值。更新规则为:
同理,我们优化的目标函数为极大似然估计 L,当极大似然估计函数取值最大时,其导数为 0,这样就和上面函数 f 取 0 的问题一致了。极大似然函数的求解更新规则是:
当参数 θ θ 为向量时,更新规则为:
H 是函数的二次导数矩阵,被成为 Hessian 矩阵。