数据分析入门系列教程-贝叶斯原理

简介: 数据分析入门系列教程-贝叶斯原理

如果你对当年学习的概率统计还有些印象的话,就一定会记得有个贝叶斯原理的东西,它是由英国数学家贝叶斯提出的。

贝叶斯原理和我们的生活是紧密相关的,比如说你身边的一个人经常去夜店,那么你会推测这个人多半是个浪子。虽然这不是绝对的,但是你依然可以根据和事物相关的一些事件来做出判断,如果事件发生的频次比较多,那么就证明该判断成立的可能性更大。

贝叶斯原理

在学习朴素贝叶斯原理之前,我们先来了解下什么是贝叶斯原理。

其实就像是上面我们提到的生活中的例子一样,贝叶斯原理是建立在主观判断的基础上的。在我们不了解所有的客观事实的情况下,可以先预估计一个值,然后根据实际情况不断的修正这个值。

贝叶斯决策原理

假如我们现在有一个数据集,它的分类如下:

我们现在以 p1(x,y) 来表示点(x,y)属于圆点的概率,以 p2(x,y) 来表示点(x,y)属于x点的概率,现在有一个新点(x,y),那么它的分类就取决于下面的方式:

  • 如果 p1(x,y)>p2(x,y),则新点(x,y)为类别1
  • 如果p1(x,y)<p2(x,y),则新点(x,y)为类别2

这就是贝叶斯决策原理的核心思想,下面我们再来看看该如何计算 p1 和 p2。

条件概率

我们先来学习下什么是条件概率,它是指:

事件 A 在另外一个事件 B 已经发生的条件下发生的概率,表示为 P(A|B)。

我们来研究下这张图,事件 A 发生为黄色区域,事件 B 发生为蓝色区域,它们的交集为同时发生的情况,那么 P(A|B) 可以怎么表示呢,P(A|B) 就应该等于它们同时发生的概率。而它们同时发生的概率又等于它们同时发生除以事件 B 发生,即:

变换公式,我们可以得到

以及

结合上面的两个公式,又能得到如下:

继续变换得:

这个就是条件概率的计算公式

对于上面的公式,我们一般把 P(A) 称作先验概率(Prior probability),即在事件 B 发生之前,我们判断事件 A 的概率。P(A|B) 称为后验概率(Posterior probability),即在事件 B 发生时,对事件 A 发生概率的重新评估。P(B|A)/P(B) 称为可能性函数,是一个因子,调节该因子,可以使我们估计的概率更加接近事实情况。

至此我们可以抽象下贝叶斯原理

后验概率 = 先验概率 X 因子

朴素贝叶斯

朴素贝叶斯,关键就在“朴素”二字,所谓朴素,指的是一种假设,假设每个输入变量都是独立的,即条件独立假设。

例如如下的概率:


可以根据条件独立假设分解为:

下面我们就通过一个垃圾邮件的例子来深入理解下

垃圾邮件判别

假设现在我们总共有28封邮件,其中正常邮件20封,垃圾邮件8封,并且假设每封邮件都有10个单词。

对于所有邮件,我们关心如下几个词语,“购买”,“通知”,“物品”,各类邮件包含词语数量如下:

类别 购买 通知 物品
正常 2 4 1
垃圾 10 4 20

然后又新接收到一封邮件 Q,内容为“通知,购买物品”,需要判断邮件 Q 的类别。

数据准备完毕,我们来看下该如何通过朴素贝叶斯来判断邮件类别

计算该类别邮件概率

分别计算正常邮件和垃圾邮件所占的比例

P(正常) = 20/28 = 5/7

P(垃圾) = 8/28 = 2/7

计算各词语在不同类别的概率

首先计算“购买”单词在正常和垃圾邮件中出现的概率

P(购买|正常) = 1/(20*10) = 1/100

P(购买|垃圾) = 10/(8*10) = 1/8

再计算“通知”单词分别出现的概率

P(通知|正常) = 4/(20*10) = 1/50

P(通知|垃圾) = 4/(20*10) = 1/50

最后计算“物品”单词分别出现的概率

P(物品|正常) = 1/(20*10) = 1/200

P(物品|垃圾) = 20/(20*10) = 1/10

通过邮件内容判断类别

下面我们需要计算的概率就是在给定邮件内容的情况下(Q),如何判定该邮件是正常的还是垃圾的。

P(正常|邮件内容)

P(垃圾|邮件内容)

如果我们可以计算出上面的两个概率,只需要比较它们,如果 P(正常|邮件内容) > = P(垃圾|邮件内容),则邮件 Q 属于正常邮件,反之则为垃圾邮件。

我们再把邮件 Q 的内容进行分词拆分:

通知|购买|物品

现在我们可以应用贝叶斯定理

P(正常|邮件内容) = P(邮件内容|正常)P(正常)/P(邮件内容)

= P(通知,购买,物品|正常)P(正常)/P(邮件内容)

P(垃圾|邮件内容)

= P(邮件内容|垃圾)P(垃圾)/P(邮件内容)

=P(通知,购买,物品|垃圾)P(垃圾)/P(邮件内容)

再根据条件独立假设,即运用朴素贝叶斯模型,继续转换

P(正常|邮件内容)

= P(邮件内容|正常)P(正常)/P(邮件内容)

= P(通知,购买,物品|正常)P(正常)/P(邮件内容)

= P(通知|正常)P(购买|正常)P(物品|正常)P(正常)/P(邮件内容)

P(垃圾|邮件内容)

