机器学习之朴素贝叶斯原理+示例+代码+延申(详细篇)

目录

前言

1. 概率论相关知识

1.1 条件概率

1.2 全概率公式

1.3 贝叶斯定理

2. 朴素贝叶斯算法原理

3. 计算过程

4. 计算示例

 5. 代码示例

 6. 朴素贝叶斯的延申

6.1 高斯朴素贝叶斯(Gaussian Naive Bayes)

6.1.1 计算示例:

6.2 多项式朴素贝叶斯(Multinomial Naive Bayes)

6.2.1 计算示例:

6.3 伯努利朴素贝叶斯(Bernoulli Naive Bayes)

6.3.1 计算示例


前言

朴素贝叶斯(Naive Bayes)是一种基于贝叶斯定理的分类算法,特别适用于高维数据和文本分类任务。它之所以被称为“朴素”,是因为它假设所有特征是相互独立的,即在给定类别的情况下,特征之间没有关联。

朴素贝叶斯涉及到概率论的知识,因此我们先讲解一些概率论公式,随后再给出一个简单的计算示例,以更好地帮助大家理解。

最后再给出朴素贝叶斯的三个延申算法:高斯朴素贝叶斯,多项式朴素贝叶斯和伯努利朴素贝叶斯他们的原理和计算示例。

1. 概率论相关知识

1.1 条件概率

条件概率表示在已知事件 B 发生的情况下,事件 A 发生的概率,表示为P(A|B),计算公式为:

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

其中P(AB)是同时发生A和B事件的概率,P(B)是发生B事件的概率。

1.2 全概率公式

全概率公式用于计算某一事件发生的总概率,基于不同的互斥事件的条件概率来计算。假设有一组互斥且完备的事件B_{1},B_{2},......,B_{n},那么事件 A 的概率可以表示为:

P(A) = P(A|B_{1})P(B_{1})+P(A|B_{2})P(B_{2})+......+P(A|B_{n})P(B_{n})

1.3 贝叶斯定理

贝叶斯定理是从条件概率推导出的,用于逆向计算条件概率的重要公式。公式如下:

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

其中,P(A|B)是已知B发生的条件下A发生的概率,P(B)是B发生先验概率,P(A)是A发生的总概率。

2. 朴素贝叶斯算法原理

朴素贝叶斯算法基于贝叶斯定理,用于计算一个给定实例X = (x_{1},x_{2},......,x_{n}),属于类别C_{k}的概率P(C_{k}|X),根据贝叶斯定理:

P(C_{k}|X) = \frac{P(X|C_{k})P(C_{k})}{P(X)}

因为 P(X) 对于所有类别是相同的,且我们只关注相对概率,所以可以简化为

P(C_{k}|X) \propto P(X|C_{k})P(C_{k})

在“朴素”假设下,假定特征是条件独立的,P(X|C_{k}) 可以进一步分解为每个特征的条件概率的乘积:

P(X|C_{k}) = \prod_{i=1}^{n}P(x_{i}|C_{k})

因此,朴素贝叶斯分类器的最终决策规则为:

C\hat{} = argmax_{P(C_{k})}P(C_{k})\prod_{i=1}^{n}P(x_{i}|C_{k})

即选择使得上述表达式最大的类别 C_{k} 作为预测结果。

3. 计算过程

1. 计算先验概率 P(C_{k}):根据训练数据中各类别出现的频率进行估计。

2. 计算条件概率 P(x_{i}|C_{k}):在类别 C_{k} 下计算每个特征 x_{i} 的条件概率。这些概率可以根据特征值的频率来估计,如果是连续特征,则可以假设它服从某种分布(如高斯分布)并根据数据估计参数。

3. 计算后验概率 P(C_{k}|X):利用上面的公式,结合各个特征的条件概率和类别的先验概率,计算每个类别的后验概率。

4. 分类决策:选择后验概率最大的类别作为预测结果。

4. 计算示例

天气温度湿度风速是否打球
晴朗
晴朗
阴天
雨天正常
雨天正常
雨天正常
阴天
晴朗正常
晴朗正常
阴天正常
阴天正常
雨天正常

现在,我们要预测在某一天的天气状况为“晴朗”,温度为“低”,湿度为“高”,风速为“弱”的情况下,是否适合打球。

计算过程

1. 先验概率

P(是) = 8/12=2/3

P(否) = 4/12=1/3

2. 条件概率:

P(晴朗|是)=1/8

P(低温|是)=1/2

P(高湿|是)=1/4

P(弱风|是)=5/8

P(晴朗|否)=3/4

P(低温|否)=1/2

P(高湿|否)=1/2

P(弱风|否)=1/2

3. 后验概率:

  • P(是∣晴朗,低温,高湿,弱风)∝P(晴朗∣是)×P(低温∣是)×P(高湿∣是)×P(弱风∣是)×P(是)

  • P(否∣晴朗,低温,高湿,弱风)∝P(晴朗∣否)×P(低温∣否)×P(高湿∣否)×P(弱风∣否)×P(否)

  • 计算结果:

    • P(是∣晴朗,低温,高湿,弱风)∝1/8×1/2×1/4×5/8≈0.0098
    • P(否∣晴朗,低温,高湿,弱风)∝3/4×1/2×1/2×1/2≈0.094
  • 因为 P(否∣晴朗,低温,高湿,弱风)>P(是∣晴朗,低温,高湿,弱风),所以预测结果为“不打球”。

 5. 代码示例

我们可以使用一个常见的公开数据集来演示朴素贝叶斯的分类任务。这里使用的“鸢尾花”数据集(Iris dataset),这是一个经常用于分类任务的数据集。

# 导入所需库
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix

# 加载鸢尾花数据集
iris = load_iris()
X = iris.data  # 特征数据
y = iris.target  # 标签数据

# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 创建高斯朴素贝叶斯分类器
model = GaussianNB()

# 训练模型
model.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = model.predict(X_test)

# 计算模型的准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率: {accuracy * 100:.2f}%")

我们可以得到结果:

模型准确率: 97.78%

Process finished with exit code 0

 6. 朴素贝叶斯的延申

6.1 高斯朴素贝叶斯(Gaussian Naive Bayes)

高斯朴素贝叶斯假设特征的分布服从高斯分布(即正态分布)。这是因为在很多实际问题中,连续数据往往近似服从正态分布。

高斯朴素贝叶斯适用于特征是连续型数据的分类任务。例如,在医学数据中,病人的体温、血压、血糖水平等特征往往是连续值,并且通常可以假设为正态分布。计算公式如下:

对于每个类别 C_{k}​ 和特征 x_{i}​,高斯朴素贝叶斯计算 P(x_{i}|C_{k}) 的概率密度函数,公式为:

P(x_{i}|C_{k})=\frac{1}{\sqrt{2\pi \sigma _{k}^{2}}}exp^{-\frac{(x_{i}-\mu _{k})^{2}}{2\sigma _{k}^{2}}}

其中,\mu _{k}​ 和\sigma _{k}​ 分别是类别 C_{k}下特征 x_{i}​ 的均值和标准差。

6.1.1 计算示例:

假设我们有一个包含两个类别的数据集,特征是连续变量:

类别特征1(x1)特征2(x2)
06.0180
05.8170
05.9175
15.1120
15.3130
15.0115

我们要预测一个新的样本 [x1=5.7,x2=160] 的类别。 

计算每个类别的均值和标准差

对于类别0:

对于类别1:

计算后验概率

对于类别0:

 对于类别1:

 计算联合概率

对于类别0:

  • P(C=0∣x1=5.7,x2=160)∝P(C=0)×P(x1=5.7∣C=0)×P(x2=160∣C=0)

对于类别1:

  • P(C=1∣x1=5.7,x2=160)∝P(C=1)×P(x1=5.7∣C=1)×P(x2=160∣C=1)

由于 P(C=0∣x1=5.7,x2=160) 比 P(C=1∣x1=5.7,x2=160) 更大,因此新样本被分类为类别 0。

6.2 多项式朴素贝叶斯(Multinomial Naive Bayes)

多项式朴素贝叶斯假设特征符合多项式分布,适用于特征值为离散的情况,特别是特征值表示频率或计数时。它常用于文本分类任务,例如垃圾邮件过滤。

计算公式:对于每个类别 C_{k} 和特征 x_{i},多项式朴素贝叶斯的公式为:

P(x_{i}|C_{k}) = \frac{n_{ik}+\alpha }{n_{i}+\alpha \left | V \right |}

其中,n_{ik}​ 是类别 C_{k}​ 中特征 x_{i}​ 的总频数,n_{k}​ 是类别 C_{k}​ 中所有特征的总频数,\left | V \right |是特征的数量,\alpha是平滑参数(通常为1,即拉普拉斯平滑)。

6.2.1 计算示例:

假设我们有以下两个类别的文档,其中特征是单词在文档中出现的频率。

类别单词1(w1)单词2(w2)单词3(w3)
0301
0210
1032
1122

我们要预测一个新文档 [w1=2,w2=1,w3=0]的类别。 

计算每个类别的条件概率

类别0:

类别1:

计算联合概率:

  类别0:

  • P(C=0∣w1=2,w2=1,w3=0)∝P(C=0)×P(w1∣C=0)^2×P(w2∣C=0)×P(w3∣C=0)^0

 类别1:

  • P(C=1∣w1=2,w2=1,w3=0)∝P(C=1)×P(w1∣C=1)^2×P(w2∣C=1)×P(w3∣C=1)^0

比较两个类别的联合概率,较大的那个就是预测结果。 

6.3 伯努利朴素贝叶斯(Bernoulli Naive Bayes

伯努利朴素贝叶斯假设特征是二值的,即每个特征要么出现,要么不出现。这种模型更适合于只有两种状态的特征(如是否出现某个单词)。它计算每个类别下特征是否出现的概率,伯努利朴素贝叶斯适用于二元特征的分类任务,特别是在文本分类中,当我们只关心单词是否出现而不是出现的频率时。例如,垃圾邮件过滤器可以使用伯努利模型来考虑邮件中是否出现某些关键字。

假设我们有一组邮件,其中的特征是邮件中某些特定单词是否出现(如“免费”、“优惠”等),我们可以使用伯努利朴素贝叶斯来预测邮件是否是垃圾邮件。

对于每个类别 C_{k}​ 和特征 x_{i},伯努利朴素贝叶斯的公式为:

P(x_{i}|C_{k}) = p_{ik}^{x_{i}}\times (1-p_{ik})^{1-x_{i}}

其中:

  • x_{i}​ 是特征 i 在样本中的取值,取值为0或1。
  • C_{k}是类别 k
  • p_{ik}是在类别 C_{k}​ 中特征 x_{i} 出现的概率,即 P(x_{i}=1|C_{k})

这个公式的作用是统一描述当 x_{i}为1或0时,条件概率的计算方式:

  • x_{i}=1 时,P(x_{i}|C_{k}) = p_{ik}^{1}\times (1-p_{ik})^{0}​。此时公式变为 P(x_{i}|C_{k}) = p_{ik}^{1}\times (1-p_{ik})^{0}=p_{ik}
  • x_{i}=0 时,P(x_{i}|C_{k}) = p_{ik}^{0}\times (1-p_{ik})^{1}​。此时公式变为 P(x_{i}|C_{k}) = p_{ik}^{0}\times (1-p_{ik})^{1}=1-p_{ik}

6.3.1 计算示例

假设我们有以下两个类别的文档,其中特征是单词是否出现在文档中(出现记为1,不出现记为0)。

我们要预测一个新文档 [w1=1,w2=0,w3=0] 的类别。 

计算每个类别的条件概率

这里采用\alpha是使用拉普拉斯平滑来计算,以避免零概率问题 。

类别0:

类别1:

计算联合概率

类别0:

  • P(C=0∣w1=1,w2=0,w3=0)∝P(C=0)×P(w1=1∣C=0)×P(w2=0∣C=0)×P(w3=0∣C=0)

类别1:

  • P(C=1∣w1=1,w2=0,w3=0)∝P(C=1)×P(w1=1∣C=1)×P(w2=0∣C=1)×P(w3=0∣C=1) 

 通过比较两个类别的联合概率,可以确定新文档属于哪个类别。

  • 21
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值