NLP-朴素贝叶斯专题

一 序

本文属于贪心NLP学习笔记系列。本节课老师专题讲解朴素贝叶斯的相关数学知识。

没有数学知识做支撑,寸步难行啊。

数学知识:内容来自https://blog.csdn.net/u011508640/article/details/72815981

概率(probabilty):已知一个模型和参数,怎么去预测这个模型产生的结果的特性。

统计(statistics):相反。统计是,有一堆数据,要利用这堆数据去预测模型和参数。

今天老师讲的MLE和MAP都是统计领域的问题。

似然函数

对于一个函数:

P(x∣θ)

输入有两个:x表示某一个具体的数据;θ 表示模型的参数。

如果\theta 是已知确定的,x 是变量,这个函数叫做概率函数(probability function),它描述对于不同的样本点x,其出现概率是多少。

如果x是已知确定的,\theta是变量,这个函数叫做似然函数(likelihood function), 它描述对于不同的模型参数,出现x这个样本点的概率是多少。

 

二 求最优解 (closed-form)

背景知识,我开始不知道closed-form啥意思。

  • 闭式解(closed form solution)也叫解析解(analytical solution),就是一些严格的公式,给出任意的自变量就可以求出其因变量,也就是问题的解, 他人可以利用这些公式计算各自的问题
  • 所谓的解析解是一种包含分式、三角函数、指数、对数甚至无限级数等基本函数的解的形式. 用来求得解析解的方法称为解析法(analytic techniques),解析法即是常见的微积分技巧,例如分离变量法等
  • 解析解为一封闭形式(closed-form)的函数,因此对任一独立变量,皆可将其带入解析函数求得正确的相应变量

f(x)=x^{2}-2x-3

根据之前的封闭解,套用公式  x=-\frac{2a}{b}=1

 求导f′(x)=2x−2=0 ==> x = 1

梯度下降gradient descent :一阶(梯度下降法背景,有些复杂的函数,没法直接求解,只能用数值计算相关的技术:如迭代法去靠近)

 

x^t= x^{t-1} -\eta \bigtriangledown f(x)

在一个例子:f(x)= x^4-3x^2+4

 求导后:f'{(x)}= 4x^3-6x =0

--->x(4x^2-6)=0

------------>x_1=0,x_2=\sqrt{ \frac{3}{2} },x_3=-\sqrt{ \frac{3}{2} }

x_1,x_2,x_3 分别代入公式,即可求出最小值

2.2  有限制条件的优化 (constrain optimization)

对于某些极值问题,函数通常带有一些约束条件:

    f(x,y)= x+y;  

有限制条件st: x^2+y^2 =1

拉格朗日乘法项 (lagrangian Multiplier)

拉格朗日乘法项就是运用来解决这类问题的。可以通过拉格朗日乘法项把限制条件通过简单的转变加到目标函数中,那么问题就变成了:

maxmize L= x+y+\lambda (x^2+y^2-1 )

老师这么解释:可以把\lambda ()()这一项看作是惩罚项(损失cost),一旦条件不满足会产生惩罚,一旦条件满足,损失为0。

那么\lambda () 也是一个参数,为了求出\lambda ()。也需要参照上面的方法求导(偏导, 因为L的参数超过1个):

f_x{}'(x,y,\lambda )=1+2\lambda x=0

f_y{}'(x,y,\lambda )=1+2\lambda y=0

f_\lambda {}'(x,y,\lambda ) =x^2+y^2-1=0

根据1,2 可得 x=y=-\frac{1}{2\lambda },代入式子3

可求出\lambda _1= \frac{\sqrt{2} }{ 2} \lambda _2= -\frac{\sqrt{2} }{ 2},把  \lambda _1,\lambda _2代入上式,得到两个解(x_1,y_1),(x_2,y_2) ,把两个解代入原来函数进行对比,可得到最优解。

这里相对简单是因为公式采用了x^2+y^2 =1,后面会讲svm 不等号的复杂计算。

