CS229 Lecture 5
本节课重点:
Generative Learning algorithms
Gaussian discriminant analysis
Naive Bayes
Laplace smoothing
如果一个算法目的是学习 p ( y ∣ x ) p(y|x) p(y∣x)或者直接学习根据 x x x预测数据的标签 { 0 , 1 } \{0,1\} {0,1}。这类学习算法称为判别学习算法( d i s c r i m i n a t i v e    l e a r n i n g    a l g o r i t h m s discriminative\,\,learning\,\, algorithms discriminativelearningalgorithms)
本节课主要涉及的是算法主要是模拟
p
(
x
∣
y
)
p(x|y)
p(x∣y)基于
p
(
y
)
p(y)
p(y)。此类学习方法称为生成学习算法。其中
x
x
x是样本特征,
y
y
y是类别标签。生成学习方法主要基于贝叶斯算法。
p
(
y
=
1
∣
x
)
=
p
(
x
∣
y
=
1
)
p
(
y
)
p
(
y
)
p
(
x
)
=
p
(
x
∣
y
=
1
)
p
(
y
=
1
)
+
p
(
x
∣
y
=
0
)
p
(
y
=
0
)
p(y=1|x)=\frac{p(x|y=1)p(y)}{p(y)}\\ p(x)=p(x|y=1)p(y=1)+p(x|y=0)p(y=0)
p(y=1∣x)=p(y)p(x∣y=1)p(y)p(x)=p(x∣y=1)p(y=1)+p(x∣y=0)p(y=0)
生成学习方法的例子:高斯判别分析
假设: x ∈ R n x\in R^n x∈Rn,并且是连续值。且 p ( x ∣ y ) p(x|y) p(x∣y)是高斯分布。
现有变量 x ∼ N ( u ⃗ , Σ ) x\sim N(\vec u,\Sigma) x∼N(u,Σ),其密度函数为:
p ( x ; u , Σ ) = 1 ( 2 π ) 1 / 2 ∣ Σ ∣ 1 / 2 e x p ( − ( x − u ) T Σ − 1 ( x − u ) ) p(x;u,\Sigma)=\frac{1}{(2\pi)^{1/2}|\Sigma|^{1/2}}exp(-(x-u)^T\Sigma^{-1}(x-u)) p(x;u,Σ)=(2π)1/2∣Σ∣1/21exp(−(x−u)TΣ−1(x−u))
其中 u ⃗ \vec u u是多变量高斯分的均值, Σ \Sigma Σ为协方差矩阵。 Σ = E [ ( x − u ) ( x − u ) T ] \Sigma=E[(x-u)(x-u)^T] Σ=E[(x−u)(x−u)T]。
下图是多变量高斯分布随着
Σ
\Sigma
Σ变化的轮廓图;
建模为:
p ( y ) = ϕ y ( 1 − ϕ ) 1 − y p ( x ∣ y = 0 ) = 1 ( 2 π ) 1 / 2 ∣ Σ ∣ 1 / 2 e x p ( − ( x − u 0 ) T Σ − 1 ( x − u 0 ) ) p ( x ∣ y = 0 ) = 1 ( 2 π ) 1 / 2 ∣ Σ ∣ 1 / 2 e x p ( − ( x − u 1 ) T Σ − 1 ( x − u 1 ) ) p(y)=\phi^y(1-\phi)^{1-y}\\ p(x|y=0)=\frac{1}{(2\pi)^{1/2}|\Sigma|^{1/2}}exp(-(x-u_0)^T\Sigma^{-1}(x-u_0))\\ p(x|y=0)=\frac{1}{(2\pi)^{1/2}|\Sigma|^{1/2}}exp(-(x-u_1)^T\Sigma^{-1}(x-u_1)) p(y)=ϕy(1−ϕ)1−yp(x∣y=0)=(2π)1/2∣Σ∣1/21exp(−(x−u0)TΣ−1(x−u0))p(x∣y=0)=(2π)1/2∣Σ∣1/21exp(−(x−u1)TΣ−1(x−u1))
对其求最大似然函数:
L ( ϕ , u 0 , u 1 , Σ ) = l o g ∏ i = 1 m p ( x i , y i ; ϕ , u 0 , u 1 , Σ ) = l o g ∏ i = 1 m p ( x i ∣ y i ; u 0 , u 1 , Σ ) p ( y i ; ϕ ) L(\phi,u_0,u_1,\Sigma)=log\prod_{i=1}^mp(x^{i},y^{i};\phi,u_0,u_1,\Sigma)\\ =log\prod_{i=1}^mp(x^{i}|y^{i};u_0,u_1,\Sigma)p(y^{i};\phi) L(ϕ,u0,u1,Σ)=logi=1∏mp(xi,yi;ϕ,u0,u1,Σ)=logi=1∏mp(xi∣yi;u0,u1,Σ)p(yi;ϕ)
上面的似然也被称为 J o i n t    l i k e l i h o o d Joint \,\,likelihood Jointlikelihood,而前面我们学习到如逻辑回归之类的算法是根据 p ( y ∣ x ) p(y|x) p(y∣x)来建模,这类方法的似然函数形如 L ( θ ) = ∏ i = 1 m p ( y ( i ) ∣ x ( i ) ; θ ) L(\theta)=\prod_{i=1}^{m}p(y^{(i)}|x^{(i)};\theta) L(θ)=∏i=1mp(y(i)∣x(i);θ)称之为 c o n d i t i o n a l    l i k e l i h o o d conditional \,\,likelihood conditionallikelihood, ϕ , u 1 , u 2 , Σ \phi,u_1,u_2,\Sigma ϕ,u1,u2,Σ的极大似然估计为:
ϕ
=
1
m
∑
i
=
1
m
1
{
y
(
i
)
=
1
}
\phi=\frac{1}{m}\sum_{i=1}^{m}1\{y^{(i)}=1\}
ϕ=m1i=1∑m1{y(i)=1}
ϕ
\phi
ϕ其实就是伯努利模型中的概率,这里使用样本中标签为1的样本频率来表示。
u
0
=
∑
i
=
1
m
1
{
y
(
i
)
=
0
}
x
(
i
)
∑
i
=
1
m
1
{
y
(
i
)
=
0
}
u_0=\frac{\sum_{i=1}^{m}1\{y^{(i)}=0\}x^{(i)}}{\sum_{i=1}^{m}1\{y^{(i)}=0\}}
u0=∑i=1m1{y(i)=0}∑i=1m1{y(i)=0}x(i)
u
0
u_0
u0其实就是所有
y
y
y标签为0的一个样本特征的平均
u
1
=
∑
i
=
1
m
1
{
y
(
i
)
=
1
}
x
(
i
)
∑
i
=
1
m
1
{
y
(
i
)
=
1
}
u_1=\frac{\sum_{i=1}^{m}1\{y^{(i)}=1\}x^{(i)}}{\sum_{i=1}^{m}1\{y^{(i)}=1\}}
u1=∑i=1m1{y(i)=1}∑i=1m1{y(i)=1}x(i)
Σ
=
1
m
∑
i
=
1
m
(
x
(
i
)
−
u
y
(
i
)
)
(
x
(
i
)
−
u
y
(
i
)
)
T
\Sigma = \frac{1}{m}\sum_{i=1}^{m}(x^{(i)}-u_{y_{(i)}})(x^{(i)}-u_{y_{(i)}})^T
Σ=m1i=1∑m(x(i)−uy(i))(x(i)−uy(i))T
预测
有了上面对于参数的似然估计后,我们就可以通过他们对新输入的 x x x进行预测。
a r g    m a x y    p ( y ∣ x ) = a r g    m a x y    p ( x ∣ y ) p ( y ) p ( x ) = a r g    m a x y    p ( x ∣ y ) p ( y ) arg\,\,\mathop{max}\limits_{y}\,\,p(y|x) = arg\,\, \mathop{max}\limits_{y} \,\, \frac{p(x|y)p(y)}{p(x)} = arg\,\, \mathop{max}\limits_{y}\,\, p(x|y)p(y) argymaxp(y∣x)=argymaxp(x)p(x∣y)p(y)=argymaxp(x∣y)p(y),因为 x x x和 y y y是独立的,因此等式成立。
如果说 p ( y ) p(y) p(y)是平均分布的话,那么只需要求 a r g    m a x y    p ( x ∣ y ) arg\,\, \mathop{max}\limits_{y}\,\, p(x|y) argymaxp(x∣y)
高斯判别分析和逻辑回归之间的联系
上图可以看作是高斯判别分析与逻辑回归之间的联系, x x x轴上左侧的x和右侧的o分别对应 y = 0 y=0 y=0和 y = 1 y=1 y=1,两个高斯曲线为 p ( x ∣ y = 0 ) p(x|y=0) p(x∣y=0)的概率密度曲线和 p ( x ∣ y = 1 ) p(x|y=1) p(x∣y=1)的概率密度曲线(这两个高斯曲线是在建模的时候拟合出来的)。现在假设又一个变量 x x x,需要预测其被预测为1的概率,其中黑色曲线就是拟合随着 x x x的变化预测 p ( y = 1 ∣ x ) = p ( x ∣ y = 1 ) p ( y = 1 ) p ( x ) = p ( x ∣ y = 1 ) p ( y = 1 ) p ( x ∣ y = 0 ) p ( y = 0 ) + p ( x ∣ y = 1 ) p ( y = 1 ) p(y=1|x)=\frac{p(x|y=1)p(y=1)}{p(x)}=\frac{p(x|y=1)p(y=1)}{p(x|y=0)p(y=0)+p(x|y=1)p(y=1)} p(y=1∣x)=p(x)p(x∣y=1)p(y=1)=p(x∣y=0)p(y=0)+p(x∣y=1)p(y=1)p(x∣y=1)p(y=1),可以看出其大体形状类似与逻辑回归的 s i g m o i d sigmoid sigmoid函数的样子。
使用生成学习算法的好处与坏处
对于 x ∣ y ∼ G u a s s i a n x|y\sim Guassian x∣y∼Guassian可以推导出 p ( x ∣ y = 1 ) p(x|y=1) p(x∣y=1)的后验概率分布是一个逻辑回归。反之是不成立的。同理如果说 x ∣ y = 1 ∼ P o s s i o n ( λ 1 ) x|y=1 \sim Possion(\lambda_1) x∣y=1∼Possion(λ1)和 x ∣ y = 0 ∼ P o s s i o n ( λ 0 ) x|y=0\sim Possion(\lambda_0) x∣y=0∼Possion(λ0)也可以推导出 p ( y = 1 ∣ x ) p(y=1|x) p(y=1∣x)是一个逻辑回归。这也意味 x ∣ y ∼ G u a s s i a n x|y\sim Guassian x∣y∼Guassian比 p ( y = 1 ∣ x ) ∼ l o g i s t i c p(y=1|x)\sim logistic p(y=1∣x)∼logistic是一个更强的假设。
联系前面学习过的指数分布族如果 x ∣ y = 1 ∼ E x p    F a m i l y ( η 1 ) x|y=1\sim Exp\,\,Family(\eta_1) x∣y=1∼ExpFamily(η1)和 x ∣ y = 0 ∼ E x p    F a m i l y ( η 0 ) x|y=0\sim Exp\,\,Family(\eta_0) x∣y=0∼ExpFamily(η0)同样可以得出 p ( y = 1 ∣ x ) p(y=1|x) p(y=1∣x)的后验分布是一个逻辑回归。
如果说能大概猜出数据符合高斯分布,那么使用高斯判别分析的假设作出的结果通常要好于逻辑回归。通常高斯分布的假设通常需要的样本数据更少来拟合模型,而逻辑回归相对来说作出的假设更少,需要更多的数据来拟合模型。生成学习算法作出了更强的假设,需要的数据更少。而logistic假设更弱,所以大多数场景均可使用,更为强壮。
朴素贝叶斯
现在需要做一个垃圾邮件分类器 y ∈ { 0 , 1 } y\in\{0,1\} y∈{0,1},其中0表示正常邮件,而1表示垃圾邮件,如何将一封邮件表示为输入特征 x x x。
有一种方法是又一个邮件常用词典,这个词典的大小可能包含上百到上万个词。如 { a    a n    a n t    ⋯ b u y ⋯ c s 229 ⋯   } \{a\,\,an\,\,ant\,\,\cdots buy\cdots cs229\cdots\} {aanant⋯buy⋯cs229⋯}等, x x x可以表示为一个向量 x = [ 1 0 ⋮ 1 ⋮ ] x=\begin{bmatrix}1\\0\\\vdots\\1\\\vdots\end{bmatrix} x=⎣⎢⎢⎢⎢⎢⎢⎡10⋮1⋮⎦⎥⎥⎥⎥⎥⎥⎤。我们试图模拟 p ( x ∣ y ) p(x|y) p(x∣y),假设词典的大小为50000,那么 x x x的可能结果是 2 50000 2^{50000} 250000。如果使用多项式分布来模拟 x x x的输出,那么需要 2 50000 − 1 2^{50000}-1 250000−1维参数才行,这个参数太过巨大。
为了使得模拟模型可行,我们需要做一些假设(尽管这个假设听上去可能并不合理,但是在文本实际分类应用中效果还不错)。
A s s u m e : Assume: Assume: 基于 y y y的 x i s x_is xis是条件独立的。
x i s x_is xis are condition independent given y
p ( x 1 , x 2 , ⋯   , x n ∣ y ) = p ( x 1 ∣ y ) P ( x 2 ∣ y x 1 ) ⋯ p ( x n ∣ x 1 x 2 ⋯ x n − 1 y ) = p ( x 1 ∣ y ) p ( x 2 ∣ y ) ⋯ p ( x n ∣ y ) = ∏ i = 1 n p ( x i ∣ y ) p(x_1,x_2,\cdots,x_n|y)=p(x_1|y)P(x_2|yx_1)\cdots p(x_n|x_1x_2\cdots x_{n-1}y)\\ =p(x_1|y)p(x_2|y)\cdots p(x_n|y)=\prod_{i=1}^np(x_i|y) p(x1,x2,⋯,xn∣y)=p(x1∣y)P(x2∣yx1)⋯p(xn∣x1x2⋯xn−1y)=p(x1∣y)p(x2∣y)⋯p(xn∣y)=i=1∏np(xi∣y)
上述假设意味着知道邮件是否为垃圾邮件,各个词是没有关系的。
上面模型涉及的参数为:
ϕ
i
∣
y
=
1
=
p
(
x
i
∣
y
=
1
)
\phi_{i|y=1}=p(x_i|y=1)
ϕi∣y=1=p(xi∣y=1)
ϕ
i
∣
y
=
0
=
p
(
x
i
∣
y
=
0
)
\phi_{i|y=0}=p(x_i|y=0)
ϕi∣y=0=p(xi∣y=0)
ϕ
y
=
p
(
y
=
1
)
\phi_{y}=p(y=1)
ϕy=p(y=1)
可以看到参数都是基于伯努利分布的因为邮件不是垃圾邮件就是正常的。
对于给定训练集
{
(
x
(
1
)
,
y
(
1
)
)
,
(
x
(
2
)
,
y
(
2
)
)
⋯
(
x
(
m
)
,
y
(
m
)
)
}
\{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)})\cdots (x^{(m)},y^{(m)})\}
{(x(1),y(1)),(x(2),y(2))⋯(x(m),y(m))},这些样本的联结似然函数为:
L
(
ϕ
y
,
ϕ
i
∣
y
=
1
,
ϕ
i
∣
y
=
0
)
=
∏
i
=
1
n
p
(
x
(
i
)
,
y
(
i
)
)
L(\phi_y,\phi_{i|y=1},\phi_{i|y=0})=\prod_{i=1}^np(x^{(i)},y^{(i)})
L(ϕy,ϕi∣y=1,ϕi∣y=0)=i=1∏np(x(i),y(i))
求解各个参数的最大似然值为:
ϕ
i
∣
y
=
1
=
∑
i
=
1
m
1
{
y
(
i
)
=
1
∧
x
(
i
)
=
1
}
∑
i
=
1
m
1
{
y
(
i
)
=
1
}
\phi_{i|y=1}=\frac{\sum_{i=1}^{m}1\{y^{(i)}=1\land x^{(i)}=1\}}{\sum_{i=1}^{m}1\{y^{(i)}=1\}}
ϕi∣y=1=∑i=1m1{y(i)=1}∑i=1m1{y(i)=1∧x(i)=1}
ϕ i ∣ y = 0 = ∑ i = 1 m 1 { y ( i ) = 0 ∧ x ( i ) = 1 } ∑ i = 1 m 1 { y ( i ) = 0 } \phi_{i|y=0}=\frac{\sum_{i=1}^{m}1\{y^{(i)}=0 \land x^{(i)}=1\}}{\sum_{i=1}^{m}1\{y^{(i)}=0\}} ϕi∣y=0=∑i=1m1{y(i)=0}∑i=1m1{y(i)=0∧x(i)=1}
ϕ y = ∑ 1 { y ( i ) = 1 } m \phi_y=\frac{\sum1\{y^{(i)}=1\}}{m} ϕy=m∑1{y(i)=1}
当又一个新邮件来了需要预测时使用 p ( y ∣ x ) = p ( x ∣ y = 1 ) p ( y = 1 ) p ( x ) = ( ∏ i = 1 n p ( x i ∣ y = 1 ) ) p ( y = 1 ) ( ∏ i = 1 n p ( x i ∣ y = 0 ) ) p ( y = 0 ) + ( ∏ i = 1 n p ( x i ∣ y = 1 ) ) p ( y = 1 ) p(y|x)=\frac{p(x|y=1)p(y=1)}{p(x)}= \frac{(\prod_{i=1}^{n}p(x_i|y=1))p(y=1)}{(\prod_{i=1}^{n}p(x_i|y=0))p(y=0)+(\prod_{i=1}^{n}p(x_i|y=1))p(y=1)} p(y∣x)=p(x)p(x∣y=1)p(y=1)=(∏i=1np(xi∣y=0))p(y=0)+(∏i=1np(xi∣y=1))p(y=1)(∏i=1np(xi∣y=1))p(y=1)
Laplace 平滑
假设新发来一封邮件中有一个词 N I P S NIPS NIPS在以往的邮件中邮件见到过,那么使用上面的公式对是否为垃圾邮件进行预测。 p ( y = 1 ∣ x ) = 0 0 p(y=1|x)=\frac{0}{0} p(y=1∣x)=00,因为 p ( x 3000 ∣ y = 1 ) = 0 p(x_{3000}|y=1)=0 p(x3000∣y=1)=0且 p ( x 3000 ∣ y = 0 ) = 0 p(x_{3000}|y=0)=0 p(x3000∣y=0)=0(假设NIPS这个词在字典的顺序为3000)。
再如:一个球队连着输了5场球,那么预测下一场它赢的概率 p ( y = 1 ) = 0 5 + 0 = 0 p(y=1)=\frac{0}{5+0}=0 p(y=1)=5+00=0这样预测显然是不合理的。
为了处理这种情况可以使用 L a p l a c e Laplace Laplace平滑, p ( y = 1 ) = 0 + 1 5 + 2 = 1 7 p(y=1)=\frac{0+1}{5+2}=\frac{1}{7} p(y=1)=5+20+1=71
对于 y ∈ { 1 , 2 , ⋯ k } y\in\{1,2,\cdots k\} y∈{1,2,⋯k}的多项式分布一般来说,给分子加1对分母加k,就可以避免这种因为没见过某种数据就预测其不可能发生的问题。 p ( y = 1 ) = ∑ 1 { y ( i ) = 1 } + 1 m + k p(y=1)=\frac{\sum1\{y^{(i)}=1\}+1}{m+k} p(y=1)=m+k∑1{y(i)=1}+1。
对于伯努利分布来说 ϕ i ∣ y = 1 = ∑ 1 { x ( i ) = 1 , y ( i ) = 1 } + 1 ∑ 1 { y ( i ) = 1 } + 2 \phi_{i|y=1}=\frac{\sum1\{x^{(i)}=1,y^{(i)}=1\}+1}{\sum1\{y^{(i)}=1\}+2} ϕi∣y=1=∑1{y(i)=1}+2∑1{x(i)=1,y(i)=1}+1