【机器学习】第四章 朴素贝叶斯

目录

 

4.1 朴素贝叶斯的简介

4.1.1 朴素贝叶斯的一般流程

4.1.2 朴素贝叶斯的优缺点

4.1.3 朴素贝叶斯的应用场合

4.2 贝叶斯公式

主要思想:

公式所涉及的几个概率:

4.3 实例:判断西瓜好坏

4.4 实例(python实现)

问题:

过程思路:

结果展示:

结果分析:

其他不同模型与其对比:

4.5 【补充】适用于朴素贝叶斯的几种分类器

4.6 总结


 

4.1 朴素贝叶斯的简介

       朴素贝叶斯是一种基于贝叶斯定理与特征条件独立假设的分类算法(其中比贝叶斯多出来的“朴素”就是指各个特征条件独立),其核心思想是通过考虑各个特征的概率来预测分类(即对于给出的待分类样本,计算该样本在每个类别下出现的概率,最大的就被认为是该分类样本所属于的类别

 4.1.1 朴素贝叶斯的一般流程

1. 收集数据:可以使用任何方法收集数据,其中这些数据通常被分成训练集和测试集
       (训练集用于创建模型,测试集用于评估模型的性能)
2. 准备数据:需要数值型或者布尔型数据
3. 分析数据:对准备好的数据进行分析,确保数据的准确性和完整性
4. 训练模型:计算不同的独立特征的条件概率
5. 测试算法:计算错误率
6. 使用算法:常见的朴素贝叶斯应用是文档分类

4.1.2 朴素贝叶斯的优缺点

优点:
1. 具有稳定的分类效率
2. 在数据较少时仍然有效,可以处理多类别的问题
3. 对缺失数据不太敏感
4. 进行分类时对时间和空间的开销都比较小
缺点:
1. 对于输入数据的准备方式比较敏感,需要对数据进行适当的预处理
2. 需要假设属性之间相互独立,这在实际情况中往往不太现实
3. 需要知道先验概率,但是由于先验概率大多取决于假设,故很容易因此导致预测效果不佳

4.1.3 朴素贝叶斯的应用场合

朴素贝叶斯主要被广泛地应用在文本分类、垃圾邮件过滤、情感分析等场合

4.2 贝叶斯公式

主要思想:

通过已知的先验概率和新的证据(条件概率)来求解后验概率 

eq?P%28A%5Cmid%20B%29%3D%5Cfrac%7BP%28AB%29%7D%7BP%28B%29%7D%3D%5Cfrac%7BP%28B%5Cmid%20A%29*P%28A%29%7D%7BP%28B%29%7D

(其中可将A看成类别,B看成属性 )

【注】

𝑃(𝐴𝐵):表示事件A和事件B同时发生的概率,即联合概率
𝑃(𝐴|𝐵):表示在已知事件B发生的情况下,事件A发生的后验概率 (A的概率更新)
𝑃(𝐵|𝐴):表示在事件A发生的情况下,事件B的条件概率
𝑃(𝐴):事件A的边缘概率,此处也称为先验概率 (此时不考虑B) 
𝑃(𝐵):事件B发生的边缘概率

 

公式所涉及的几个概率:

先验概率:根据以往的经验和分析得出的,对某个事件发生概率的初始假设估计
条件概率:指在某个事件A已经发生的条件下,另一个事件B发生的概率
后验概率:指在考虑了新的证据或数据之后,我们对某个事件发生的概率的更新估计
边缘概率:指不考虑其他事件的情况下,某个事件发生的概率
联合概率:指两个或多个事件同时发生的概率

4.3 实例:判断西瓜好坏

相关数据集如下图所示:

2d1b0970dd2843c9839b881ffb5afbe9.jpeg

现在我们需要对下图的测试例进行判断看为好瓜还是坏瓜:

ddb66299eee84c9ca9d49a0bcd4383ab.png

求解步骤如下:

由数据集可知:总共有17个样例,其中好瓜有8个,坏瓜有9个
所以得:
(1)

6fcee1766a2a46cc8ec5bcaf0f63561c.jpeg

(2)估算先验概率:

98d5d6ab77194fed87728ebb9b8ec0cd.jpeg

(3)再计算每个属性的条件概率:

77cd57e29fb34c639aba25f5227e1d65.jpeg

(4)

73466adaba2e4ab19a1bdbc4800f75c2.jpeg

4.4 实例(python实现)

问题:

根据五个属性(果肉质地,橘子皮厚度,橘子皮颜色,橘子皮质地,橘子大小)判断橘子是否甜

数据集如下图:

f284b1f06e584f78bb6ec188d934b675.png

过程思路:

首先将数据集转换一下,如下图所示:

85f8e80c78e646608e788807235e3d0f.png

【注】其中:
柔软多汁 1   紧实干燥0
薄 1   厚 0
黄 1   青 0
光滑 1  粗糙 0
小 1  中 0  大 2
是 1  否 0

(1)收集数据:使用pd.read_csv()函数从"orange_data.csv"文件中读取数据,并将数据存储在data中

e277a7883dc14928a14f5ddacc4353d4.png

(2)准备数据:将字符串类型的数据转换为数值类型

d6812eba780d46e0abe835cb607d4089.png
(3)分析数据
(4)训练模型:

23227c753013480ebb86b92b03e66c65.png
(5)测试算法:定义测试样本,然后使用predict方法得到预测结果,使用predict_proba方法得到预测概率

35f0b897d6f34ad1bd93edccbc153682.png
(6)使用算法:输出预测结果和概率,以及计算每个属性的标准差

a8da5341fd994dcdbb1fa87b6ddf78f8.png

完整的代码:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.preprocessing import LabelEncoder

# 读取数据
data = pd.read_csv('orange_data.csv')

# 将字符串类型的数据转换为数值类型
le = LabelEncoder()
data['果肉质地'] = le.fit_transform(data['果肉质地'])
data['橘子皮厚度'] = le.fit_transform(data['橘子皮厚度'])
data['橘子皮颜色'] = le.fit_transform(data['橘子皮颜色'])
data['橘子皮质地'] = le.fit_transform(data['橘子皮质地'])
data['橘子大小'] = le.fit_transform(data['橘子大小'])
data['甜度'] = le.fit_transform(data['甜度'])


# 划分训练集和测试集
X = data[['果肉质地', '橘子皮厚度', '橘子皮颜色', '橘子皮质地', '橘子大小']]
y = data['甜度']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练朴素贝叶斯分类器
gnb = MultinomialNB()
gnb.fit(X_train, y_train)

# 测试样本
test_sample = pd.DataFrame({'果肉质地': [1],
                           '橘子皮厚度': [1],
                           '橘子皮颜色': [1],
                           '橘子皮质地': [1],
                           '橘子大小': [1]})

# 预测测试样本的甜度和概率
y_pred, y_pred_proba = gnb.predict(test_sample), gnb.predict_proba(test_sample)

# 输出预测结果和概率
print("测试样本预测结果:", y_pred)
print("测试样本预测概率:", y_pred_proba)

# 计算每个属性的概率
attribute_proba = gnb.feature_log_prob_

# 将负数概率转换为正数概率
attribute_proba_positive = np.exp(attribute_proba)
print("每个属性的概率(正数):", attribute_proba_positive)

结果展示:

2643a77fd85649a49bca9a0fc2b535a2.png

结果分析:

(使用的是多项式朴素贝叶斯分类器(MultinomialNB)

a. 预测结果是[1],表示该测试样本被判别为”甜“
b. 预测概率是[[0.14351227 0.85648773]],这表明模型预测该样本属于类别1的概率为0.85648773,属于类别0的概率为0.14351227。由于类别1的概率更高,因此模型选择了类别1作为预测结果。
c. 对应于类别1的属性概率
[0.05263158 0.05263158 0.26315789 0.21052632 0.42105263]
d. 对应于类别0的属性概率
[0.23809524 0.23809524 0.16666667 0.16666667 0.19047619]

其他不同模型与其对比:

 (1)高斯朴素贝叶斯分类器(GaussianNB)

7c39637daef94ce6a223d4ddb00f1990.png

(使用该分类器时,发现不能直接给出属性的概率信息,故转换成求其属性的标准差来估计概率)

(2)伯努利朴素贝叶斯分类器(BernoulliNB)

1d5befb509ad4e669212e8cc0eb6f9ff.png

4.5 【补充】适用于朴素贝叶斯的几种分类器

(1)多项式朴素贝叶斯分类器(MultinomialNB)
· 假设特征服从多项式分布,即每个特征的取值为非负整数
· 通过计算每个类别下特征的频次来估计条件概率
· 适合处理特征为离散型变量的情况,例如文本分类任务
· 计算过程:
a. 计算每个属性的先验概率
b.  计算每个属性在每个类别下的条件概率 eq?P%28A%5Cmid%20B%20%29(其中A是属性,B是类别)
b. 根据贝叶斯定理计算后验概率 eq?P%28A%5Cmid%20B%29%3D%5Cfrac%7BP%28B%5Cmid%20A%29*P%28A%29%7D%7BP%28B%29%7D

(2)高斯朴素贝叶斯分类器(GaussianNB)
· 假设特征服从高斯分布(正态分布),即每个特征的取值都符合正态分布
· 通过计算每个类别下特征的均值和标准差来估计条件概率
· 适合处理特征为连续型的数据,例如身高、体重等
· 计算过程:
a. 计算每个属性在每个类别下的高斯分布参数:均值(μ)和方差(σ²)
b. 计算每个属性的先验概率
c. 计算每个属性在每个类别下的条件概率
d. 根据贝叶斯定理计算后验概率 eq?P%28A%5Cmid%20B%29%3D%5Cfrac%7BP%28B%5Cmid%20A%29*P%28A%29%7D%7BP%28B%29%7D
e. 对于每个属性值,使用高斯概率密度函数计算其在给定类别下的概率

eq?f%28x%5Cmid%20%5Cmu%20%2C%5Csigma%20%5E%7B2%7D%29%3D%5Cfrac%7B1%7D%7B%5Csqrt%7B2%5Cpi%20%5Csigma%20%5E%7B2%7D%7D%7Dexp%28-%5Cfrac%7B%28x-%5Cmu%20%29%5E%7B2%7D%7D%7B2%5Csigma%20%5E%7B2%7D%7D%29

(注): 

eq?f%28x%5Cmid%20%5Cmu%20%2C%5Csigma%20%5E%7B2%7D%29: 这表示变量 x在给定均值 μ和方差 σ^2的条件下的概率密度函数值

eq?%5Cfrac%7B1%7D%7B%5Csqrt%7B2%5Cpi%20%5Csigma%20%5E%7B2%7D%7D%7D​: 这是归一化因子,确保概率密度函数在整个定义域上的积分为1,即所有可能取值的 x 的概率总和为1,2π​是正态分布的形状参数,而σ是尺度参数,反映了分布的宽度

exp: 指数函数,其公式为,其中e^x是自然对数的底数,约等于2.71828

eq?%28-%5Cfrac%7B%28x-%5Cmu%20%29%5E%7B2%7D%7D%7B2%5Csigma%20%5E%7B2%7D%7D%29: 这是指数函数的指数部分,它决定了概率密度在均值附近如何快速下降。(x−μ) 表示随机变量 x 与其均值 μ 的差值,平方后除以两倍的方差 σ^2,这样当x=μ 时,指数部分为0,概率密度达到最大值;当 x 远离 μ 时,指数部分变得非常小,导致概率密度迅速减小。

(3)伯努利朴素贝叶斯分类器(BernoulliNB)
· 假设属性服从二项分布,即每个属性的取值为0或1
· 通过计算每个类别下属性为1的概率来估计条件概率
· 适合处理特征为二元特征的分类问题
· 计算过程:
a. 将输入数据转换为二元特征向量
b. 计算每个属性的先验概率
c. 计算每个属性在每个类别下的条件概率
d. 根据贝叶斯定理计算后验概率eq?P%28A%5Cmid%20B%29%3D%5Cfrac%7BP%28B%5Cmid%20A%29*P%28A%29%7D%7BP%28B%29%7D

4.6 总结

借此机会,我更加深入的学习到了朴素贝叶斯的相关知识,了解到了相关的计算方式,算法以及适用的几种模型,同时我也更加了解到了前面提到的关于朴素贝叶斯的其中一个缺点:对于输入数据的准备方式比较敏感,需要对数据进行适当的预处理。一开始看到这时,并没有太深入去思考,后面做实验进行代码实现时发现这一点格外重要,一定要对实验数据进行预处理,不然很容易出错。总而言之,很感谢本次实验,让我在一定程度上得到了更进一步的提升,对于机器学习后续的学习有很大的帮助。
 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值