机器学习面试题汇总与解析——朴素贝叶斯

本章讲解知识点

    1. 什么是朴素贝叶斯


  • 本专栏适合于Python已经入门的学生或人士,有一定的编程基础。

  • 本专栏适合于算法工程师、机器学习、图像处理求职的学生或人士。

  • 本专栏针对面试题答案进行了优化,尽量做到好记、言简意赅。这才是一份面试题总结的正确打开方式。这样才方便背诵

  • 如专栏内容有错漏,欢迎在评论区指出或私聊我更改,一起学习,共同进步。

  • 相信大家都有着高尚的灵魂,请尊重我的知识产权,未经允许严禁各类机构和个人转载、传阅本专栏的内容。


  • 关于机器学习算法书籍,我强烈推荐一本《百面机器学习算法工程师带你面试》,这个就很类似面经,还有讲解,写得比较好。

  • 关于深度学习算法书籍,我强烈推荐一本《解析神经网络——深度学习实践手册》,简称 CNN book,通俗易懂。

  • B站机器学习视频:https://space.bilibili.com/10781175/channel/detail?cid=133301



1. 什么是朴素贝叶斯

1.1 基本概念

贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。而朴素朴素贝叶斯分类是贝叶斯分类中最简单,也是常见的一种分类方法。

朴素贝叶斯(Naive Bayes)是一种基于贝叶斯定理和特征条件独立性假设的分类算法。它通过统计特征在不同类别下的条件概率,来进行分类任务。

1.2 算法流程

朴素贝叶斯算法的流程如下,每一步都列出了对应的公式:

1.准备训练数据集:包含多个样本和对应的类别标签:已知集合 C=(y1,y2,...yn)C=(y_1,y_2,...y_n) 和特征 X=(x1,x2,...xn)X=(x_1,x_2,...x_n),确定映射规则 y=f()y = f(\cdot),使得任意 xiXx_i \in X 有且仅有一个 yiCy_i \in C 使得 yif(xi)y_i \in f(x_i) 成立。其中 CC 叫做类别集合,其中每一个元素是一个类别,而 XX 叫做项集合(特征集合),其中每一个元素是一个待分类项,f()f(\cdot) 叫做分类器。分类算法的任务就是构造分类器 f()f(\cdot)

2.计算类别的先验概率: 先验概率 P(Y=C)P(Y = C) 表示类别 CC 在训练集中的出现频率。 公式:P(Y=C)=count(Y=C)count(total)P(Y = C) = \frac{count(Y = C)} {count(total)}

3.计算特征的条件概率: 条件概率 P(X=xY=C)P(X = x | Y = C) 表示在给定类别 CC 的情况下,特征 XX 取值为 xx 的概率。 假设特征之间相互独立,可以通过计算每个特征的条件概率来估计整个特征向量的条件概率。 公式:P(X=xY=C)=count(X=x,Y=C)count(Y=C)P(X = x | Y = C) = \frac{count(X = x, Y = C)}{count(Y = C)}

4.根据贝叶斯定理计算后验概率: 后验概率 P(Y=CX)P(Y = C | X) 表示在观测到特征 XX 的情况下,类别为 CC 的概率。 根据贝叶斯定理,可以通过先验概率和条件概率计算后验概率。 公式:P(Y=CX)=P(Y=C)P(XY=C)P(X)P(Y = C | X) = P(Y = C) * \frac{P(X | Y = C)}{P(X)}

5.选择后验概率最大的类别作为预测结果: 将观测样本分类到后验概率最大的类别。 预测结果:Ypred=(P(Y=CX))Y_{pred} = \argmax(P(Y = C | X))

公式总结为,即通过先验概率和条件概率计算后验概率

P(BA)=P(AB)P(B)P(A)P(B|A)=\frac{P(A|B)P(B)}{P(A)}

也即:

P()=P()P()P()P(类别|特征)=\frac{P(特征|类别)P(类别)}{P(特征)}

1.3 分类实例

假设我们有一个二元分类问题,需要根据两个特征(x1x_1x2x_2)将样本分为两类(正类和负类)。

训练数据如下:

样本 x1 x2 类别
1 1 0 正类
2 1 1 正类
3 0 1 负类
4 0 0 负类

首先,我们需要计算各个类别的先验概率。

P()=2/4=0.5P(正类) = 2 / 4 = 0.5

P()=2/4=0.5P(负类) = 2 / 4 = 0.5

接下来,我们计算在给定类别下的特征的条件概率。

对于正类: P(x1=1)=1/2=0.5P(x_1=1 | 正类) = 1 / 2 = 0.5

P(x1=0)=1/2=0.5P(x_1=0 | 正类) = 1 / 2 = 0.5

P(x2=1)=1/2=0.5P(x_2=1 | 正类) = 1 / 2 = 0.5

P(x2=0)=1/2=0.5P(x_2=0 | 正类) = 1 / 2 = 0.5

对于负类: P(x1=1)=0/2=0P(x_1=1 | 负类) = 0 / 2 = 0

P(x1=0)=2/2=1P(x_1=0 | 负类) = 2 / 2 = 1

P(x2=1)=1/2=0.5P(x_2=1 | 负类) = 1 / 2 = 0.5

P(x2=0)=1/2=0.5P(x_2=0 | 负类) = 1 / 2 = 0.5

现在,我们有一个新的样本,特征为 x1=1x_1=1x2=0x_2=0,需要预测其类别。

计算样本属于正类的后验概率: P(x1=1,x2=0)P()P(x1=1)P(x2=0)=0.50.50.5=0.125P(正类 | x_1=1, x_2=0) ∝ P(正类) * P(x_1=1 | 正类) * P(x_2=0 | 正类)\\ = 0.5 * 0.5 * 0.5\\ = 0.125\\

计算样本属于负类的后验概率: P(x1=1,x2=0)P()P(x1=1)P(x2=0)=0.500.5=0P(负类 | x_1=1, x_2=0) ∝ P(负类) * P(x_1=1 | 负类) * P(x_2=0 | 负类)\\ = 0.5 * 0 * 0.5\\ = 0\\

归一化后验概率: P(x1=1,x2=0)=0.125/(0.125+0)=1P(正类 | x_1=1, x_2=0) = 0.125 / (0.125 + 0)