导航:首页 > 源码编译 > 贝叶斯bayes分类算法

贝叶斯bayes分类算法

发布时间:2024-07-02 01:11:31

1. 贝叶斯算法

贝叶斯算法是统计学的一种分类方法,它是一类利用概率统计知识进行分类的算法。

在许多场合,朴素贝叶斯分类算法可以与决策树和神经网络分类算法相媲美,该算法能运用到大型数据库中,而且方法简单、分类准确率高、速度快。

通常,用虚线代表NB所需的边,用实线代表新增的边。属性Ai与Aj之间的边意味着属性Ai对类别变量C的影响还取决于属性Aj的取值。这些增加的边需满足下列条件:类别变量没有双亲结点,每个属性有一个类别变量双亲结点和最多另外一个属性作为其双亲结点。

由于在TAN算法中考虑了n个属性中(n-1)个两两属性之间的关联性,该算法对属性之间独立性的假设有了一定程度的降低,但是属性之间可能存在更多其它的关联性仍没有考虑,因此其适用范围仍然受到限制。

2. 第10天:NLP补充——朴素贝叶斯(Naive-Bayes)

1、引言
  贝叶斯方法是一个历史悠久,朴素贝叶斯中的朴素一词的来源就是假设各特征之间相互独立。这一假设使得朴素贝叶斯算法变得简单,但有时会牺牲一定的分类准确率。当然有着坚实的理论基础的方法,同时处理很多问题时直接而又高效,很多高级自然语言处理模型也可以从它演化而来。因此,学习贝叶斯方法,是研究自然语言处理问题的一个非常好的切入口。
2、贝叶斯公式
贝叶斯公式其实很简单,但是很常用,就一行:

  而我们二分类问题的最终目的就是要判断 P(“属于某类”|“具有某特征”) 是否大于1/2就够了。贝叶斯方法把计算“具有某特征的条件下属于某类”的概率转换成需要计算“属于某类的条件下具有某特征”的概率,而后者获取方法就简单多了,我们只需要找到一些包含已知特征标签的样本,即可进行训练。而样本的类别标签都是明确的,所以贝叶斯方法在机器学习里属于有监督学习方法。
  这里再补充一下,一般‘先验概率’、‘后验概率’是相对出现的,比如 P(Y)与 P(Y|X) 是关于 Y的先验概率与后验概率, P(X)与 P(X|Y)是关于 X的先验概率与后验概率。
4、垃圾邮件识别
  我们可以通过一个例子来对邮件进行分类,识别垃圾邮件和普通邮件,如果我们选择使用朴素贝叶斯分类器,那目标就是判断 P(“垃圾邮件”|“具有某特征”) 是否大于1/2。现在假设我们有垃圾邮件和正常邮件各1万封作为训练集。需要判断以下这个邮件是否属于垃圾邮件:

也就是判断概率 P(“垃圾邮件”|“我司可办理正规发票(保真)17%增值税发票点数优惠!”)是否大于1/2。我们不难发现:通过上述的理解,也就是将其转换成的这个概率,计算的方法:就是写个计数器,然后+1 +1 +1统计出所有垃圾邮件和正常邮件中出现这句话的次数啊。也就是:

  于是当我们接触到了中文NLP中,其中最为重要的技术之一:分词!!!也就是把一整句话拆分成更细粒度的词语来进行表示。另外,分词之后去除标点符号、数字甚至无关成分(停用词)是特征预处理中的一项技术。我们观察(“我”,“司”,“可”,“办理”,“正规发票”,“保真”,“增值税”,“发票”,“点数”,“优惠”),这可以理解成一个向量:向量的每一维度都表示着该特征词在文本中的特定位置存在。这种将特征拆分成更小的单元,依据这些更灵活、更细粒度的特征进行判断的思维方式,在自然语言处理与机器学习中都是非常常见又有效的。因此贝叶斯公式就变成了:

