【机器学习】--机器学习之朴素贝叶斯从初始到应用

一、前述

机器学习算法中,有种依据概率原则进行分类的朴素贝叶斯算法,正如气象学家预测天气一样,朴素贝叶斯算法就是应用先前事件的有关数据来估计未来事件发生的概率。

二、具体

1、背景--贝叶斯定理引入
对于两个关联事件(非独立事件)A和B,同时发生的概率为:P(AB)=P(A|B)P(B)=P(B|A)P(A),所以把公式变形后可得:

贝叶斯定理,他是朴素贝叶斯算法的基础,就是下面的这个公式:

现在我们来把这个式子扩充一下:假设B由很多个独立事件组成,或者说,B由很多个属性组成B1,B2...Bn他们相互独立,那上面的式子成了这个样子:


也就是说我们把P(B|A)替换成了P(B1|A)P(B2|A)...P(Bn|A),上面的式子也很容易看出是成立的。我们把上面的公式先记住。其实我学的时候一直在纠结这么明显的式子究竟会起什么作用。

上面公式起作用的前提是假设特征和特征之间是独立的。因此这就是朴素贝叶斯的中朴素一词的来源。

2、案例一

对于垃圾邮件案例来说:

说明:P(spam)是先验概率。
          P(spam|Viagra)是后验概率。

构建频率表:

求解:
P(垃圾邮件|Viagra)=P(Viagra|垃圾邮件)*P(垃圾邮件)/P(Viagra)=(4/20)*(20/100)/(5/100)=0.8
结论:
因此,如果电子邮件含有单词Viagra,那么该电子邮件是垃圾邮件的概率为80%。所以,任何含有单词Viagra的消息都需要被过滤掉。

拓展一:假设特征和特征之间是独立的。
当有更多的特征时,则有如下公式:

分别求解垃圾邮件概率和非垃圾邮件概率:

分母可以先忽略它,垃圾邮件的总似然为:

? (4/20)*(10/20)*(20/20)*(12/20)*(20/100)=0.012

? 非垃圾邮件的总似然为:

? (1/80)*(66/80)*(71/80)*(23/80)*(80/100)=0.002

? 将这些值转换成概率,我们只需要一步得到垃圾邮件概率为

85.7%

拓展二:假设文章中包含了4个单词的邮件呢?

? 我们可以计算垃圾邮件的似然如下:

? (4/20)*(10/20)*(0/20)*(12/20)*(20/100)=0

? 非垃圾邮件的似然为:

? (1/80)*(14/80)*(8/80)*(23/80)*(80/100)=0.00005

? 因此该消息是垃圾邮件的概率为0/(0+0.00005)=0

? 该消息是非垃圾邮件的概率为0.00005/(0+0.00005)=1

? 问题出在Groceries这个单词,所有单词Grogeries有效抵消或否决了所有其他的证据。

解决方法:

拉普拉斯估计本质上是给频率表中的每个计数加上一个较小的数,这样就保证了每一类中每个特征发生概率非零。

? 通常情况下,拉普拉斯估计中加上的数值设定为1,这样就保证每一类特征的组合至少在数据中出现一次。

? 然后,我们得到垃圾邮件的似然为:

? (5/24)*(11/24)*(1/24)*(13/24)*(24/108)=0.0004

? 非垃圾邮件的似然为:

? (2/84)*(15/84)*(9/84)*(24/84)*(84/108)=0.0001

? 这表明该消息是垃圾邮件的概率为80%,是非垃圾邮件的概率为20%。
3、案例二

让我以一个例子加以说明,假设有这样一个数据集(本例来自朴素贝叶斯分类器的应用),

症状(A1) 职业(A2) 疾病(B)

打喷嚏  护士   感冒

打喷嚏  农夫   过敏

头痛   建筑工人 脑震荡

头痛   建筑工人 感冒

打喷嚏  教师   感冒

头痛   教师   脑震荡

那么一个打喷嚏的建筑工人是感冒还是没感冒呢?根据贝叶斯定理,

P(感冒|打喷嚏x建筑工人) = P(打喷嚏x建筑工人|感冒) x P(感冒) / P(打喷嚏x建筑工人)

假定”打喷嚏”和”建筑工人”这两个特征是独立的,因此,上面的等式就变成了

P(感冒|打喷嚏x建筑工人) = P(打喷嚏|感冒) x P(建筑工人|感冒) x P(感冒) / P(打喷嚏) x P(建筑工人) = 0.66 x 0.33 x 0.5 / 0.5 x 0.33 = 0.66

同理,

P(非感冒|打喷嚏x建筑工人) = P(打喷嚏|非感冒) x P(建筑工人|非感冒) x P(非感冒) / P(打喷嚏) x P(建筑工人) = 0.33 x 0.33 x 0.5 / 0.5 x 0.33 = 0.33

因为P(感冒|打喷嚏x建筑工人) > P(非感冒|打喷嚏x建筑工人) ,所以我们更愿意相信一个打喷嚏的建筑工人是感冒的。

从上面的例子可以看出,贝叶斯分类的步骤是这样的:

2、上面的已知条件都是离散值,如果是连续值呢,对于连续值通常有两种办法,一是将连续值截取为离散值,然后求概率,二是假定离散值服从高斯分布,即

因为我们只需求概率的相对值,所以这里只需计算属性的概率密度值即可。得出结论

假设特征服从多项式分布,连续的特征适合用高斯分布的,比如鸢尾花数据集,如果是离散的特征,适合用多项式分布。

4、朴素贝叶斯分类的思想和计算过程

原文地址:https://www.cnblogs.com/LHWorldBlog/p/8733256.html

时间: 2024-10-09 23:16:25

【机器学习】--机器学习之朴素贝叶斯从初始到应用的相关文章