= P(邮件内容|垃圾)P(垃圾)/P(邮件内容)

=P(通知,购买,物品|垃圾)P(垃圾)/P(邮件内容)

= P(通知|垃圾)P(购买|垃圾)P(物品|垃圾)P(垃圾)/P(邮件内容)

现在我们带入刚刚计算的概率,可以得到:

P(正常|邮件内容)

= [(1/50)(1/100)(1/200)*5/7]/P(邮件内容)

P(垃圾|邮件内容)

= [(1/50)(1/8)(1/10)*2/7]/P(邮件内容)

最后还剩下 P(邮件内容) 没有具体的数值,而这个也是最为难计算的,因为毕竟我们太难估计别人会给我们发送什么内容的邮件了。但是呢,这个值却是不必计算的,因为在需要比较的两个概率里,都包含 P(邮件内容),所以它的值具体是多少并不影响最终的比较结果。

对于上面的两个概率,我们通过肉眼也基本可以判定,P(垃圾|邮件内容)  > P(正常|邮件内容)  ,所以可以判定邮件 Q 是垃圾邮件。

朴素贝叶斯优缺点

朴素贝叶斯分类器的应用是非常广泛的,而最最常用到的领域就是文本分类。它常常被用于垃圾文本过滤,情感分析,推荐系统等领域。

优点

是通过计算概率来分类,可以处理多分类问题

对于小规模的数据表现很好

缺点

由于其“朴素”的特性,准确率上会有损失

进行文本分类时,准确率非常依赖训练预料的好坏,所以文本的分割是重点

总结

本节讲解了贝叶斯原理以及基于贝叶斯条件独立假设下的朴素贝叶斯模型,该模型在文本分类领域是非常常用的。同时我们还了解了后验概率和先验概率,这些概念也都是机器学习领域非常重要的概念,你一定要好好理解下。

练习题

微信暧昧信息和出轨的概率

  1. 在没有任何信息的情况下,出轨的概率
  2. 微信里有暧昧信息,出轨的概率
  3. 如果已经出轨了,微信有暧昧信息的概率

以上三个概率,分别对应先验概率、后验概率和条件概率的哪一种呢?


相关文章
|
21天前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
本文将引导读者了解如何使用Python进行数据分析,从安装必要的库到执行基础的数据操作和可视化。通过本文的学习,你将能够开始自己的数据分析之旅,并掌握如何利用Python来揭示数据背后的故事。
|
1月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
【10月更文挑战第42天】本文是一篇技术性文章,旨在为初学者提供一份关于如何使用Python进行数据分析的入门指南。我们将从安装必要的工具开始,然后逐步介绍如何导入数据、处理数据、进行数据可视化以及建立预测模型。本文的目标是帮助读者理解数据分析的基本步骤和方法,并通过实际的代码示例来加深理解。
49 3
|
23天前
|
数据可视化 数据挖掘
R中单细胞RNA-seq数据分析教程 (3)
R中单细胞RNA-seq数据分析教程 (3)
29 3
R中单细胞RNA-seq数据分析教程 (3)
|
1月前
|
SQL 数据挖掘 Python
R中单细胞RNA-seq数据分析教程 (1)
R中单细胞RNA-seq数据分析教程 (1)
37 5
R中单细胞RNA-seq数据分析教程 (1)
|
29天前
|
机器学习/深度学习 数据挖掘
R中单细胞RNA-seq数据分析教程 (2)
R中单细胞RNA-seq数据分析教程 (2)
46 0
R中单细胞RNA-seq数据分析教程 (2)
|
1月前
|
数据采集 数据可视化 数据挖掘
深入浅出:使用Python进行数据分析的基础教程
【10月更文挑战第41天】本文旨在为初学者提供一个关于如何使用Python语言进行数据分析的入门指南。我们将通过实际案例,了解数据处理的基本步骤,包括数据的导入、清洗、处理、分析和可视化。文章将用浅显易懂的语言,带领读者一步步掌握数据分析师的基本功,并在文末附上完整的代码示例供参考和实践。
|
2月前
|
数据采集 机器学习/深度学习 数据可视化
深入浅出:用Python进行数据分析的入门指南
【10月更文挑战第21天】 在信息爆炸的时代,掌握数据分析技能就像拥有一把钥匙,能够解锁隐藏在庞大数据集背后的秘密。本文将引导你通过Python语言,学习如何从零开始进行数据分析。我们将一起探索数据的收集、处理、分析和可视化等步骤,并最终学会如何利用数据讲故事。无论你是编程新手还是希望提升数据分析能力的专业人士,这篇文章都将为你提供一条清晰的学习路径。
|
2月前
|
数据挖掘 索引 Python
Python数据分析篇--NumPy--入门
Python数据分析篇--NumPy--入门
40 0
|
25天前
|
机器学习/深度学习 算法 数据挖掘
数据分析的 10 个最佳 Python 库
数据分析的 10 个最佳 Python 库
73 4
数据分析的 10 个最佳 Python 库
|
4月前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
在数字化时代,数据分析至关重要,而Python凭借其强大的数据处理能力和丰富的库支持,已成为该领域的首选工具。Python作为基石,提供简洁语法和全面功能,适用于从数据预处理到高级分析的各种任务。Pandas库则像是神兵利器,其DataFrame结构让表格型数据的处理变得简单高效,支持数据的增删改查及复杂变换。配合Matplotlib这一数据可视化的魔法棒,能以直观图表展现数据分析结果。掌握这三大神器,你也能成为数据分析领域的高手!
91 2
下一篇
DataWorks