01 贝叶斯算法 - 朴素贝叶斯

简介:

引子:

1、孩子的性别问题

已知一对夫妻生了2个孩子,其中一个是女孩,那么另一个也是女孩的概率的多少?
普遍大家会觉得生男生女都一样,所以另一个也是女孩的概率是1/2。而另一部分稍微聪明一点的人认为:根据排列组合,两个孩子生男生女一共有4种可能性,所以都是女生的概率是1/4。
然而恭喜你们,完美得避开了正确答案。
我们来看看这究竟是怎么一回事,不考虑数学公式,我们来看看两个孩子中其中一个是女孩的可能性有哪些。

首先,小夫妻生了老大和老二,但题干中并没有说明哪个是女孩。
给出所有生孩子可能出现的情况:
(老大,老二) = { 男男, 女女, 男女, 女男 };
在其中,出现女孩的情况有三个:
{女女, 男女, 女男 };
在这三种情况里,满足__其中一个是女孩,那么另一个也是女孩的__情况只有一种。
所以__正确答案是1/3__;

用条件公式概率公式来描述:

思路1:
$color{red}{P(A|B) = P(2个都是女孩 | 其中一个是女孩) = 1/3}$
即:在其中一个是女孩的情况下,夫妻生的双胞胎都是女孩的概率是1/3。

思路2:
P(AB) :表示两个都是女孩的概率 = 1/4;
P(B):其中一个是女孩 = 3/4;
$\color{red}{P(A|B) =P(AB)/P(B) = 1/3}$

请将这两个红色的公式深深得植入大脑后开始本章的学习。


2、古典概率中著名的三门问题

参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门会否增加参赛者赢得汽车的机率?

推荐一个非常鬼畜的动画来帮助大家理解这个问题:
https://mp.weixin.qq.com/s/7XqjBR4xUUOtuWyzL5v2ig

数学公式分析:

第一次选中车,第二次中选车的__联合概率__,用公式表达:
$color{red}{P(1车,2车) 这是一个联合概率。}$

P(1车,2车) = 第一次选中车的概率 × (第一次选中车的条件下,第二次还选中车的概率);用公式表达:
$color{red}{P(1车,2车) = P(1车) × P(2车|1车)}$
__分析:__第一次抽到车的概率1/3,第二次如果换抽到车的概率是0。

同理:第一次选中羊,第二次选中车的__联合概率公式__:
$color{red}{P(1羊,2车) = P(1羊) × P(2车|1羊)}$
__分析:__第一次抽到羊的概率2/3,第二次抽如果换,必然抽到车。

获奖概率:P(2车) - 如果第二次换门,抽奖获得车的概率。
$color{red}{P(2车) = P(1车,2车) + P(1羊,2车)}$
$color{red}{= P(1车) × P(2车|1车) + P(1羊) × P(2车|1羊)}$
$color{red}{= 1/3×0 + 2/3×1 = 2/3}$

同理,如果第二次换门,抽奖获得羊的概率:P(2羊)
$color{red}{P(2羊) = P(1羊,2羊) + P(1车,2羊)}$
$color{red}{= P(1羊) × P(2羊|1羊) + P(1车) × P(2羊|1车)}$
$color{red}{= 2/3×0 + 1/3×1 = 1/3}$

结论:从概率角度来看,换个门是有价值的。

衍生一个问题:一共1000个门里,有999只草泥马,只有一辆劳斯莱斯。
你选了一扇门后,我去掉了另外998个装有草泥马的门。
现在剩下一扇你刚才选的门,以及另外一扇没有打开的门。

现在你换不换?

傻子才不换...


例子想要说明的重点:

在给定条件的情况下,很多生活中看似显而易见的概率问题会发生重大的变化。

在模型求解的过程中,会遇到2种问题:__判别式模型__和__生成式模型__。
判别式模型: P(Y|X) - 条件概率,即在发生了X的条件下,生成了Y的概率。
生成式模型: P(X,Y) - 联合概率,即考虑X和Y同时发生的概率。
很多模型都是基于判别式和生成式进行构建的。很多__分类__的问题用的是__判别式__模型。__聚类__问题多数采用__生成式__模型。


一、贝叶斯定理相关公式

先验概率P(A):在不考虑任何情况下,A事件发生的概率。
条件概率P(B|A):A事件发生的情况下,B事件发生的概率。
后验概率P(A|B):在B事件发生之后,对A事件发生的概率的重新评估。

有时候 P(B|A) 不太好求,但右边式子中的情况都比较好求,这时候可以通过贝叶斯公式转化问题:
P(B|A) = P(A,B) / P(A) = P(B)P(A|B) / P(A)