1、朴素贝叶斯(Naive Bayes),“Naive”在何处?
  加上条件独立假设的贝叶斯方法就是朴素贝叶斯方法(Naive Bayes)。将句子(“我”,“司”,“可”,“办理”,“正规发票”) 中的 (“我”,“司”)与(“正规发票”)调换一下顺序,就变成了一个新的句子(“正规发票”,“可”,“办理”, “我”, “司”)。新句子与旧句子的意思完全不同。但由于乘法交换律,朴素贝叶斯方法中算出来二者的条件概率完全一样!计算过程如下:

其中“发票”重复了三次。
3、处理重复词语的三种方式
(1)、多项式模型:
  如果我们考虑重复词语的情况,也就是说,重复的词语我们视为其出现多次,直接按条件独立假设的方式推导,则有:

统计计算 P(“词语”|S)时也是如此。

我们扫描一下训练集,发现“正规发票”这个词从出现过!!! ,于是 P(“正规发票”|S)=0 …问题严重了,整个概率都变成0了!!!朴素贝叶斯方法面对一堆0,很凄惨地失效了…更残酷的是这种情况其实很常见,因为哪怕训练集再大,也可能有覆盖不到的词语。本质上还是样本数量太少,不满足大数定律,计算出来的概率失真 *。为了解决这样的问题,一种分析思路就是直接不考虑这样的词语,但这种方法就相当于默认给P(“正规发票”|S)赋值为1。其实效果不太好,大量的统计信息给浪费掉了。我们进一步分析,既然可以默认赋值为1,为什么不能默认赋值为一个很小的数?这就是平滑技术的基本思路,依旧保持着一贯的作风,朴实/土但是直接而有效。对于伯努利模型,P(“正规发票”|S)的一种平滑算法是:

接下来的核心问题就是训练出一个靠谱的分类器。首先需要有打好标签的文本。这个好找,豆瓣影评上就有大量网友对之前电影的评价,并且对电影进行1星到5星的评价。我们可以认为3星以上的评论都是好评,3星以下的评论都是差评。这样就分别得到了好评差评两类的语料样本。剩下就可以用朴素贝叶斯方法进行训练了。基本思路如下:

但是由于自然语言的特点,在提取特征的过程当中,有一些tricks需要注意:

当然经过以上的处理,情感分析还是会有一部分误判。这里涉及到许多问题,都是情感分析的难点:

(2)、拼写纠错
  拼写纠错本质上也是一个分类问题。但按照错误类型不同,又分为两种情况:

真词错误复杂一些,我们将在接下来的文章中进行探讨。而对于非词错误,就可以直接采用贝叶斯方法,其基本思路如下:

训练样本1:该场景下的正常用词语料库,用于计算 P(候选词i)。

训练样本2:该场景下错误词与正确词对应关系的语料库,用于计算 P(错误词|候选词i)

当然,朴素贝叶斯也是有缺陷的。比如我们知道朴素贝叶斯的局限性来源于其条件独立假设,它将文本看成是词袋子模型,不考虑词语之间的顺序信息,例如:朴素贝叶斯会把“武松打死了老虎”与“老虎打死了武松”认作是一个意思。那么有没有一种方法提高其对词语顺序的识别能力呢?当然有,就是这里要提到的N-gram语言模型。接下来详细给大家介绍N-gram语言模型。

1、从假设性独立到联合概率链规则
 与我们之前我们垃圾邮件识别中的条件独立假设是一样的:

4、N-gram实际应用举例
(1)、词性标注
  词性标注是一个典型的多分类问题。常见的词性包括名词、动词、形容词、副词等。而一个词可能属于多种词性。如“爱”,可能是动词,可能是形容词,也可能是名词。但是一般来说,“爱”作为动词还是比较常见的。所以统一给“爱”分配为动词准确率也还足够高。这种最简单粗暴的思想非常好实现,如果准确率要求不高则也比较常用。它只需要基于词性标注语料库做一个统计就够了,连贝叶斯方法、最大似然法都不要用。词性标注语料库一般是由专业人员搜集好了的,长下面这个样子。其中斜线后面的字母表示一种词性,词性越多说明语料库分得越细;需要比较以下各概率的大小,选择概率最大的词性即可:

将公式进行以下改造,比较各概率的大小,选择概率最大的词性:

N-gram分类器是结合贝叶斯方法和语言模型的分类器。这里用 Y1,Y2分别表示这垃圾邮件和正常邮件,用 X表示被判断的邮件的句子。根据贝叶斯公式有:

比较这些概率的大小,找出使得 P(Yi|X)最大的 Yi即可得到 X 所属的分类(分词方案)了。Yi作为分词方案,其实就是个词串,比如(“我司”,“可”,“办理”,“正规发票”)(“我”,“司可办”,“理正规”,“发票”),也就是一个向量了。而上面贝叶斯公式中 P(X|Yi)项的意思就是在分类方案 Yi的前提下,其对应句子为 X的概率。而无论分词方案是(“我司”,“可”,“办理”,“正规发票”)还是(“我”,“司可办”,“理正规”,“发票”),或者其他什么方案,其对应的句子都是“我司可办理正规发票”。也就是说任意假想的一种分词方式之下生成的句子总是唯一的(只需把分词之间的分界符号扔掉剩下的内容都一样)。于是可以将 P(X|Yi)看作是恒等于1的。这样贝叶斯公式又进一步化简成为:

也就是说我们

3. 朴素贝叶斯(Naive Bayes)算法

朴素贝叶斯算法属于分类算法。发源于古典数学理论,对缺失数据不太敏感,有稳定的分类效率,模型所需估计的参数很少,算法比较简单。

朴素贝叶斯算法 贝叶斯 是说明这个算法和贝叶斯定理有联系,而 朴素 是因为处理实际的需要,做了一个简化—— 假设每个特征之间是独立的 (如果研究的对象互相之间的影响很强,计算概率时考虑的问题非常复杂,做了独立假设,就可以分解后进行研究),这是这个算法模型与贝叶斯定理的区别。

将 x 作为特征,y 作为类别,那公式左边的 P(yi|x)就是说在知道特征 x 的情况下,计算这个特征属于 yi 类的可能性大小。通过比较找出这个可能性的值最大的属于哪一类,就将特征 x 归为这一类。

第3步的计算就是整个关键所在,计算依据是上面的贝叶斯公式。

对于每一个类的概率计算,公式右边的分母的 P(x)都是相同的,所以可以不计算(我们只是对最终结果进行比较,不影响)。

P(yi)也称为先验概率,是 x 属于 yi 类的一个概率,这个是通过历史信息得到的(在程序实现的时候,历史信息或者说先验信息就是我们的训练数据集),我们通过对训练样本数据进行统计,分别算出 x 属于 y1,y2,...,yn 类的概率是多少,这个是比较容易得到的。

所以,主要是求 P(x|yi)= P(a1,a2,...,am|yi)

这个时候对于贝叶斯模型的 朴素 的独立性假设就发挥作用了(综合的计算变成了独立计算后的综合,简化模型,极大地减少了计算的复杂程度):

P(a1,a2,...,am|yi) = P(a1|yi)P(a2|yi)...P(am|yi)

所以计算想要得到的东西如下:

一个程序简例

4. 贝叶斯规则

全概率公式 :设试验E的样本空间为S,A为E的事件,B1,B2,...,Bn为S的一个划分,并且P(Bi)>0(i=1,2,..,n) 那么:
P(A)=P(A|B1)P(B1)+P(A|B2)PB2)+...+P(A|Bn)P(Bn)

全概率公式证明依据:P(A)=P(AS)=P(AB1)+P(AB2)...+P(ABn)=P(A|B1)P(B1)+P(A|B2)P(B2)+....P(A|Bn)P(Bn)
S是样本空间,B1,B2,...,Bn是S的划分

贝叶斯公式 :设试验E的样本空间为S,A为E的事件,B1,B2,..,Bn为S的一个划分,且P(A)>0,P(Bi)>0(i=1,2,3,...,n)那么:

贝叶斯公式分子证明依据(条件概率公式):P(Bi|A)=P(BiA)/P(A) P(BiA)=P(A|Bi)P(Bi)
贝叶斯公式分母证明依据(全概率公式)

贝叶斯规则以Thomas Bayes主教命名。
用来估计统计量的某种性质。
贝叶斯是用概率反映知识状态的确定性程度,数据集可以直接观测到,所以他不是随机的。

贝叶斯推断与其他统计学推断方法截然不同。它建立在主观判断的基础上,也就是说,你可以不需要客观证据,先估计一个值,然后根据实际结果不断修正。贝叶斯推断需要大量逗亏的计算。

http://www.ruanyifeng.com/blog/2011/08/bayesian_inference_part_one.html

他是一种条件概率条件概率。 比如:在B发生时,A发生的可能性。
公式为:

公式中,事件Bi的概率为P(Bi),事件Bi已发生条件下事件A的概率为P(A│Bi),事件A发生条件下事件Bi的概率为P(Bi│A)。
用来计算简单条件下发生的复杂事件。

正如以上所说:在B发生时,A发生的可能性。 P(A|B)
通过韦恩图可以看到:

B发生时,A发生的概率:P(A|B)=P(A∩B)/P(B)
可以得到条件概率的推导过程如下:

等式合并:

最终得到:

P(类山察神别|特征) = P(特征|类别)P(类别)/P(特征)

根据以往经验和分析得到的概率。 往往作为 由因求果 问题中的 因 出现的概率。 又称: 古典概率

(在观测数据之前,我们将已知的知识表示成 先验概率分布 但是一般而言我们会选择一个相当宽泛的先验(高熵),反映在观测到的任何数据前,参数的高度不确定性)
(通常,先验概率开始是相对均匀的分布或高熵的高斯分布,观测数据通常会使后验的熵下降)

在上述贝叶斯公式中,我们把P(A)称为 先验概率 。没祥 (B事件发生之前,对A事件概率的一个判断)
把P(A|B)称为 后验概率 。(事件B发生之后,对事件A概率的重新评估)
P(B|A)/P(B)称为:可能性函数。 这是一个调整因子,使得预估概率更接近真实概率。

在一个通信系统中,在收到某个消息之后,接收端所了解到的该消息发送的概率称为后验概率。
他是在给出相关证据或者数据后得到的条件概率。
他指的是在得到结果的信息重新修正的概率。计算后验概率必须以先验概率为基础。

后验概率 = 先验概率 * 调整因子

上述调整因子又叫 似然函数
他是关于统计模型参数的函数。
假定一个关于参数y,具有离散型概率分布P的随机变量X,则在给定X的输出x时,关于参数y的似然函数是:L(y|x)等于给定参数y后变量X的概率:
L(y|x) = P(X=x|y) = Py(x)

概率:用于已知一些参数的情况下,预测接下来的观测所得到的结果。
似然:用于在已知某些观测所得到的结果时,对有关食物的性质的参数进行估计。
似然函数可以理解为条件概率的逆反。

材料:
1:先验概率:利用现有材料计算的。
2:后验概率:利用先验概率+补充材料计算的。
计算:
1:先验概率:古典概率。
2:后验概率:使用贝叶斯公式,使用样本资料计算逻辑概率,还要使用概率分布,数理统计。

将复杂事件概率求解 转化为: 不同情况下发生的简单事件概率的和。
用来计算复杂事件的概率。

定义:假设{Bn:n=1,2,3,...}是一个概率空间的有限或者无限的分割(既Bn为一完备事件组),且每个集合Bn是一个可测集合,则对任意时间A有全概率公式:

通过条件概率的推导可以看到:P(A∩B) = P(A|B)P(B) = P(B|A)P(A)
带入上述公式。

全概率公式,将对一复杂事件A的概率求解问题转换为在不同情况下或者不同原因Bn下发生的简单概率的求和问题。

现在我们有样本空间S,事件A,A‘和B。
韦恩图:

从上图给出:
P(B) = P(B∩A) + P(B∩A')
将条件概率推导中的公式有:
P(B∩A) = P(B|A)P(A)
将上述公式合并:
P(B) = P(B|A)P(A) + P(B|A')P(A')

解释:如果A和A'构成样本空间,那么事件B的概率就是A和A’的概率分别乘以B对这两个事件的条件概率之和。
公式另一写法:

朴素贝叶斯算法是假设各个特征之间相互独立。

假设一种特定的癌症,发病率为人口的1%。
如果得了这种癌症,检查结果90%可能是呈阳性。
但是你并没有患癌症,检查结果还是呈阳性。所以,假设 如果你没有患上这种特定癌症,有90%可能性是呈阴性的。 这通常叫做 特异性

问题:没有任何症状的情况下,你进行了检查,检查结果呈阳性, 那么你认为患上这种特定癌症的可能性是多少?
之前的癌症概率是 1%,敏感型和特殊性是 90%,癌症测试结果呈阳性的人患病的概率有多大?
是: 百分之八又1/3

假定A事件表示得病,P(A)=0.001,这是 先验概率 。(没有做实验之前,我们预计的发病率)
假定B事件表示阳性,那么计算P=(A|B),这是 后验概率 。(做了试验后,对发病率的估计)
P(A|B)=P(A)P(B|A)/P(B)
用全概率公式,改写分母:
P(A|B)=P(A)P(B|A)/(P(B|A)P(A)+P(B|A反)P(A反))

假设:现在我们有两个人A和B,两人写邮件都会用到love,deal,life这三个单词。
A使用三个单词的频率为:love=0.1,deal=0.8,life=0.1。
B使用三个单词的频率为:love=0.5,deal=0.2,life=0.3。
现在我们有很多封email,假设这封email作者是A或者B是等概率的,
现在有一封email,只包括life和deal两个词,那么这封邮件的作者是A或者B的概率。

计算先验概率
P(emailA) = P(lifeA)P(dealA)P(A) = 0.1* 0.8 * 0.5 = 0.04
P(emailB) = P(lifeB)P(dealB)P(B) = 0.3 * 0.2 * 0.5 = 0.03

当观察到life和deal两个词的条件下,作者是A或者B的概率
计算后验概率
P(emailA|"life,deal") = P(emailA) * f(x)(似然函数) = 0.04 * (1/(0.04+ 0.03)) = 0.57
P(emailB|"life,deal") = P(emialB) * f(x) = 0.03 * (1/(0.04+ 0.03)) = 0.43

全概率:
P(emailA|"life,deal") + P(emailB|"life,deal") = 1

阅读全文

与贝叶斯bayes分类算法相关的资料

热点内容
idea编译进度条 浏览:132
文件夹工具箱软件 浏览:686
最近为什么手机连不上索尼服务器 浏览:877
海康录像机怎么关视频加密 浏览:786
编程以后有可能被机器人代替吗 浏览:522
windows创建文件命令 浏览:986
linuxcopy文件内容 浏览:383
程序员帅哥秃顶 浏览:839
阿里云服务器开通流程 浏览:105
如何开云服务器 浏览:979
网站小说源码 浏览:301
php用什么ide 浏览:867
网上预约课程app哪个好 浏览:153
android兼容测试工具 浏览:96
云服务器不支持虚拟化怎么办 浏览:189
加密方式的演变 浏览:364
java常用算法pdf 浏览:734
服务器数据遇到异常什么原因 浏览:450
phpexif信息 浏览:544
单片机三字节浮点数 浏览:758