参考 http://www.cnblogs.com/jerrylead

多元伯努利事件模型( multi-variate Bernoulli event model)

在 GDA 中,我们要求特征向量 x 是连续实数向量。如果 x 是离散值的话,可以考虑采用朴素贝叶斯的分类方法。
假如要分类垃圾邮件和正常邮件。
我们用一个向量x⃗ (m×1)表示一个包含m个单词的字典。当邮件中出现字典(x⃗ )中的第i个单词时,我们便将xi置1,否则xi=0我们用一个向量\vec x(m\times 1)表示一个包含m个单词的字典。当邮件中出现字典(\vec x)中的第i个单词时,我们便将x_i置1,否则x_i=0。
举个例子如下:

邮件中包含“a”,”buy”且字典x⃗ \vec x中也包含它们,因此字典中的对应位置置1;
而邮件中的单词“aardvark”,“aardwolf”,“zygmurgy”并没有出现在字典中,这类单词我们忽略它们;
而对于字典中未在邮件中出现过的单词,对应的位置我们置为0。
我们的目的是为了建立模型p(x|y)p(x|y).
假如字典中的单词数为50000,这时就会有2500002^{50000}中可能的输入组合,这样我们就需要250000个参数(实际上是需要250000−1个参数,这里的参数其实是多项式分布中的pi)2^{50000}个参数(实际上是需要2^{50000}-1个参数,这里的参数其实是多项式分布中的p_i),参数太多,不可能用来建模。

begin-补充:多项式分布模型(二项式分布的扩展)
多项式分布( multinomial distribution)
某随机实验如果有 k 个可能结局 A1,A2,…,Ak,A_1, A_2, …, A_k,它们的概率分布分别是 p1,p2,…,pkp_1, p_2, …, p_k,那么在 N 次采样的总结果中, A1A_1 出现n1 n_1 次,A2 A_2 出现 n2n_2 次, …, AkA_k 出现 nkn_k 次的这种事件的出现概率 P 有下面公式:(Xi代表出现ni次 X_i 代表出现 n_i 次)

end-补充

因此,我们假设当yy确定时,向量x⃗ 中的\vec x中的元素xix_i的取值(0或1)是相互独立的。这就是朴素贝叶斯假设(Naive Bayes (NB) assumption),基于它的算法称为朴素贝叶斯分类器( Naive Bayes classifier)。
注:假设中是x⃗ \vec x中的任意两个元素在y的条件下,是相互独立的即:p(xi|y)=p(xi|y,xj)  (i≠j)p(x_i|y)=p(x_i|y,x_j)\ \ (i\not = j),而不是x⃗ \vec x中的任意两个元素是相互独立的:p(xi)=p(xi|xj)  (i≠j)p(x_i)=p(x_i|x_j)\ \ (i \not = j)。
在朴素贝叶斯假设下我们有:、

P(X|Z)=P(X|Y,Z)⟺P(X,Y|Z)=P(X|Z)P(Y|Z)

P(X|Z)=P(X|Y,Z)\iff P(X,Y|Z) = P(X|Z)P(Y|Z)

因此我们的原问题可写为下面的形式:

第一个等式根据概率密度链式法则得到,第二个等式由朴素贝叶斯假设得到。

下面给出我们模型的参数:
首先回想朴素贝叶斯公式:p(y|x)=p(x|y)p(y)p(x)p(y|x)=\frac{p(x|y)p(y)}{p(x)},我们的目的是为p(x|y)和p(y)p(x|y)和p(y)建模。
针对p(y)p(y)我们可以给出ϕy=p(y=1)\phi_y=p(y=1),显然此时p(y=0)=1−ϕyp(y=0)=1-\phi_y;
由于p(x|y)=∏ni=1p(xi|y)p(x|y)=\prod_{i=1}^n p(x_i|y),因此为了建立p(x|y=1)和p(x|y=0)p(x|y=1)和p(x|y=0)的模型,就必须先求出所有的p(xi|y=1)和p(xi|y=0)p(x_i|y=1)和p(x_i|y=0)(可以理解为等价于对所有的p(xi|y=1)和p(xi|y=0)p(x_i|y=1)和p(x_i|y=0)建模)。因此可以给出:ϕi|y=1=p(xi=1|y=1)和ϕi|y=0=p(xi=1|y=0)\phi_{i|y=1}=p(x_i=1|y=1)和\phi_{i|y=0}=p(x_i=1|y=0)。
因此我们的参数如下:

ϕi|y=1=p(xi=1|y=1)ϕi|y=0=p(xi=1|y=0)ϕy=p(y=1)

\phi_{i|y=1}=p(x_i=1|y=1)\\ \phi_{i|y=0}=p(x_i=1|y=0)\\ \phi_y=p(y=1)
现在根据给定的训练集 {(x(i),y(i));i=1,...m}\{(x^{(i)},y{(i)});i=1,...m\},我们可以写出下面的求似然值的公式:

这里求似然值和高斯辨别中一样,也是利用的联合概率分布积。
求解后便可得到参数值:

有了参数之后我们便可以用来预测了,对于一个输入样本xx,我们可由下式预测结果:

对于p(y=0|x)只需将上式略作修改p(y=0|x)只需将上式略作修改。
在之前的博文中已经提到分母是不需要计算的,因为对多有样本而言,它的值是固定不变的。
最终的结果取p(y=0|x)和p(y=1|x)p(y=0|x)和p(y=1|x)中的较大者。

多分类情况

朴素贝叶斯模型可以很容易的推广到多分类的情况,比如三分类(y∈{1,2,3}y\in \{1,2,3\})。只需要添加参数:ϕi|y=3=p(xi=1|y=3)\phi_{i|y=3}=p(x_i=1|y=3)且将原来的参数ϕy\phi_y用两个参数替代:ϕy1=∑mi=1I{y(i)=1}m,ϕy2=∑mi=1I{y(i)=2}m\phi_{y_1}=\frac{\sum_{i=1}^m I\{y^{(i)}=1\}}{m},\phi_{y_2}=\frac{\sum_{i=1}^m I\{y^{(i)}=2\}}{m},然后就是求最大似然值,获得各个参数的值。

拉普拉斯平滑

朴素贝叶斯方法有个致命的缺点就是对数据稀疏问题过于敏感。即:若字典(x⃗ \vec x)中的某个单词(例如“NIPS”)没有在训练样本中出现过。当我们测试一个样本时,若该样本中有单词“NIPS”(假设它是x⃗ \vec x中的第35000个元素代表的单词)那么可得:

这将会导致p(y=0|x)和p(y=1|x)p(y=0|x)和p(y=1|x)都为00\frac{0}{0}:

原因就是我们的特征概率条件独立,使用的是相乘的方式来得到结果。
为了解决这个问题,我们打算给未出现特征值,赋予一个“小”的值而不是 0。
具体平滑方法如下:
对于二分类的情况:我们有

p(y=1)=∑mi=1I{y(i)=1}m=∑mi=1I{y(i)=1}∑mi=1I{y(i)=1}+∑mi=1I{y(i)=0}

p(y=1)=\frac{\sum_{i=1}^m I\{y^{(i)}=1\}}{m}=\frac{\sum_{i=1}^m I\{y^{(i)}=1\}}{\sum_{i=1}^m I\{y^{(i)}=1\} + \sum_{i=1}^m I\{y^{(i)}=0\}} ,为了避免上诉情况我们将上式改写:

p(y=1)=∑mi=1I{y(i)=1}+1∑mi=1I{y(i)=1}+1+∑mi=1I{y(i)=0}+1=∑mi=1I{y(i)=1}+1m+2

p(y=1)= \frac{\sum_{i=1}^m I\{y^{(i)}=1\}+1}{\sum_{i=1}^m I\{y^{(i)}=1\} +1 + \sum_{i=1}^m I\{y^{(i)}=0\} +1} =\frac{\sum_{i=1}^m I\{y^{(i)}=1\}+1}{m+2}

回到朴素贝叶斯分类中可得此时参数应为:

ϕj|y=1=∑mi=1I{x(i)j=1⋀y(i)=1}+1∑mi=1I{y(i)=1}+2ϕj|y=0=∑mi=1I{x(i)j=1⋀y(i)=0}+1∑mi=1I{y(i)=0}+2

\phi_{j|y=1}=\frac{\sum_{i=1}^m I\{ x_j^{(i)}=1\bigwedge y^{(i)}=1\}+1}{\sum_{i=1}^m I\{ y^{(i)}=1\}+2}\\ \phi_{j|y=0}=\frac{\sum_{i=1}^m I\{ x_j^{(i)}=1\bigwedge y^{(i)}=0\}+1}{\sum_{i=1}^m I\{ y^{(i)}=0\}+2}\\

上面是对于二项分布的情况,一般的,若x为k项分布,我们类似的在分子加1,在分母加k。

多项式事件模型(multinomial event model)与文本分类

回想一下我们刚刚使用的用于文本分类的朴素贝叶斯模型,这个模型称作多值伯努利事件模型( multi-variate Bernoulli event model)。在该模型中,我们通过检查邮件中的单词是否在字典中出现,以及对应的p(xi=1|y)=ϕi|yp(x_i=1|y)=\phi_{i|y},最终通过p(y)∏ni=1p(xi|y)p(y)\prod_{i=1}^n p(x_i|y)来判定是否为垃圾邮件。
让我们换一个思路,这次我们不先从词典入手,而是选择从邮件入手。让 ii 表示邮件中的第ii个词, xix_i表示这个词在字典中的位置,那么xi xi 取值范围为{1,2,…|V|}\{1,2,…|V|\}, |V||V|是字典中词的数目。 这样第kk封邮件可以表示成(x(k)1,x(k)2,...,x(k)ni)(x_1^{(k)},x_2^{(k)},...,x_{n_i}^{(k)}),ni n_i代表邮件中的单词数, 可以变化,因为每封邮件的词的个数不同。 例如,若邮件以“A NIPS…”开头,若”A”是字典中的第1个单词,“NIPS”是字典中的第35000个单词,那么x1=1,x2=35000x_1=1,x_2=35000。显然,这里的xix_i已经不再是二值(0,1)的了,而是多值的,所以该模型称作多项式事件模型。
现在描述符已介绍完毕,让我们来看看具体是怎么做的吧:
首先假定我们要有一封300个单词的垃圾邮件(假设y=0y=0为垃圾邮件),我们遍历该邮件,将邮件中的单词与其在字典中的序号依次存放在x1,x2,...,x300x_1,x_2,...,x_{300}中,这里也是假设在邮件中的每一个单词的出现都是相互独立的事件,它们对应的概率分布我们类似的可以写成p(x1|y=0),p(x2|y=0)...p(x_1|y=0),p(x_2|y=0)...,因此类似与多元伯努利事件模型,我们能够得到p(y=0|x)=p(y=0)∏ni=1p(xi|y=0)p(y=0|x)=p(y=0)\prod_{i=1}^n p(x_i|y=0)
注:因为邮件中一个单词有可能出现多次,故x1,x2,...,x300x_1,x_2,...,x_{300}可能存在xi=xj=xkx_i=x_j=x_k,这也是多项式事件模型与多元伯努利事件模型的主要不同之处,即:多项式事件模型考虑了单词出现的次数,而多元伯努利事件模型并未考虑单词出现次数。

仿照多元伯努利事件模型中,将p(y=0|x),p(y=1|x)p(y=0|x),p(y=1|x)合并成一个式子:

p(y|x)=p(y)∏i=1np(xi|y)

p(y|x)=p(y)\prod_{i=1}^n p(x_i|y)
从形式上看,和多元伯努利事件模型一样,但是它们是不同的。
首先, xi|yx_i|y已经不再是多元伯努利分布,而是多项式分布。
其次,注意第一个的 n n 是字典中的全部的词, 下面这个n n 是邮件中的词个数。 上面 xix_i 表示一个词是否出现,只有 00 和 11 两个值。下面的 xix_i 表示 |V||V|中的一个值。是多值二项分布模型。 上面的 x x 向量都是 0/10/1 值,下面的 xx 的向量都是字典中的位置。
然后,参数形式也有所变化:
ϕy=p(y)\phi_y=p(y) 这个没变。。。
下面两个参数变了
ϕk|y=1=p(xj=k|y=1)\phi_{k|y=1}=p(x_j=k|y=1)
ϕk|y=0=p(xj=k|y=0)\phi_{k|y=0}=p(x_j=k|y=0),其中 p(xj=k|y=0)p(x_j=k|y=0)可理解为,在一封垃圾邮件中,下一个单词可能为词典中第 ii个单词的概率。

给定训练集{(x(i),y(i));i=1,...,m}\{(x^{(i)},y^{(i)});i=1,...,m\},其中 x(i)=(x(i)1,x(i)2,...,x(i)ni)x^{(i)}=(x_1^{(i)},x_2^{(i)},...,x_{n_i}^{(i)}),之前已经说过, nin_i代表第i封邮件中的单词数。

参数和训练样本都有了,下面开始求最大似然值:

求最大似然值片可获得参数:

应用拉普拉斯平滑:

分类-3-生成学习-3-朴素贝叶斯模型、laplace平滑、多元伯努利事件模型、多项式事件模型相关推荐

  1. sklearn模块之朴素贝叶斯:(二)伯努利模型的实现

      多元Bernoulli模型的朴素贝叶斯分类器适用于离散数据.与MultinomialNB不同之处为: MultinomialNB使用出现次数(频数) BernoulliNB设计用于二进制/布尔特征 ...

  2. 机器学习——分类算法之K近邻+朴素贝叶斯,模型选择与调优

    目录 K-近邻算法 定义 如何求距离? 数据预处理--标准化 sklearn k-近邻算法API 案例--预测入住位置 分类问题 数据处理 k近邻算法相关问题 k值取多大?有什么影响? 优缺点 应用场 ...

  3. 文本分类的基本思想和朴素贝叶斯算法原理

    文本分类的基本思想和朴素贝叶斯算法原理

  4. 《数据分析实战》总结二之分类算法:决策树,朴素贝叶斯,SVM,KNN,Adaboost

    1 决策树 1.1 工作原理 把以前的经验总结出来,最后得到结果 比如打篮球,一般会根据"天气"."温度"."湿度"."刮风&qu ...

  5. 【sklearrn学习】朴素贝叶斯

    朴素贝叶斯是直接衡量标签和特征之间的概率关系的有监督学习算法 分类原理:通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象的类. imp ...

  6. 分类算法(2) ---- 朴素贝叶斯算法(NB)

    朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法. 朴素贝叶斯分类器假设样本每个特征与其他特征都不相关. 一. 基于离散变量 下面以一个简单的数据集为例,阐述基于NB的回归/预测模型: 上述三 ...

  7. 关于机器学习中的朴素贝叶斯以及拉普拉斯平滑

    看过我博文的同学可能知道机器学习之中,存在着判别学习以及生成学习,其主要区别我在另一篇文章中有详细描述,今天我们要讨论的是,在高斯判别分析之中,特征向量x是连续的,实数域上的向量,那么如果这个特征向量 ...

  8. 机器学习:贝叶斯分类器,朴素贝叶斯,拉普拉斯平滑

    数学基础: 数学基础是贝叶斯决策论Bayesian DecisionTheory,和传统统计学概率定义不同. 频率学派认为频率是是自然属性,客观存在的. 贝叶斯学派,从观察这出发,事物的客观随机性只是 ...

  9. 各种机器学习算法的应用场景分别是什么(比如朴素贝叶斯、决策树、K 近邻、SVM、逻辑回归最大熵模型)?...

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 链接:https://www.zhihu.com/question ...

最新文章

  1. DARPA:我们需要一种新型的芯片技术来确保人工智能的长足发展
  2. hibernate c3p0 mysql_hibernate-使用c3p0数据库连接池,以及其它配置
  3. tomcat配置文件修改
  4. Kafka解析之失效副本
  5. 随想录(快速使用lua)
  6. 深度学习应用:入门篇(下)
  7. Android手机屏幕投影到电脑工具
  8. SVD奇异值分解在推荐系统中的应用及实现
  9. java jpeg rpg_史上最骚RPG制作第三期 java端数据的插入和查询
  10. 成都市二手房行情分析
  11. 简单记录使用org.slf4j.MDC进行日志追踪
  12. js对div取值与赋值
  13. python | 短句自动生成SEO文章
  14. 数字货币将提升跨境交易和支付清算速度
  15. anydesk linux安装_在Debian 10/Ubuntu 18.04系统上安装AnyDesk的方法
  16. CTF初探之{NEX校选赛MISC writeup}
  17. 模拟群面——产品设计题
  18. Python毕业设计-【课堂人脸签到系统】附源码课件/Python练手项目
  19. 亿级数据,秒级响应!看Smartbi如何助力经济普查,把脉时代经济!
  20. 【NLP】第 7 章:使用序列到序列神经网络进行文本翻译

热门文章

  1. 手机银行提示服务器证书异常,台州银行个人网银-常见问题及异常问题及处理方法...
  2. C++中Glog使用详解
  3. GLOG如何清理日志
  4. 阿里、B站都是新股东,康佳旗下易平方有望成为A股首家OTT公司?
  5. Unity | Unity发布IOS上架的一系列流程总结
  6. Conflux 研究院 | 《Conflux 协议规范》(黄皮书)导读
  7. 使用切图工具经常遇到的问题
  8. Virgo与Maven整合开发环境搭建(二)
  9. maven依赖本地宝
  10. 1到100以内所有奇数的和