贝叶斯公式


全概率:如果A和A'(A的补集)构成样本空间的一个划分,那么事件B的概率为:A和A'的概率分别乘以B对这两个事件的概率之和。

例子中的:$color{red}{P(2车) = P(1车,2车) + P(1羊,2车)}$ 就是求全概率的一种情况。
即: $color{red}{全集=A+A的补集}$;

基于条件概率的贝叶斯定律数学公式:


例子:后验概率问题 - P(B|A) = P(A,B) / P(A) = P(B)P(A|B) / P(A);
有两个碗,第一个碗中装有30个水果糖和10个巧克力糖,第二个碗中装有20个水果糖和20个巧克力糖,现在随机选择一个碗,从中取出一颗糖,发现是水果糖,请求出这颗水果糖来自一号碗的概率有多大?

思路:
1、已知每个碗中取出水果糖的概率,已知每次选碗也是随机。
2、那么先求出随机取碗条件下,取出是水果糖的__全概率__。
3、再根据P(B|A) = P(A,B) / P(A) = P(B)P(A|B) / P(A) 公式反推后验概率问题:水果糖来自一号碗的概率有多大。


二、朴素贝叶斯算法

朴素贝叶斯(Naive Bayes, NB)是基于“__特征之间是独立的__”这一朴素假设,应用贝叶斯定理的监督学习算法。__朴素贝叶斯本质就是一个分类算法。__

对应给定的样本X的特征向量x1,x2,...,xn;该样本X的类别y的概率可以由贝叶斯公式得到:


朴素贝叶斯算法推导:

特征属性之间是独立的,所以得到:

在给定样本的情况下,P(x1,x2,...,xm)是常数,所以得到:

P(x1,x2,xn)是一个定值,所以式子左右成正比

从而:

用TF-IDF分词和词袋法来分析上述公式的应用:

分析 - 朴素贝叶斯算法


朴素贝叶斯算法流程/定义如下:

1、设x={a1,a2,...,an}为待分类项,其中a为x的一个特征属性。
2、类别集合为C={y1,y2,...,yn};
3、分别计算P(y1|x),P(y2|x),....,P(yn|x)的值(贝叶斯公式)
4、如果P(yk|x)=max{P(y1|x),P(y2|x),....,P(yn|x)},那么认为x为yk类型。


三、高斯朴素贝叶斯

Gaussian Naive Bayes是指当特征属性为连续值时,而且分布服从高斯分布,那么在计算P(x|y)的时候可以直接使用高斯分布的概率公式:

因此只需要计算出各个类别中此特征项划分的各个均值和标准。

P(xk|yk) 怎么求?

1、先找到yk这个分类结果的样本,找到这些样本对应的xk属性,求这些xk的均值和标准差,最后代入g(x,η,σ);

2、分别计算P(x1|yk)× ....× P(xn|yk) × P(yk)的值,这个公式和P(yk|x1,x2,...,xn)成正比;

3、当分类个数为m个时,分别计算k=1~m的 P(x1|yk)× ....× P(xn|yk) × P(yk)的值,取其中最大概率时的K值,即最终的分类结果。


四、伯努利朴素贝叶斯

Bernoulli Naive Bayes是指当特征属性为离散值时,而且分布服从伯努利分布,那么在计算P(x|y)的时候可以直接使用伯努利分布的概率公式:

伯努利分布是一种离散分布,只有两种可能的结果。1表示成功,出现的概率为p;0表示失败,出现的概率为q=1-p;其中均值为E(x)=p,方差为Var(X)=p(1-p);


五、多项式朴素贝叶斯

Multinomial Naive Bayes是指当特征属性服从多项分布,从而,对于每个类别y,参数为θy=(θy1,θy2,...,θyn),其中n为特征属性数目,那么P(xi |y)的概率为θyi; 该算法__一般用于文本分类__。


分析和总结:

如果数据中既有连续的特征,又有离散的特征,我们该如何去做分类?
本质上来说,我们计算的是每一个特征对应的概率。如图:

当遇到__连续值特征__时,我们用__高斯__去算P(xi|y)。
遇到__离散值特__征时,我们__用多项式__或__伯努利__去算P(xi|y)。

但问题是我们的API中没有自动得集成这些功能,在这种情况下该怎么去做分类呢?
首先,我们要人为得去分析特征到底属于什么类型的数据。如果特征是一个连续值比较多的数据集,我们统一使用高斯就行了。反之统一用用多项式或伯努利。或者高级一点,对数据进行分箱操做。

02 贝叶斯算法 - 案例一 - 鸢尾花数据分类
03 贝叶斯算法 - 案例二 - 新闻数据分类

相关文章
|
3月前
|
机器学习/深度学习 数据采集 算法
Python实现Naive Bayes贝叶斯分类模型(GaussianNB、MultinomialNB算法)项目实战
Python实现Naive Bayes贝叶斯分类模型(GaussianNB、MultinomialNB算法)项目实战
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
算法金 | AI 基石,无处不在的朴素贝叶斯算法
```markdown 探索贝叶斯定理:从默默无闻到AI基石。18世纪数学家贝叶斯的理论,初期未受重视,后成为20世纪机器学习、医学诊断和金融分析等领域关键。贝叶斯定理是智能背后的逻辑,朴素贝叶斯分类器在文本分类等应用中表现出色。贝叶斯网络则用于表示变量间条件依赖,常见于医学诊断和故障检测。贝叶斯推理通过更新信念以适应新证据,广泛应用于统计和AI。尽管有计算复杂性等局限,贝叶斯算法在小数据集和高不确定性场景中仍极具价值。了解并掌握这一算法,助你笑傲智能江湖! ```
44 2
算法金 | AI 基石,无处不在的朴素贝叶斯算法
|
5月前
|
机器学习/深度学习 数据采集 算法
基于贝叶斯算法的手机垃圾短信过滤
基于贝叶斯算法的手机垃圾短信过滤
|
2月前
|
数据采集 前端开发 算法
基于朴素贝叶斯算法的新闻类型预测,django框架开发,前端bootstrap,有爬虫有数据库
本文介绍了一个基于Django框架和朴素贝叶斯算法开发的新闻类型预测系统,该系统具备用户登录注册、后台管理、数据展示、新闻分类分布分析、新闻数量排名和新闻标题预测等功能,旨在提高新闻处理效率和个性化推荐服务。
|
2月前
|
机器学习/深度学习 算法 Python
python与朴素贝叶斯算法(附示例和代码)
朴素贝叶斯算法以其高效性和优良的分类性能,成为文本处理领域一项受欢迎的方法。提供的代码示例证明了其在Python语言中的易用性和实用性。尽管算法假设了特征之间的独立性,但在实际应用中,它仍然能够提供强大的分类能力。通过调整参数和优化模型,你可以进一步提升朴素贝叶斯分类器的性能。
59 0
|
2月前
|
监控 数据可视化 算法
基于朴素贝叶斯算法的微博舆情监控系统,flask后端,可视化丰富
本文介绍了一个基于朴素贝叶斯算法和Python技术栈的微博舆情监控系统,该系统使用Flask作为后端框架,通过数据爬取、清洗、情感分析和可视化等手段,为用户提供丰富的舆情分析和监测功能。
|
3月前
|
机器学习/深度学习 数据采集 算法
Python实现贝叶斯岭回归模型(BayesianRidge算法)并使用K折交叉验证进行模型评估项目实战
Python实现贝叶斯岭回归模型(BayesianRidge算法)并使用K折交叉验证进行模型评估项目实战
|
3月前
|
机器学习/深度学习 人工智能 分布式计算
算法金 | 最难的来了:超参数网格搜索、贝叶斯优化、遗传算法、模型特异化、Hyperopt、Optuna、多目标优化、异步并行优化
机器学习中的超参数调优是提升模型性能的关键步骤,包括网格搜索、随机搜索、贝叶斯优化和遗传算法等方法。网格搜索通过穷举所有可能的超参数组合找到最优,但计算成本高;随机搜索则在预设范围内随机采样,降低计算成本;贝叶斯优化使用代理模型智能选择超参数,效率高且适应性强;遗传算法模拟生物进化,全局搜索能力强。此外,还有多目标优化、异步并行优化等高级技术,以及Hyperopt、Optuna等优化库来提升调优效率。实践中,应结合模型类型、数据规模和计算资源选择合适的调优策略。
132 0
算法金 | 最难的来了:超参数网格搜索、贝叶斯优化、遗传算法、模型特异化、Hyperopt、Optuna、多目标优化、异步并行优化
|
3月前
|
自然语言处理 算法 安全
Python实现贝叶斯算法疫情微博评论情感分析
Python实现贝叶斯算法疫情微博评论情感分析
Python实现贝叶斯算法疫情微博评论情感分析
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
【机器学习】贝叶斯算法在机器学习中的应用与实例分析
【机器学习】贝叶斯算法在机器学习中的应用与实例分析
357 1