机器学习中的朴素贝叶斯算法

⚡ 智能摘要

朴素贝叶斯是一种基于贝叶斯定理的监督式概率分类算法,它假设每个特征都独立地贡献于分类结果。其理论基础是一个成熟的算法。ping 例如,下面将介绍三种模型变体、优点、局限性和实际应用。

  • 🔘 定义: 一种分类器,通过比较每个候选类别的后验概率来标记记录。
  • ☑️ 朴素的假设: 每个特征都被视为条件独立的,这种情况很少成立,但预测效果仍然很好。
  • 贝叶斯公式: P(A|B) 等于 P(B|A) 乘以 P(A),再除以 P(B)。
  • 🧪 示例: 当天、折扣和免费送货相结合,购买可能性高达 97.33%。
  • 🛠️ 三种变体: 词频统计采用多项式分布,词出现频率统计采用伯努利分布,连续值统计采用高斯分布。
  • ⚠️ 局限性: 忽略相关特征,因此决策树或支持向量机更适合处理相关数据。

机器学习中的朴素贝叶斯算法

朴素贝叶斯分类器算法

分类器是一种机器学习算法,它将数据分类到一个或多个“类别”中。电子邮件分类器就是一个常见的例子:它会扫描每封收到的邮件,并为其添加“垃圾邮件”或“非垃圾邮件”的类别标签。

机器学习中的朴素贝叶斯分类器是一种 监督学习 用于分类任务的算法。

下图概述了该流程。

朴素贝叶斯分类器为输入记录分配类别标签

朴素贝叶斯用于解决分类问题。它根据对象的概率进行预测。朴素贝叶斯基于贝叶斯定理,主要用于文本分类。朴素贝叶斯是一种易于实现且训练速度快的概率分类算法。

由于朴素贝叶斯分类器基于贝叶斯定理,因此它也被称为概率分类器。它根据项目的概率进行预测。

为什么叫朴素贝叶斯?

朴素贝叶斯算法的名称由两部分组成:朴素(Naive)和贝叶斯(Bayes)。为什么叫朴素(Naive)呢?因为该算法忽略特征出现的顺序,所以“You are”和“Are you”看起来完全一样。它还假设任何特征都不会影响其他特征。例如,为了识别水果苹果,你需要使用颜色为红色、形状为球形、味道为甜的特征,而该算法会将每个线索都视为独立的证据。

  • 朴素贝叶斯分类器假设各个特征彼此独立。由于这在实际数据中很少成立,因此该分类器被称为朴素分类器。
  • 该分类算法基于贝叶斯定理,因此被称为朴素贝叶斯分类器。

朴素贝叶斯定理

贝叶斯定理用于在已知先验知识的条件下计算假设的概率。该定理以托马斯·贝叶斯的名字命名。朴素贝叶斯分类器正是基于贝叶斯定理给出的条件概率原理工作。

为了理解贝叶斯定理,我们来看一个简单的朴素贝叶斯分类器示例:抛掷两枚硬币。我们可以通过抛掷两枚硬币得到以下样本空间:{HH, HT, TH, TT}。因此,这些事件的概率分别为:

  • 获得两个头 = 1/4
  • 至少有一次反面 ​​= 3/4
  • 第一枚硬币是反面,第二枚硬币是正面 = 1/2
  • 假设第一枚硬币是正面,则掷出两次正面 = 1/2

贝叶斯定理根据已发生事件的概率来计算某一事件发生的概率。贝叶斯定理的公式如下:

P(A|B) = (P(B|A) * P(A)) / P(B)

P(A|B) 表示在事件 B 已经发生的情况下,事件 A 发生的概率。概率 P(B) 不能为零。

  • 您需要找到当事件 B(证据)为真时事件 A 的概率。
  • P(A) 是事件 A 的先验概率,即在观察到任何证据之前事件发生的概率。这里,事件 B 是一个未知实例的值。
  • P(A|B) 是事件 A 的后验概率,即在考虑证据 B 之后 A 发生的概率。

朴素贝叶斯分类器的工作示例

验证公式有效性的最快方法是手动运行它。

让我们以商店为例。ping 为了理解贝叶斯朴素分类器的工作原理,本示例使用了一个包含 30 行的小型样本数据集。

数据集

样品店ping 包含 30 行的数据集,列分别为 Day、Discount、Free Delivery 和 Buy。

问题是使用朴素贝叶斯定理预测一个人是否会在特定的日期、折扣和免费送货组合下购买产品。

频率表统计每个属性值的购买和不购买结果

步骤1) 我们将使用数据集中提到的输入类型(例如天数、折扣和免费送货)为每个属性创建频率表。

日期、折扣和免费送货属性的频率表

设事件“购买”记为“A”,自变量“折扣”、“免运费”和“日期”记为“B”。我们将使用这些事件和变量来应用贝叶斯定理。

