最近在做一个短文本分类系统,尝试用朴素贝叶斯算法做了baseline的模型(最终没有采用这种算法),朴素贝叶斯法是个非常简单高效的分类算法, 这个算法断断续续看了好几遍,今天做一个总结,内容参考了李航的《统计学习方法》以及Goodfellow的《深度学习》。
- 简要解释下概率
- 简要解释下似然以及极大似然的含义
- 算法介绍
- 后验概率最大化的含义(算法为什么有效)
- 实际运用以及如何增量学习
概率和概率论
我们经常会听说到,对于概率的解释,五花八门,那么,什么是概率呢,在知乎上看到这样的解释
物理世界本身存在的随机性(客观概率)
是我们由于信息不足而对事件发生可能性的度量(主观概率)。
关于概率论,在《深度学习》中,作者提供了这样的解释
概率论是用于表示不确定性陈述(statement) 的数学框架。它不仅提供了量化不确定性的方法,也提供了用于导出新的不确定性陈述的公理。在人工智能领域,我们主要以两种方式来使用概率论。首先,概率法则告诉我们AI系统应该如何推理,所以我们设计一些算法来计算或者近似由概率论导出的表达式。其次,我们可以用概率和统计从理论上分析我们提出的AI系统的行为。概率论是众多科学和工程学科的基本工具。概率论使我们能够作出不确定的陈述以及在不确定性存在的情况下推理。摘自《深度学习》
对于以上解释,我并没有足够的能力来解读,大家可以自己去体会。
简要解释下似然以及极大似然估计的含义
似然(likehood), 表示可能性 ,对于似然的解释也是有各种版本, 这里我会写一个比较易于理解的版本。
似然函数是一种关于统计模型中的参数的函数,表示模型参数中的似然性。
我们用概率表示在已知一些参数的情况下,预测接下来的观测所得到的结果,而似然性,则是用于在已知某些观测所得到的结果时,对有关事物的性质的参数进行估计, 似然也一般用于求解概率模型的参数估计。拿一个别人的栗子:
考虑投掷一枚硬币的实验。通常来说,已知投出的硬币正面朝上和反面朝上的概率各自是 pH p H =0.5,便可以知道投掷若干次后出现各种结果的可能性。比如说,投两次都是正面朝上的概率是0.25。用条件概率表示,就是:
P(HH∣pH=0.5)=0.52=0.25 P ( HH ∣ p H = 0.5 ) = 0.5 2 = 0.25
其中H表示正面朝上。
在统计学中,我们关心的是在已知一系列投掷的结果时,关于硬币投掷时正面朝上的可能性的信息。我们可以建立一个统计模型:假设硬币投出时会有 pH p H 的概率正面朝上,而有1 − pH p H 的概率反面朝上。这时,条件概率可以改写成似然函数:
L(pH=0.5∣HH)=P(HH∣pH=0.5)=0.25 L ( p H = 0.5 ∣ HH ) = P ( HH ∣ p H = 0.5 ) = 0.25
也就是说,对于取定的似然函数,在观测到两次投掷都是正面朝上时,
pH=0.5 p H = 0.5 的似然性是0.25(
这并不表示当观测到两次正面朝上时pH = 0.5 的概率是0.25)。
如果考虑 pH p H = 0.6,那么似然函数的值也会改变。
L(pH=0.6∣HH)=P(HH∣pH=0.6)=0.36 L ( p H = 0.6 ∣ HH ) = P ( HH ∣ p H = 0.6 ) = 0.36
注意到似然函数的值变大了。这说明,如果参数
pH p H 的取值变成0.6的话,结果观测到连续两次正面朝上的概率要比假设
pH p H = 0.5时更大。也就是说,参数
pH p H 取成0.6 要比取成0.5 更有说服力,更为“合理”。总之,似然函数的重要性不是它的具体取值,而是当参数变化时函数到底变小还是变大。对同一个似然函数,如果存在一个参数值,使得它的函数值达到最大的话,那么这个值就是最为“合理”的参数值。
在这个例子中,似然函数实际上等于:
L(pH=θ∣HH)=P(HH∣pH=θ)=θ2,其中0≤pH≤1 L ( p H = θ ∣ HH ) = P ( HH ∣ p H = θ ) = θ 2 , 其 中 0 ≤ p H ≤ 1
如果取
pH p H = 1,那么似然函数达到最大值1。也就是说,当连续观测到两次正面朝上时,假设硬币投掷时正面朝上的概率为1是最合理的。
类似地,如果观测到的是三次投掷硬币,头两次正面朝上,第三次反面朝上,那么似然函数将会是:
L(pH=θ∣HHT)=P(HHT∣pH=θ)=θ2(1−θ),其中T表示反面朝上,0≤pH≤1 L ( p H = θ ∣ HHT ) = P ( HHT ∣ p H = θ ) = θ 2 ( 1 − θ ) , 其 中 T 表 示 反 面 朝 上 , 0 ≤ p H ≤ 1
这时候,似然函数的最大值将会在
pH=23 p H = 2 3 的时候取到。也就是说,当观测到三次投掷中前两次正面朝上而后一次反面朝上时,估计硬币投掷时正面朝上的概率
pH=23 p H = 2 3 是最合理的。
所以,通过极大化似然函数,我们可以得到概率模型的最优参数。极大似然估计的常用策略是先假定某个分布具有某种确定的概率分布形式,再基于样本对概率分布的参数进行估计,同时,极大似然估计源自频率主义学派,是根据数据采样来估计概率分布参数的经典方法。
算法介绍
朴素贝叶斯法 基于贝叶斯定理和特征条件独立假设,首先抛出我们伟大的贝叶斯定理:
P(A|B)=P(B|A)P(A)P(B) P ( A | B ) = P ( B | A ) P ( A ) P ( B )
本文并不会对贝叶斯定理做展开,只是介绍其在朴素贝叶斯法中的应用
假设输入空间 X⊆Rn X ⊆ R n 为 n n 维向量的集合,输出空间为类标记的集合 Y⊆{c1,c2,⋯,ck} Y ⊆ { c 1 , c 2 , ⋯ , c k } .输入特征向量 x∈X x ∈ X , 输出类标记 y∈Y y ∈ Y . X X 是定义在输出空间 X X 上的随机变量, Y Y 是定义在输出空间 Y Y 上的随机变量. P(X,Y) P ( X , Y ) 是 X X 和 Y Y 上的联合概率分布.训练数据集
T={(x1,y1),(x2,y2),⋯,(xN,yN)} T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x N , y N ) }
由
P(X,Y) P ( X , Y ) 独立同分布产生
朴素贝叶斯法通过训练数据集合学习联合概率分布
P(X,Y) P ( X , Y ) .具体的,学习以下先验概率分布及条件概率分布,先验概率分布
P(Y=ck),k=1,2,3,⋯,K P ( Y = c k ) , k = 1 , 2 , 3 , ⋯ , K
条件概率分布
P(X=x|Y=ck)=P(X(1)=x1,⋯,X(n)=x(n)|Y=ck),k=1,2,⋯,K P ( X = x | Y = c k ) = P ( X ( 1 ) = x 1 , ⋯ , X ( n ) = x ( n ) | Y = c k ) , k = 1 , 2 , ⋯ , K
这样就可以学到联合概率分布
P(X,Y) P ( X , Y ) .
条件概率分布
P(X=x|Y=ck) P ( X = x | Y = c k ) 有指数级数量的参数,其估计实际是不可行的.事实上,假设
xj x j 可取值
Sj S j 个,
j=1,2,⋯,n j = 1 , 2 , ⋯ , n ,
Y Y 的可能取值有
K K 个,那么参数个数为
K∏nj=1Sj K ∏ j = 1 n S j .
朴素贝叶斯法对条件概率分布做了
条件独立性假设,朴素贝叶斯因此得名,何为条件独立性假设呢,
就是对已知类别,假设所有属性相互独立,换言之,就是每个属性独立地对分类结果发生影响,当然这个假设可以使分类方法变得简单,但是会损失准确率, 依据条件独立性假设
P(X=x|Y=ck)=P(X(1)=x(1),⋯,X(n)=x(n)|Y=ck)=∏j=1nP(X(j)=x(j)|Y=ck) P ( X = x | Y = c k ) = P ( X ( 1 ) = x ( 1 ) , ⋯ , X ( n ) = x ( n ) | Y = c k ) = ∏ j = 1 n P ( X ( j ) = x ( j ) | Y = c k )
(1.1)
朴素贝叶斯法实际上学到的是生成数据的机制,因为其学习的是一个联合概率分布,我们称这种方法为生成模型,朴素贝叶斯方法在分类时,对给定的输入 x x , 通过学习到的模型计算后验概率分布 P(Y=ck|X=x) P ( Y = c k | X = x ) , 将后验概率最大的类作为 x x 类的输出,后验概率计算可以依据贝叶斯定理进行:
P(Y=ck|X=x)=P(X=x|Y=ck)P(Y=ck)∑kP(X=x|Y=ck)P(Y=ck) P ( Y = c k | X = x ) = P ( X = x | Y = c k ) P ( Y = c k ) ∑ k P ( X = x | Y = c k ) P ( Y = c k )
(1.2)
将上面(1.1)式带入(1.2)式,可以得到:
P(Y=ck|X=x)=P(Y=ck)∏jP(X(j)=x(j)|Y=ck)∑kP(Y=ck)∏jP(X(j)=x(j)|Y=ck),k=1,2,⋯,K P ( Y = c k | X = x ) = P ( Y = c k ) ∏ j P ( X ( j ) = x ( j ) | Y = c k ) ∑ k P ( Y = c k ) ∏ j P ( X ( j ) = x ( j ) | Y = c k ) , k = 1 , 2 , ⋯ , K
(1.3)
这是朴素贝叶斯分类的基本公式,于是朴素贝叶斯更累器可以表示为:
y=f(x)=argmaxckP(Y=ck)∏jP(X(j)=x(j)|Y=ck)∑kP(Y=ck)∏jP(X(j)=x(j)|Y=ck) y = f ( x ) = arg max c k P ( Y = c k ) ∏ j P ( X ( j ) = x ( j ) | Y = c k ) ∑ k P ( Y = c k ) ∏ j P ( X ( j ) = x ( j ) | Y = c k )
(1.4)
由于式(1.4)中分母对所有
ck c k 都是相同的,所以
最终贝叶斯分类器的决策函数为
y=argmaxckP(Y=ck)∏jP(X(j)=x(j)|Y=ck) y = arg max c k P ( Y = c k ) ∏ j P ( X ( j ) = x ( j ) | Y = c k )
后验概率最大化的含义(算法为什么有效)
首先我们了解下先验概率和后验概率:
先验概率:是指根据以往经验和分析得到的概率。
后验概率:事情已经发生,要求这件事情发生的原因是由某个因素引起的可能性的大小。
朴素贝叶斯法将实例分到后验概率最大的类中,这等价于期望风险最小化,我们选择0-1损失函数:
我们用 L L 表示损失,所谓的0-1损失函数,指的是若样本 X X 被正确分类,则损失为0,若 X X 没有被正确分类,则损失为1。
L(Y,f(X))={1,Y≠f(X)0,Y=f(X) L ( Y , f ( X ) ) = { 1 , Y ≠ f ( X ) 0 , Y = f ( X )
式中
f(X) f ( X ) 是分类器的决策函数,这时,期望风险函数为
Rexp(f)=E[L(Y,f(x))] R e x p ( f ) = E [ L ( Y , f ( x ) ) ]
期望是对联合分布
P(X,Y) P ( X , Y ) 取得,由此条件期望
Rexp(f)=Ex∑k=1K[L(ck,f(X))]p(ck|X) R e x p ( f ) = E x ∑ k = 1 K [ L ( c k , f ( X ) ) ] p ( c k | X )
为了使期望风险最小化,只需对
X=x X = x 逐个极小化,由此得到:
f(x)====argminy∈y∑k=1KL(ck,y)P(ck|X=x)argminy∈y∑k=1KP(y≠ck|X=x)argminy∈y(1−P(y=ck|X=x))argmaxy∈yP(y=ck|X=x)(1)(2)(3)(4) (1) f ( x ) = arg min y ∈ y ∑ k = 1 K L ( c k , y ) P ( c k | X = x ) (2) = arg min y ∈ y ∑ k = 1 K P ( y ≠ c k | X = x ) (3) = arg min y ∈ y ( 1 − P ( y = c k | X = x ) ) (4) = arg max y ∈ y P ( y = c k | X = x )
在这里,期望风险最小化就等价于后验概率最大化,也就是当我们将实例分类到后验概率最大的类中时, 也就得到了期望风险最小的分类。公式摘自《统计学习原理》
一个文本文类的非常简单的例子
后面举个用朴素贝叶斯定理解决垃圾文本分类问题的例子
我们的文本集合为, 括号内为标注,0表示正常邮件,1表示垃圾邮件,/ 表示基于词的划分
0 喜欢/篮球
0 喜欢/电影
1 广告/投放
首先构造一个字典, 字典中的词语是所有文本所含的词语,去重后的集合:
{喜欢,篮球,电影,广告,投放}
首先,我们计算先验概率(这里采用伯努利模型,读者可以自己去了解下多项式模型和高斯模型),另外,我这里省去了向量化的过程(依据拉普拉斯平滑,分子+1, 分母+2(2为类别个数))
P(正常)=2+1/3+2=3/5P(垃圾)=1+1/3+2=2/5 P ( 正 常 ) = 2 + 1 / 3 + 2 = 3 / 5 P ( 垃 圾 ) = 1 + 1 / 3 + 2 = 2 / 5
然后计算条件概率,这里没有用规范化的书写方式 P(喜欢|正常) P ( 喜 欢 | 正 常 ) 表示在所有正常文本中,含有”喜欢”这个词语的文本所占的比例,这里,所有正常文本总数为2, 含有”喜欢”的文本数量为2
注意,我们在计算条件概率的时候,为了避免出现概率值为0的情况,我们会在随机变量的取值频数上赋予一个正数 λ λ , 我们称之为拉普拉斯平滑(Laplace smoothing),通常,我们取这个正数 λ λ 为1 ,所以我们计算条件概率为:
P(喜欢|正常)=2+1/2+2=3/4P(喜欢|垃圾)=0+1/1+2=1/3P(篮球|正常)=1+1/2+2=1/2P(篮球|垃圾)=0+1/1+2=1/3P(电影|正常)=1+1/2+2=1/2P(电影|垃圾)=0+1/1+2=1/3P(广告|正常)=0+1/2+2=1/4P(广告|垃圾)=1+1/1+2=2/3P(投放|正常)=0+1/2+2=1/4P(投放|垃圾)=1+1/1+2=2/3 P ( 喜 欢 | 正 常 ) = 2 + 1 / 2 + 2 = 3 / 4 P ( 喜 欢 | 垃 圾 ) = 0 + 1 / 1 + 2 = 1 / 3 P ( 篮 球 | 正 常 ) = 1 + 1 / 2 + 2 = 1 / 2 P ( 篮 球 | 垃 圾 ) = 0 + 1 / 1 + 2 = 1 / 3 P ( 电 影 | 正 常 ) = 1 + 1 / 2 + 2 = 1 / 2 P ( 电 影 | 垃 圾 ) = 0 + 1 / 1 + 2 = 1 / 3 P ( 广 告 | 正 常 ) = 0 + 1 / 2 + 2 = 1 / 4 P ( 广 告 | 垃 圾 ) = 1 + 1 / 1 + 2 = 2 / 3 P ( 投 放 | 正 常 ) = 0 + 1 / 2 + 2 = 1 / 4 P ( 投 放 | 垃 圾 ) = 1 + 1 / 1 + 2 = 2 / 3
分母 + 2是因为伯努利模型,每个特征的属性个数为2, 即存在,或者不存在
以上我们计算的先验概率,和条件概率是我们从样本中学习到的,下面我们通过样本中学到的这两个概率做预测(求解后验概率)
假设有这样一个新样本
投放电影广告
我们计算后验概率
P(正常|X)=P(投放|正常)∗P(电影|正常)∗P(广告|正常)∗P(正常)=(1/4)∗(1/2)∗(1/4)∗(3/5)=0.018P(垃圾|X)=P(投放|垃圾)∗P(电影|垃圾)∗P(广告|垃圾)∗P(垃圾)=(2/3)∗(1/3)∗(2/3)∗(2/5)=0.040 P ( 正 常 | X ) = P ( 投 放 | 正 常 ) ∗ P ( 电 影 | 正 常 ) ∗ P ( 广 告 | 正 常 ) ∗ P ( 正 常 ) = ( 1 / 4 ) ∗ ( 1 / 2 ) ∗ ( 1 / 4 ) ∗ ( 3 / 5 ) = 0.018 P ( 垃 圾 | X ) = P ( 投 放 | 垃 圾 ) ∗ P ( 电 影 | 垃 圾 ) ∗ P ( 广 告 | 垃 圾 ) ∗ P ( 垃 圾 ) = ( 2 / 3 ) ∗ ( 1 / 3 ) ∗ ( 2 / 3 ) ∗ ( 2 / 5 ) = 0.040
所以,我们依据朴素贝叶斯决策法,判定这个文本为
垃圾文本,这只是个简单的示例,面对这种问题,我们一般会先进行文本的向量化,还需要去除一些停用词,处理样本不均衡问题等等工作。
实际运用以及如何增量学习
我们在实际运用场景中,若我们需要实时的预测,我们就可以将朴素贝叶斯分类器涉及到的所有概率估值事先存储起来,这样在进行预测的时候只需要“查表”即可进行判别;
若任务数据更新频繁,则可以使用“懒惰学习”的方式,即先不进行任何训练,待收到预测请求时再根据当前数据进行概率估值;若数据不断增加,则可在现有估值的基础上,仅对新增样本的属性值所涉及的概率估值进行计数修正就可以实现增量学习。
下一次,总结下logistic 回归分类法