拉格朗日的核心思想:把条件作为目标函数的惩罚项

一个问题/场景,有很多模型可选择,选择模型可以理解为:选择目标函数。

训练模型的过程,就是在优化过程。

三 最大似然估计(Maximum Likelihood Estimation)

老师说机器学习的问题都会转化为解目标函数的优化问题,所以数学是一定要会的。其中:

MLE(最大似然估计,采用通过观测到的数据)、

MAP(最大后验估计,采用先验的经验)

Bayesian(采用集成模型的思路)

这里老师没有展开讲数学背景,我从网上找了:

https://zhuanlan.zhihu.com/p/32480810

两大学派的争论

抽象一点来讲,频率学派和贝叶斯学派对世界的认知有本质不同:频率学派认为世界是确定的,有一个本体,这个本体的真值是不变的,我们的目标就是要找到这个真值或真值所在的范围;而贝叶斯学派认为世界是不确定的,人们对世界先有一个预判,而后通过观测数据对这个预判做调整,我们的目标是要找到最优的描述这个世界的概率分布。

 

在对事物建模时,用  \theta表示模型的参数,请注意,解决问题的本质就是求\theta  。那么:

(1) 频率学派:存在唯一真值\theta 。举一个简单直观的例子--抛硬币,我们用  P(head) 来表示硬币的bias。抛一枚硬币100次,有20次正面朝上,要估计抛硬币正面朝上的bias  P(head)=\theta。在频率学派来看,\theta  = 20 / 100 = 0.2,很直观。当数据量趋于无穷时,这种方法能给出精准的估计;然而缺乏数据时则可能产生严重的偏差。例如,对于一枚均匀硬币,即  \theta​​​​​​​  = 0.5,抛掷5次,出现5次正面 (这种情况出现的概率是1/2^5=3.125%),频率学派会直接估计这枚硬币  \theta​​​​​​​  = 1,出现严重错误。

(2) 贝叶斯学派: \theta是一个随机变量,符合一定的概率分布。在贝叶斯学派里有两大输入和一大输出,输入是先验 (prior)和似然 (likelihood),输出是后验 (posterior)。先验,即P(\theta )  ,指的是在没有观测到任何数据时对\theta 的预先判断,例如给我一个硬币,一种可行的先验是认为这个硬币有很大的概率是均匀的,有较小的概率是是不均匀的;似然,即 P(X|\theta ) ,是假设 \theta已知后我们观察到的数据应该是什么样子的;后验,即 P(\theta |X) ,是最终的参数分布。贝叶斯估计的基础是贝叶斯公式,如下:

P(\theta |X)= \frac{ P(X|\theta ).P(\theta ) }{ P(X)}

 

同样是抛硬币的例子,对一枚均匀硬币抛5次得到5次正面,如果先验认为大概率下这个硬币是均匀的 (例如最大值取在0.5处的Beta分布),那么 P(head)​​​​​​​ ,即  P(\theta |X) ,是一个distribution,最大值会介于0.5~1之间,而不是武断的  \theta= 1。

这里有两点值得注意的地方:

  • 随着数据量的增加,参数分布会越来越向数据靠拢,先验的影响力会越来越小
  • 如果先验是uniform distribution,则贝叶斯方法等价于频率方法。因为直观上来讲,先验是uniform distribution本质上表示对事物没有任何预判

本节课重点讲MLE,其余的后面讲。

假设有一枚硬币,它是不均匀的,就是说出现正面和反面的概率不相同。假设我们定义这个硬币出现正面的概率为P(head)=\theta  ,这里的H指的是正面(Head),类似有反面(Tail)。

设我们投掷6次硬币之后得到以下结果(假定每次投掷都是相互独立的事件):

D=\begin{Bmatrix} H&T & H & H &T &H \end{Bmatrix}

其中 D 表示所观测到的所有样本。所以出现正面的概率是 \theta​​​​​​​ =\frac{4}{6}.

那么从数学角度,(D 相当于观测值)基于最大似然估计法, 我们需要最大化观测到样本的概率 P(D) 。

maxP(D)=P(H,T,H,H,T,H)= \theta *(1-\theta )*\theta *\theta *(1-\theta )*\theta=\theta ^4*(1-\theta )^2

这是个只关于\theta的函数,就是求\theta,使得上面公式取值最大(最大似然估计顾名思义,就是要最大化这个函数)。

这个可以根据之前方法求导:

导数的乘法法则 

(x,y)'= x'y+xy'​​​​​​​

\theta ^42(1-\theta )(-1)+4\theta ^3(1-\theta )^2=0

 --->\theta =\frac{2}{3}

和一开始算出的一致。

缺点:上面也提到了MLE的缺点,就是样本数据很少的时候,得出结果很不稳定。

当数据量大的时候,越符合中心极限定理(CLT),越准确。 

中心极限定理是说,n只要越来越大,这n个数的样本均值会趋近于正态分布

样本量少的时候,更偏向使用MAP算法。

提一下,最大后验概率估计MAP(不太展开)

https://blog.csdn.net/u011508640/article/details/72815981

最大似然估计是求参数\theta, 使似然函数P(x_0|\theta )最大。最大后验概率估计则是想求\theta,使P(X_0|\theta )P(\theta ) 最大。

求得的\theta不单单让似然函数大,\theta自己出现的先验概率也得大。

MAP其实是在最大化P(\theta |x_0)=\frac{ P(x_0|\theta )*P(\theta )}{P(X_0)},因为分母x_0={H,T,H,H,T,H} 是确定的.P(x_0)是一个已知值(可以根据上面\frac{4}{6}),所以去掉了分母P(x_0)

最大化P(\theta |x_0)的意义也很明确,x_0​已经出现了,要求\theta,取什么值使P(\theta |x_0)​​​​​​​最大。顺带一提,P(\theta |x_0)即后验概率,这就是“最大后验概率估计”名字的由来。

通常业务场景:问题--》定义问题---》选择模型---》优化  的思路去解决。

四 关于模型与目标函数的关系:

老师用了面向对象的来讲解:

(可以理解为定义明确的函数,有那些层,参数怎么设置,都确定之后就相当于实例化了模型)《---》明确的目标函数f(\theta )

五 朴素贝叶斯(Naive Bayes)

现在假设有一批训练数据 D=\begin{Bmatrix} (x_1,y_1) &(x_2,y_2) &... &(x^N,y^N) \end{Bmatrix} 具体点,可以看成  D是N篇文章的集合,

其中x^i表示第  i篇文章。每一篇文章x^i中包含了m_i个词语,即可以把 x^i=( x_1^i,x_2^i,...x_m^i).假如 x^i全文内容为 "今天|很|高兴|参加|NLP训练营"。

那么m=5,  x^i可表示为x_1^i=”今天“,x_2^i="很",x_3^i="高兴",x_4^i="参加",x_5^i="NLP训练营"。

.y^i是一个文章的分类(正常/垃圾)。​​​​​​​

5.1MLE目标

朴素贝叶斯是生成模型(它试图学习到数据背后的生成机制),它的目标是最大化概率P(D) ,下面写出来:

 P(D)= \prod_{i=1}^{N}P(x^i,y^i) =\prod_{i=1}^{N}P(x^i|y^i) P(y^i)  (式子1:根据贝叶斯定理)

=\prod_{i=1}^{N}P( x_1^i,x_2^i,..,x_m^i |y^i)P(y^i)  (式子2:文章x^i 由很多个词语组成的,代入式子1)

=\prod_{i=1}^{N} \prod_{j=1}^{mi}P(x_j^i|y^i)P(y^i)  (式子3:利用了朴素贝叶斯的假设,也就是每个词语都是相互独立的)

   上面式子涉及到很多数学知识:P(D)就是要使用MLE构建模型,而\prod_{i=1}^{N}P(x^i,y^i) 就是表示用生成模型的方式构建目标函数。

   式子2 是框架,式子3 才是朴素贝叶斯。

朴素贝叶斯有两个假设:

1数据样本独立同分布(这个老师没展开,就是默认了)

如果不是同分布,那就是混合模型了。如果不独立,样本之间存在某种关系,那就需要把这种依赖关系建模进模型(如隐马尔科夫模型)。

2特征条件独立性假设

    假设一个样本x有n个特征,前面的垃圾邮件的例子,比如把邮件x表示成一个n维度向量,其中每一维代表一种特征。特征条件独立性假设说的就是在特定类别下这些特征之间是独立的。

如果不进行独立性假设,假设第i维特征x^i可取值的个数有m_i个,类别取值个数为k个,那么参数个数为:K\sum_{i=1}^{N}m_i个。它的参数规模是指数数量级别的,显然不可行。

在进行独立性假设的前提上,直接相乘就好。转换完就是式子3.

      式子中都是乘法项,每个项是一个概率,若句子很长很容易引起数据的溢出(underflow)。所以我们一般不会直接最大化P(D)   ,而是最大化 log P(D) ,因为 log 函数是严格递增的函数,最大 化 log P(D) 跟最大化  P(D)是等同的。接下来加上log   函数

logP(D)=log(\prod_{i=1}^{N} \prod_{j=1}^{mi}P(x_j^i|y^i)P(y^i)) ( 式子4)

                = log(\prod_{i=1}^{N} \prod_{j=1}^{V}P(w_j|y^i)^{n_ij}P(y^i)) (式子5)

这里V是词典单词的数量。而n_{ij} 是档次w_j 出现在文档的次数(在文章 i出现多少w_j 的次数)。

上面式子5的意思。\prod_{j=1}^{V} 就是循环词库,看词典的词再文档出现的次数。

举例:”我们|天|天|运动“

  --> =\sum_{i=1}^{N}\sum_{j=1}^{V}n_{ij}logp( w_j|y^i)+\sum_{i=1}^{N}logp(y^i)  (式子6: 就是log的函数性质,相乘变相加)

       =\sum_{k=1}^{K}\sum_{i:y^i=k}^{ }\sum_{j=1}^{V}n_{ij}logp( w_j|y^i=k)+\sum_{k=1}^{K}\sum_{i:y^i=k}^{ }logp(y^i=k) (式子7: )

       式子7是把文章的类别做了一个分类,一开始我们是从文档1到文档 N 的顺序来循环,但现在我们先取出类别为1的文章,然后再取出类别为2的文文章,以此类推

所以\sum_{i=1}^{N}可以拆分成\sum_{k=1}^{K}\sum_{i:y^i=k}^{ }i:y^i=k代表属于类别 K 的所有文档.

=\sum_{k=1}^{K}\sum_{i:y^i=k}^{ }\sum_{j=1}^{V}n_{ij}log\Theta_{kj} +\sum_{k=1}^{K}\sum_{i:y^i=k}^{ }log\pi _k (式子 8)

这里引入了两组变量,\Theta_{kj}意思就是当文档分类为 i 的时候出现单词 w_j 的概率;

\pi_k 也就是说文章属于第 k 类的概率.  就是之前讲过垃圾邮件的case:\frac{laji- num }{total -num} 如垃圾邮件总数/邮件总数。这个是朴素贝叶斯的先验。

=\sum_{k=1}^{K}\sum_{i:y^i=k}^{ }\sum_{j=1}^{V}n_{ij}log\Theta_{kj} +\sum_{k=1}^{K}n_klog\pi _k (式子9)

是引入了一个变量  n_k,表示属类别 k 的文章个数(这个数据在统计训练数据的时候可以的,是已知的)即:\sum_{i:y^i=k}^{ } = n_k

对于刚刚加入的两个变量\Theta_{kj}\pi_k ,这两个变量需要满足两个约束条件:

\sum_{u=1}^{K} \pi _u=1  (式子10:表示的是所有文章类别的概率和为1,例如P(正常)+P (垃圾)=1  )

\sum_{v=1}^{V} \Theta _{kv}=1 (式子11:对于任意一个类别的文章,出现所有词典里的单词的总概率和为1)

求解

那么这个问题就是一个有约束条件的优化问题,可以利用里格朗日乘法项(把约束条件加入到目标函数),那么可以把目标函数写成一下形式:

max L =\sum_{k=1}^{K}\sum_{i:y^i=k}^{ }\sum_{j=1}^{V}n_{ij}log\Theta_{kj} +\sum_{k=1}^{K}n_klog\pi _k+\lambda( \sum_{u=1}^{K}\pi _u -1 )+\sum_{k=1}^{K}\lambda _k( \sum_{v=1}^{V}\Theta _{kv}-1 )

找出最优解 :

对 L 进行求导,令导数为0,最后得到最优解。

现在求解的是\pi_k,:

\frac{\partial L}{ \partial \pi_k}=\frac{\partial ( n_klog\pi _k+\lambda \pi _k) }{ \partial \pi_k}  (  只看上面式子跟\pi_k有关项)

=n_k*\frac{1}{\pi _k }+\lambda =0 (  式子13 logx求导就是 \frac{1}{x})

\pi _k= - \frac{1}{ \lambda }*n_k  (式子14)

解得的\pi_k  里面还有一个参数 \lambda。但是我们之前还有约束条件10 \sum_{u=1}^{K} \pi _u=1。我们可以把刚刚解得的\pi_k代入到式子10中。

\sum_{u=1}^{K} -\frac{1}{\lambda }n_u =1 (式子15)

经过移项,可得到 \lambda =- \sum_{u=1 }^{K}n_u,再把 \lambda 带入式子(14)中,则可以得到:

\pi _k= \frac{ n_k}{\sum_{ u=1}^{K}\pi_u }    (式子16)

式子(16)中,分字  n_k是  k类文章出现的个数,分母是所有文章的个数。

现在求解的是\Theta_{kj}

\frac{ \partial L}{\partial \Theta_{kj} }=\frac{ \partial( \sum_{i:y^i=k}^{ }n_{ij}log\Theta _{kj} )+\partial (\lambda _k \sum_{v=1}^{V} \Theta _{kv}-1) }{\partial \Theta_{kj} }    (式子17: 只取跟kj相关的项,其余的值忽略掉)

\sum_{i:y^i=k}^{ } \frac{n_{ij} }{\Theta _{kj}} +\lambda _k=0

\Theta_{kj}=-\frac{1}{ \lambda_k }\sum_{i:y^i=k }^{ }n_{ij}    (式子18 )

解得的  \Theta_{kj} 里又一个未知参数\lambda _k,同时有个约束条件(11)\sum_{v=1}^{V} \Theta _{kv}=1,把解得\Theta_{kj} 代入大式子11中。

\lambda_k= -\sum_{v=1}^{V} \sum_{i:y^i=k}n_{iv} (式子19)

\lambda_k 代入到式子18

 \Theta_{kj}=\frac{ \sum_{i:y^i=k}n_{ij} }{ \sum_{v=1}^{V} \sum_{i:y^i=k}n_{iv}}      (式子20)

式子20 中,分子表示所有类别为k  的文章里面出现了多少个w_j (第j个单词);分母代表的是在类别为  k的所有文章的所有文档里包含了总共多少个词语。

*******************

这节课,视频一共11小节。看起来十分吃力,需要多看几遍去理解。

尤其是需要停下来,再去看看数学知识。

与北京写在除夕夜里,也给大家拜年了,牛年大吉。祝我早日学好数学,尽早入门,不负光阴。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值