步骤2) 现在让我们逐一计算似然表。

“买入”和“不买入”的“当日”属性似然表

例如1:

根据该似然表,我们将计算如下的条件概率。

P(A) = P(No Buy) = 6/30 = 0.2
P(B) = P(Weekday) = 11/30 = 0.37
P(B/A) = P(Weekday / No Buy) = 2/6 = 0.33

并且,利用贝叶斯定理找到 P(A/B),

P(A/B)
= P(No Buy / Weekday)
= P(Weekday / No Buy) * P(No Buy) / P(Weekday)
= (2/6 * 6/30) / (11/30)
= 0.1818

类似地,如果 A 为买入,那么

= P(Buy / Weekday)
= P(Weekday / Buy) * P(Buy) / P(Weekday)
= (9/24 * 24/30) / (11/30)
= 0.8181

注意: 由于 P(购买 | 工作日)大于 P(不购买 | 工作日),我们可以得出结论,客户最有可能在工作日购买该产品。

步骤3) 类似地,我们可以根据所有三个变量计算事件发生的可能性。现在我们将使用上述频率表计算所有三个变量的似然表。

联合计算中使用的日期、折扣和免费送货的可能性表

例如2:

现在,使用这三个可能性表,我们将根据“天”、“折扣”和“免费送货”的特定组合来计算客户是否有可能进行购买。

这里,让我们结合这些因素:

  • 日 = 假日
  • 折扣 = 是
  • 免费送货 = 是

何时,A = 购买

计算以下日期、折扣和免费送货组合的购买条件概率。

其中 B 为:

  • 日 = 假日
  • 折扣 = 是
  • 免费送货 = 是

并且 A = 购买

因此,

= P(A/B)
= P(Buy / Discount=Yes, Day=Holiday, Free Delivery=Yes)
= ( P(Discount=(Yes/Buy)) * P(Free Delivery=(Yes/Buy)) * P(Day=(Holiday/Buy)) * P(Buy) )
/ ( P(Discount=Yes) * P(Free Delivery=Yes) * P(Day=Holiday) )
= (19/24 * 21/24 * 8/24 * 24/30) / (20/30 * 23/30 * 11/30)
= 0.986

当 A = 不购买时

类似地,计算以下日期、折扣和免费送货组合下的购买条件概率。

其中 B 为:

  • 日 = 假日
  • 折扣 = 是
  • 免费送货 = 是

并且 A = 不买

因此,

= P(A/B)
= P(No Buy / Discount=Yes, Day=Holiday, Free Delivery=Yes)
= ( P(Discount=(Yes/No Buy)) * P(Free Delivery=(Yes/No Buy)) * P(Day=(Holiday/No Buy)) * P(No Buy) )
/ ( P(Discount=Yes) * P(Free Delivery=Yes) * P(Day=Holiday) )
= (1/6 * 2/6 * 3/6 * 6/30) / (20/30 * 23/30 * 11/30)
= 0.027

步骤4) 因此,

购买概率 = 0.986

不购买的概率 = 0.027

最后,我们有了当天购买的条件概率。现在让我们概括这些概率以获得事件发生的可能性。

  • 概率总和 = 0.986 + 0.027 = 1.013
  • 购买可能性 = 0.986 / 1.013 = 97.33 %
  • 不购买的可能性 = 0.027 / 1.013 = 2.67 %

这两个分数加起来是 1.013 而不是 1,因为独立性假设使得每个估计值都是近似的,所以除以总数会将它们重新缩放为百分比。

请注意,97.33% 大于 2.67%。我们可以得出结论,一般客户会在节假日以折扣和免费送货的方式购买。

朴素贝叶斯模型的类型

朴素贝叶斯分类器有很多种类型。这里我们讨论了多项式、伯努利和高斯朴素贝叶斯分类器。

变种 特征类型 典型用途
多项式 字数统计 主题和文档分类
伯努利 二进制标志位(存在或不存在) 短信和垃圾邮件过滤
高斯 连续数值 传感器读数和测量

1. 多项式朴素贝叶斯

这种朴素贝叶斯模型用于文档分类问题。它使用表示文档中单词频率的特征。分类器考虑单词的出现次数和数量来确定文档属于特定类别(例如体育、政治或技术)的概率。

2.伯努利朴素贝叶斯

这类似于多项式朴素贝叶斯。伯努利朴素贝叶斯分类器用于文档分类任务。但是,它使用布尔预测器。它表示单词是否存在,并且只取值是或否。分类器根据单词是否出现在文本中来计算概率。

3. 高斯朴素贝叶斯

此分类器适用于连续值,但不适用于离散值。此分类器使用 高斯 分布,即均值和方差。

高斯钟形曲线用于朴素贝叶斯算法中对连续特征进行建模

条件概率公式变为,

