NLP-Task5——朴素贝叶斯和支持向量机原理

朴素贝叶斯分类器

简介

假定输入的特征是x1,x2,...,xnx_1,x_2,...,x_nx1,x2,...,xn,输出的分类是y,朴素贝叶斯模型使用贝叶斯公式计算后验概率:
P(y∣x1,…,xn)=P(y)P(x1,…xn∣y)P(x1,…,xn) P\left(y | x_{1}, \ldots, x_{n}\right)=\frac{P(y) P\left(x_{1}, \ldots x_{n} | y\right)}{P\left(x_{1}, \ldots, x_{n}\right)} P(yx1,,xn)=P(x1,,xn)P(y)P(x1,xny)
朴素贝叶斯模型假设给定分类y的条件下,输入的特征之间是相互独立的,因此对于任意的i都有:
P(xi∣y,x1,…,xi−1,xi+1,…,xn)=P(xi∣y) P\left(x_{i} | y, x_{1}, \dots, x_{i-1}, x_{i+1}, \ldots, x_{n}\right)=P\left(x_{i} | y\right) P(xiy,x1,,xi1,xi+1,,xn)=P(xiy)
代入前面的式子得到:
P(y∣x1,…,xn)=P(y)∏i=1nP(xi∣y)P(x1,…,xn) P\left(y | x_{1}, \ldots, x_{n}\right)=\frac{P(y) \prod_{i=1}^{n} P\left(x_{i} | y\right)}{P\left(x_{1}, \ldots, x_{n}\right)} P(yx1,,xn)=P(x1,,xn)P(y)i=1nP(xiy)
因为输入固定,P(x1,...,xn)P(x_1,...,x_n)P(x1,...,xn)是一个常量,所以我们可以用下式来分类:
P(y∣x1,…,xn)∝P(y)∏i=1nP(xi∣y)y^=arg⁡max⁡yP(y)∏i=1nP(xi∣y) P\left(y | x_{1}, \ldots, x_{n}\right) \propto P(y) \prod_{i=1}^{n} P\left(x_{i} | y\right) \hat{y}=\arg \max _{y} P(y) \prod_{i=1}^{n} P\left(x_{i} | y\right) P(yx1,,xn)P(y)i=1nP(xiy)y^=argymaxP(y)i=1nP(xiy)
在实际使用中,特征会很多,概率p(xi∣y)p(x_i|y)p(xiy)通常会比较小,直接相乘会下溢,因此我们可以取对数,把概率的乘法变成log域的加法。p(y)可以简单地用最大似然的方法从训练数据中估计出来。而p(xi∣y)p(x_i|y)p(xiy)可以有多种不同的分布,从而得到不同的朴素贝叶斯模型的具体实现。

高斯朴素贝叶斯(Gaussian Naive Bayes)模型

P(xi∣y)=12πσy2exp⁡(−(xi−μy)22σy2) P\left(x_{i} | y\right)=\frac{1}{\sqrt{2 \pi \sigma_{y}^{2}}} \exp \left(-\frac{\left(x_{i}-\mu_{y}\right)^{2}}{2 \sigma_{y}^{2}}\right) P(xiy)=2πσy2 1exp(2σy2(xiμy)2)
因此它适合特征是集中分布于某个中心点的连续特征。

from sklearn import datasets
iris = datasets.load_iris()
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
y_pred = gnb.fit(iris.data,iris.target).predict(iris.data)
print("Number of mislabeled points of a total %d points : %d"
% (iris.data.shape[0],(iris.target != y_pred).sum()))

输出

Number of mislabeled points of a total 150 points : 6

Bernoulli朴素贝叶斯模型

Bernoulli朴素贝叶斯模型假设似然概率服从二项分布,也就是特征$x_i$是二值特征。为了使用Bernoulli朴素贝叶斯模型,我们需要对输入进行二值化。比如朴素贝叶斯模型来进行垃圾邮件过滤。假设词典的大小是1000,那么每一个邮件都可以表示成一个1000维的向量。如果某个词在邮件里出现了,那么对应的位置的值就是1,否则就是0.

因此p(xi∣y=1)p(x_i|y=1)p(xiy=1)是一个Bernoulli分布,它有一个参数p1p_1p1,表示p(xi=1∣y=1)=p1p(x_i=1|y=1)=p_1p(xi=1y=1)=p1,而p(xi=0∣y=1)=1−p1p(x_i=0|y=1)=1-p_1p(xi=0y=1)=1p1。类似的p(xi∣y=0)p(x_i|y=0)p(xiy=0)也是一个Bernoulli分布,它的参数是p0p_0p0。注意,p0p_0p0p1p_1p1没有任何关系。

要估计p1p_1p1,首先统计一下训练数据里有多少个邮件的分类是1(垃圾),记为N1N_1N1,接着统计这些邮件里有多少封出现了词1,记为N11N_{11}N11,那么p1^=N11/N1\hat{p_1}=N_{11}/N_1p1^=N11/N1

和语言模型一样,很多词没有在训练数据中,或者只在正/负样本里出现,从而出现概率为零的情况,我们可以采取平滑方法。

多项式朴素贝叶斯模型

Bernoulli朴素贝叶斯模型的问题是不考虑一个词在文档中出现的频率,这是有一些问题的。而多项式朴素贝叶斯可以利用词频信息。多项式朴素贝叶斯也是把一篇文档变成长度为N(词典大小)的向量,某个词在文档中出现的次数就是对应位置的值,和Bernoulli相比,Bernoulli模型的特征是二值的而多项式模型的特征不是。

假设所有的类别集合是C,词典的大小是N,第i个文档是tit_iti。那么分类的时候需要计算后验概率:
Pr⁡(c∣ti)=Pr⁡(ti∣c)Pr⁡(c)Pr⁡(ti) \operatorname{Pr}\left(c | t_{i}\right)=\frac{\operatorname{Pr}\left(t_{i} | c\right) \operatorname{Pr}(c)}{\operatorname{Pr}\left(t_{i}\right)} Pr(cti)=Pr(ti)Pr(tic)Pr(c)
分母与C无关,因此可以忽略,Pr(c)Pr(c)Pr(c)是分类C的先验概率,而Pr(ti∣c)Pr(t_i|c)Pr(tic)是分类C"生成"文档tit_iti的概率。这个概率我们假设它服从多项式分布:
Pr⁡(ti∣c)=(∑nfni)!∏nPr⁡(wn∣c)fnifni! \operatorname{Pr}\left(t_{i} | c\right)=\left(\sum_{n} f_{n i}\right) ! \prod_{n} \frac{\operatorname{Pr}\left(w_{n} | c\right)^{f_{n i}}}{f_{n i} !} Pr(tic)=(nfni)!nfni!Pr(wnc)fni
上式的n是词典里的第n个词,fnif_{ni}fni表示第n个词wnw_nwn在文档t中出现的次数,Pr(wn∣c)Pr(w_n|c)Pr(wnc)是类别c的文档产生词wnw_nwn的概率。上式的核心是∏nPr⁡(wn∣c)fni\prod_{n} \operatorname{Pr}\left(w_{n} | c\right)^{f_{n i}}nPr(wnc)fni,其余的阶乘只是为了归一化。

假设一篇文档中有5个词,2个hello,2个world,1个bye,则它们组成的不重复文档共有5!2!2!1!\frac{5 !}{2 ! 2 ! 1 !}2!2!1!5!

推广一些,假设文档的词频向量为f1,f2,...fnf_1,f_2,...f_nf1,f2,...fn,fif_ifi表示第i个词出现的频次,那么不重复的文档数为(∑i=1nfi)!∏i=1nfi!\frac{\left(\sum_{i=1}^{n} f_{i}\right) !}{\prod_{i=1}^{n} f_{i} !}i=1nfi!(i=1nfi)!

而我们的多项式分布假设文档的表示与顺序无关,也就是词袋模型。因此文档Pr(ti∣c)Pr(t_i|c)Pr(tic)的概率可以这样来理解:如果不考虑重复,那么Pr⁡(ti∣c)=∏i=1nPr⁡(wn∣c)fni\operatorname{Pr}\left(t_{i} | c\right)=\prod_{i=1}^{n} \operatorname{Pr}\left(w_{n} | c\right)^{f_{n i}}Pr(tic)=i=1nPr(wnc)fni,但是那些重复的都应该算到这篇文档里,乘起来就得到了
Pr⁡(ti∣c)=(∑nfni)!∏nPr⁡(wn∣c)fnifni!\operatorname{Pr}\left(t_{i} | c\right)=\left(\sum_{n} f_{n i}\right) ! \prod_{n} \frac{\operatorname{Pr}\left(w_{n} | c\right)^{f_{n i}}}{f_{n i} !}Pr(tic)=(nfni)!nfni!Pr(wnc)fni

在分类的时候,因为(∑nfni)!,∏n1fni\left(\sum_{n} f_{n i}\right) !, \prod_{n} \frac{1}{f_{n i}}(nfni)!,nfni1与c无关,因此可以看出归一化常量,所以只需要计算∏i=1nPr⁡(wn∣c)fni\prod_{i=1}^{n} \operatorname{Pr}\left(w_{n} | c\right)^{f_{n i}}i=1nPr(wnc)fni。问题的关键就是估计参数Pr⁡(wn∣c)\operatorname{Pr}(w_n|c)Pr(wnc),我们可以用最大似然估计,为了避免数据稀疏带来的零概率问题,我们加入了Laplace平滑,计算公式如下:
Pr⁡^(wn∣c)=1+FncN+∑x=1NFxc \widehat{\operatorname{Pr}}\left(w_{n} | c\right)=\frac{1+F_{n c}}{N+\sum_{x=1}^{N} F_{x c}} Pr (wnc)=N+x=1NFxc1+Fnc
假设共有3个词,分类c有两篇文档

w1 w2 w1
w2 w1

那么F1c=3,F2c=2,F3c=0F_{1c}=3,F_{2c}=2,F_{3c}=0F1c=3,F2c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值