机器学习之路--朴素贝叶斯

一,引言 前两章的KNN分类算法和决策树分类算法最终都是预测出实例的确定的分类结果,但是,有时候分类器会产生错误结果:本章要学的朴素贝叶斯分类算法则是给出一个最优的猜测结果,同时给出猜测的概率估计值. 1 准备知识:条件概率公式 相信学过概率论的同学对于概率论绝对不会陌生,如果一时觉得生疏,可以查阅相关资料,在这里主要是想贴出条件概率的计算公式: P(A|B)=P(A,B)/P(B)=P(B|A)*P(A)/P(B) 2 如何使用条件概率进行分类 假设这里要被分类的类别有两类,类c1和类c2,那

机器学习笔记之朴素贝叶斯(Naive Bayes)原理

为什么叫朴素贝叶斯? 朴素是指特征条件独立:贝叶斯是指基于贝叶斯定理. $x=\frac{{-b}\pm\sqrt{b^2-4ac}}{2a}$ $p(y=c_k|x)=\dfrac{\prod_{i=1}^{M}p(x^i|y=c_k)p(y=c_k)}{\sum_kp(y=c_k)\prod_{i=1}^{M}P(x^i|y=c_k)}$....(2) $$ % MathType!MTEF!2!1!+-% feaagKart1ev2aaatCvAUfeBSjuyZL2yd9gzLbvyNv2

机器学习笔记:朴素贝叶斯方法(Naive Bayes)原理和实现

本文主要描述了朴素贝叶斯分类方法,包括模型导出和学习描述.实例部分总结了<machine learning in action>一书中展示的一个该方法用于句子感情色彩分类的程序. 方法概述 学习(参数估计) 实现:朴素贝叶斯下的文本分类 模型概述 朴素贝叶斯方法,是指 朴素:特征条件独立 贝叶斯:基于贝叶斯定理 根据贝叶斯定理,对一个分类问题,给定样本特征x,样本属于类别y的概率是 p(y|x)=p(x|y)p(y)p(x)......(1) 在这里,x是一个特征向量,将设x维度为M.因为朴素

机器学习算法:朴素贝叶斯

朴素贝叶斯(Naive Bayesian)算法的核心思想是:分别计算给定样本属于每个分类的概率,然后挑选概率最高的作为猜测结果. 假定样本有2个特征x和y,则其属于分类1的概率记作p(C1|x,y),它的值无法直接分析训练样本得出,需要利用公式间接求得. 其中p(Ci)表示训练样本中分类为Ci的概率,它等于Ci样本数除以样本总数. p(x,y)表示满足2个特征的样本概率,它等于第1特征等于x且第2特征等于y的样本数除以样本总数.可以发现p(x,y)与当前在计算哪个分类概率是无关的,因此实际计算中

机器学习之实战朴素贝叶斯算法

贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类,而朴素贝叶斯分类可谓是里面最简单.入门的一种. 首先关于贝叶斯定理,感觉简单而伟大,前些天一直在看吴军的数学之美(没看过的极力推荐)系列文章,看到自然语言处理从规则模型到统计模型转变的时候,语言的识别准确率上升好几个等级,以至于今天的语言识别到达很强大的地步,同时对于搜索引擎,网页搜索的准确率,也上升好多.这其中的最最重要的就是使用了贝叶斯准则,运用一种统计学的概念,将识别搜索的结果可能性最大化.由此我联想到当今的

吴裕雄--天生自然python机器学习:使用朴素贝叶斯过滤垃圾邮件

使用朴素贝叶斯解决一些现实生活中 的问题时,需要先从文本内容得到字符串列表,然后生成词向量. 准备数据:切分文本 测试算法:使用朴素贝叶斯进行交叉验证 文件解析及完整的垃圾邮件测试函数 def createVocabList(dataSet): vocabSet = set([]) #create empty set for document in dataSet: vocabSet = vocabSet | set(document) #union of the two sets return

【机器学习模型】朴素贝叶斯

一.啥是贝叶斯公式 1.公式定义: 贝叶斯公式是由英国数学家贝叶斯发展,用来描述两个条件概率之间的关系,比如P(A|B)和P(B|A). 按照乘法法则,可以立刻导出:P(A∩B) = P(A)*P(B|A)=P(B)*P(A|B).如上公式也可变形为:P(B|A) = P(A|B)*P(B) / P(A),即为贝叶斯公式 假设B是由相互独立的事件组成的概率空间{B1,b2,...bn}.则P(A)可以用全概率公式展开:P(A)=P (A|B1)P(B1)+P(A|B2)P(B2)+..P(A|B

4.机器学习实战之朴素贝叶斯

返回目录 上一篇:决策树 1. 简单理论介绍 1.1  贝叶斯定理 了解贝叶斯定理之前,需要先了解下条件概率.P(A|B)表示在事件B已经发生的条件下事件A发生的概率: P(A|B)=P(AB)  P(B)daf afdfd 假如我们已经知道了P(A|B),但是现在我们想要求P(B|A),也就是在事件A发生的条件下事件B发生的概率,这时贝叶斯定理就派上用场了. P(B|A)=P(A|B)P(B)  P(A)daf afdfd 1.2  朴素贝叶斯分类原理 朴素贝叶斯分类是以贝叶斯定理为基础的,之

机器学习实战笔记--朴素贝叶斯

1 #encoding:utf-8 2 from numpy import * 3 import feedparser 4 5 #加载数据集 6 def loadDataSet(): 7 postingList = [['my', 'dog', 'has', 'flea', 'problems', 'help', 'please'], 8 ['maybe', 'not', 'take', 'him', 'to', 'dog', 'park', 'stupid'], 9 ['my', 'dalma