利用均值和方差的高斯朴素贝叶斯条件概率公式

scikit学习 该库新增了两个变体:用于不平衡文本的互补朴素贝叶斯和用于离散类别的分类朴素贝叶斯。

朴素贝叶斯分类器的优点和局限性

机器学习中的朴素贝叶斯算法有各种优点和缺点。

朴素贝叶斯分类器的优点

  • 简单高效: 朴素贝叶斯算法简单易训练和实现。由于计算成本低,因此效率高。它可以高效处理大型数据集。
  • 快速训练和预测: 由于特征之间的独立性,朴素贝叶斯算法所需的训练数据量较少。一旦模型训练完成,它就能快速进行预测。
  • 可扩展性: 朴素贝叶斯可以处理具有大量特征的高维数据集。即使特征数量大于训练示例数量,它也能表现良好。它会随着数据点和预测器的数量而扩展。它既能处理连续数据,也能处理离散数据。
  • 对不相关特征的鲁棒性: 它对不相关的特征不敏感。
  • 适用于小型训练集: 朴素贝叶斯即使在训练数据有限的情况下也能提供合理的结果。它可以处理训练样本数量较少的情况。

朴素贝叶斯分类器的局限性

朴素贝叶斯 机器学习 假设所有特征都是相互独立的。因此,它无法学习数据中不同特征之间的关系。它将每个特征视为与其他特征没有关系。

第二点需要注意的是:它报告的类别概率校准得不好,因此与预测相关的置信度数值并不是可靠的概率。

为了解决这个问题,你可以使用 决策树随机森林、支持向量机(SVM) 神经网络 等等。这些算法能够学习数据中特征之间复杂的关联和依赖关系,因此可以预测更准确的结果。

朴素贝叶斯分类器的应用

由于该算法快速高效,您可以使用它进行实时预测。

垃圾邮件检测

电子邮件服务 (如 Gmail使用此算法来判断电子邮件是否为垃圾邮件。此算法非常适合垃圾邮件过滤。

情感分析

它可以根据词汇选择、句子结构和上下文等特征将文本分类为正面、负面或中性。它可用于社交媒体监控、客户评论和市场研究。

文件分类

它可以根据文档中特定词语或特征出现的频率或存在程度,将文档分为体育、政治、技术或金融等类别。

推荐系统

它可以分析用户偏好、历史数据和商品特征,以预测用户的兴趣或偏好,从而推荐产品、电影或文章。

这种分类器算法也应用于人脸识别、天气预报、医疗诊断和商店等领域。ping例如,新闻分类等。您可以在其中实现朴素贝叶斯算法。 Python其中 sklearn.naive_bayes 模块提供了上述所有变体。

常见问题

从以下位置导入所需的变体: sklearn.naive_bayes首先使用 `train_test_split` 将数据分割成训练集和测试集,然后对训练集调用 `fit()`,对测试集调用 `predict()`。GaussianNB 适用于连续特征,而 MultinomialNB 和 BernoulliNB 则适用于文本计数和二元词标志。

如果某个类别在训练集中从未与任何类同时出现,则其条件概率为零,导致整个乘积为零。拉普拉斯平滑会将每个计数加 1,从而避免任何计数降至零。Scikit-learn 将此功能作为 alpha 参数公开。

两者难分伯仲。朴素贝叶斯训练速度更快,所需数据量更少,并且能够处理高维文本。逻辑回归模型能够处理相关特征,并生成校准更精确的概率。在小型文本数据集上,朴素贝叶斯通常更胜一筹;而当数据量更大时,逻辑回归则会超越它。

留出一个测试集,并使用以下方法将预测结果与真实标签进行比较: 混淆矩阵然后得出精确率、召回率和 F1 值。仅凭准确率无法准确处理不平衡数据,例如垃圾邮件,因为其中一类样本占主导地位。

将文本转换为小写,去除标点符号,移除停用词,并可选择性地进行词干提取,然后将每个文档转换为计数或 TF-IDF 向量。伯努利算法的变体需要二进制的存在性标志,而不是计数。训练和预测时应用相同的步骤。

朴素贝叶斯是最简单的贝叶斯网络:只有一个类别节点,每个特征都直接连接到该节点,特征之间没有连接。而通用贝叶斯网络允许你绘制这些依赖关系边,因此它可以模拟朴素贝叶斯有意忽略的相关性。

自动化机器学习工具会搜索平滑值、特征表示和变体选择,然后根据交叉验证得分对候选方案进行排序。这省去了大部分手动试错的步骤——您仍然需要决定哪个指标重要,以及获胜方案是否合理。

GitHub 副驾驶 它能根据简短的注释快速生成样板代码——导入模块、划分训练集和测试集、拟合和预测函数调用。务必检查它选择的变体和评估代码,因为即使是看似合理的脚本也可能训练出错误的模型。

总结一下这篇文章: