本教程将使您了解如何使用 Python 的 Scikit-learn 包构建和评估朴素贝叶斯分类器。

假设您是产品经理,您想将客户评论分为正面和负面类别。 或者作为贷款经理,您想确定哪些贷款申请人是安全的还是有风险的? 作为医疗保健分析师,您希望预测哪些患者可能患有糖尿病。 所有示例都存在对评论、贷款申请人和患者进行分类的相同问题。

朴素贝叶斯是最直接、最快速的分类算法,适用于大量数据。 朴素贝叶斯分类器成功地用于各种应用,例如垃圾邮件过滤、文本分类、情感分析和推荐系统。 它使用贝叶斯概率定理来预测未知类。

在本教程中,您将了解以下所有内容:


  • 分类工作流程
  • 什么是朴素贝叶斯分类器?
  • 朴素贝叶斯分类器如何工作?
  • Scikit-learn 中的分类器构建
  • 零概率问题
  • 它的优点和缺点

1 分类工作流程

无论何时执行分类,第一步都是了解问题并识别潜在的特征和标签。 特征是影响标签结果的那些特征或属性。 例如,在贷款分配的情况下,银行经理确定客户的职业、收入、年龄、地点、以前的贷款历史、交易历史和信用评分。 这些特征被称为帮助模型对客户进行分类的特征。

分类有两个阶段,学习阶段和评估阶段。 在学习阶段,分类器在给定的数据集上训练其模型,在评估阶段,它测试分类器的性能。 性能是根据各种参数进行评估的,例如准确度、误差、精度和召回率。

Scikit-learn 的朴素贝叶斯分类_数据集

2 什么是朴素贝叶斯分类器?

朴素贝叶斯是一种基于贝叶斯定理的统计分类技术。 它是最简单的监督学习算法之一。 朴素贝叶斯分类器是一种快速、准确和可靠的算法。 朴素贝叶斯分类器在大型数据集上具有很高的准确性和速度。

朴素贝叶斯分类器假设类中特定特征的效果独立于其他特征 。 例如,贷款申请人是否可取取决于他/她的收入、以前的贷款和交易历史、年龄和位置。 即使这些特征相互依赖,这些特征仍然被独立考虑 。 这个假设简化了计算,这就是为什么它被认为是“朴素”的。 这种假设称为类条件独立

Scikit-learn 的朴素贝叶斯分类_贝叶斯分类器_02


  • P(h):假设 h 为真的概率(无论数据如何)。 这称为 h 的先验概率。
  • P(D):数据的概率(无论假设如何)。 这被称为先验概率。
  • P(h|D):给定数据 D 的假设 h 的概率。这称为后验概率。
  • P(D|h):假设 h 为真,数据 D 的概率。 这称为后验概率。

3 朴素贝叶斯分类器如何工作?

​此节涉及大量线性代数与概率的知识,对理论研究有高要求的读者可参考更专业的书籍,只关心如何应用的读者可以跳过此节。我也只关心应用,因此,咱们一起跳过此节吧。留个标题只为结构完整性。哈哈哈~~~希望数学老师原谅我~~~

4 Scikit-learn 中的分类器构建

4.1 朴素贝叶斯分类器

1)定义数据集

在此示例中,您可以使用具有三列的虚拟数据集:天气、温度和是否出去玩。 前两个是特征(天气、温度),另一个是标签。

Scikit-learn 的朴素贝叶斯分类_朴素贝叶斯_03

2)编码特征

首先,您需要将这些字符串标签转换为数字。 例如:'Overcast', 'Rainy', 'Sunny' as 0, 1, 2。这称为标签编码。 Scikit-learn 提供了 LabelEncoder 库,用于对标签进行编码,其值在 0 到 1 之间,小于离散类的数量。

Scikit-learn 的朴素贝叶斯分类_朴素贝叶斯_04

Scikit-learn 的朴素贝叶斯分类_数据集_05

同样,您也可以对 temp 和 play 列进行编码。

Scikit-learn 的朴素贝叶斯分类_数据集_06

Scikit-learn 的朴素贝叶斯分类_贝叶斯分类器_07

现在将这两个特征(天气和温度)组合在一个变量(元组列表)中。

Scikit-learn 的朴素贝叶斯分类_数据集_08

Scikit-learn 的朴素贝叶斯分类_贝叶斯分类器_09

3)生成模型

在以下步骤中使用朴素贝叶斯分类器生成模型:


  • 创建朴素贝叶斯分类器
  • 将数据集拟合到分类器上
  • 执行预测
  • Scikit-learn 的朴素贝叶斯分类_数据集_10

    Scikit-learn 的朴素贝叶斯分类_贝叶斯分类器_11

    这里,1 表示玩家可以“出去玩”。

    4.2 具有多个标签的朴素贝叶斯

到目前为止,您已经学习了使用二进制标签的朴素贝叶斯分类。 现在您将了解朴素贝叶斯中的多类分类。 这被称为多项朴素贝叶斯分类。 例如,如果您想对有关技术、娱乐、政治或体育的新闻文章进行分类。

在模型构建部分,您可以使用葡萄酒数据集,这是一个非常著名的多类分类问题。 “这个数据集是对在意大利同一地区种植但来自三种不同品种的葡萄酒进行化学分析的结果。”

数据集包含 13 个特征(酒精、苹果酸、灰分、alcalinity_of_ash、镁、总酚、黄酮类化合物、非黄酮类酚、原花青素、颜色强度、色调、od280/od315_of_diluted_wines、脯氨酸)和葡萄酒品种类型。 该数据有3种酒类Class_0、Class_1和Class_3。 在这里,您可以建立一个模型来对葡萄酒的类型进行分类。

该数据集在 scikit-learn 库中可用。

1)加载数据

让我们首先从 scikit-learn 数据集中加载所需的 wine 数据集。

Scikit-learn 的朴素贝叶斯分类_朴素贝叶斯_12

2)探索数据

您可以打印目标和特征名称,以确保您拥有正确的数据集,如下所示:

Scikit-learn 的朴素贝叶斯分类_数据集_13

Scikit-learn 的朴素贝叶斯分类_朴素贝叶斯_14

稍微探索一下您的数据总是不会错的,这样您就知道自己在处理什么。 在这里,您可以看到打印了数据集的前五行,以及整个数据集的目标变量。

Scikit-learn 的朴素贝叶斯分类_朴素贝叶斯_15

Scikit-learn 的朴素贝叶斯分类_贝叶斯分类器_16

3)拆分数据

首先,您将列分为因变量和自变量(或特征和标签)。 然后将这些变量拆分为训练集和测试集。

Scikit-learn 的朴素贝叶斯分类_数据集_17

4)生成模型

拆分后,您将在训练集上生成一个随机森林模型,并对测试集特征进行预测。

Scikit-learn 的朴素贝叶斯分类_朴素贝叶斯_18

5)评估模型

模型生成后,使用实际值和预测值检查准确性。

Scikit-learn 的朴素贝叶斯分类_贝叶斯分类器_19


Scikit-learn 的朴素贝叶斯分类_朴素贝叶斯_20

5 零概率问题

假设数据集中没有风险贷款的元组,在这种情况下,后验概率为零,模型无法做出预测。 这个问题被称为零概率,因为特定类的出现为零。

此类问题的解决方案是拉普拉斯校正(Laplacian correction)或拉普拉斯变换(Laplace Transformation)。 拉普拉斯校正是平滑技术之一。 在这里,您可以假设数据集足够大,每个类添加一行不会对估计的概率产生影响。 这将克服概率值为零的问题。

例如:假设对于有风险的类贷款,数据库中有 1000 个训练元组。 在这个数据库中,收入列有 0 个元组代表低收入,990 个元组代表中等收入,10 个元组代表高收入。 在没有拉普拉斯校正的情况下,这些事件的概率为 0、0.990(来自 990/1000)和 0.010(来自 10/1000)

现在,对给定的数据集应用拉普拉斯校正。 让我们为每个收入-价值对再添加 1 个元组。 这些事件的概率:

Scikit-learn 的朴素贝叶斯分类_贝叶斯分类器_21

6 优点


  • 它不仅是一种简单的方法,而且是一种快速准确的预测方法。
  • 朴素贝叶斯的计算成本非常低。
  • 它可以有效地处理大型数据集。
  • 与连续变量相比,它在离散响应变量的情况下表现良好。
  • 它可以用于多类预测问题。
  • 它在文本分析问题的情况下也表现良好。
  • 当独立性假设成立时,朴素贝叶斯分类器与其他模型(如逻辑回归)相比表现更好。

7 缺点


  • 独立特征的假设。 在实践中,模型几乎不可能得到一组完全独立的预测变量。
  • 如果没有特定类的训练元组,这将导致后验概率为零。 在这种情况下,模型无法做出预测。 这个问题被称为零概率/频率问题。

8 结论

在本教程中,您了解了朴素贝叶斯算法、它的工作原理、朴素贝叶斯假设、问题、实现、优点和缺点。 在此过程中,您还学习了 scikit-learn 中二元和多项类的模型构建和评估。

朴素贝叶斯是最直接和最有效的算法。 尽管机器学习在过去几年取得了重大进展,但它已经证明了它的价值。 它已成功部署在从文本分析到推荐引擎的许多应用程序中。

python 测验 python测验7

一.实验名称:《零基础学Python》第7章 面向对象程序设计二.实验环境:IDLE Shell 3.9.7三.实验内容:5道实例、4道实战四.实验过程:实例01 创建大雁类并定义飞行方法点击查看代码class Geese: '''大雁类''' def __init__(self,beak,wing,claw): print("我是大雁类!我有以下特征:")