机器学习——朴素贝叶斯(Naive Bayes)详细解读

本文深入解析朴素贝叶斯分类器原理,通过实例展示贝叶斯定理的应用,介绍高斯贝叶斯处理连续值的方法,最后以鸢尾花数据集为例,演示基于Python的高斯贝叶斯分类器实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在机器学习中,朴素贝叶斯是一个分类模型,输出的预测值是离散值。在讲该模型之前首先有必要先了解贝叶斯定理,以该定理为基础的统计学派在统计学领域占据重要的地位,它是从观察者的角度出发,观察者所掌握的信息量左右了观察者对事件的认知。

贝叶斯公式

P ( A ∣ B ) = P ( B ∣ A ) P ( A ) P ( B ) = P ( B ∣ A ) P ( A ) ∑ A P ( B ∣ A ) P ( A ) P(A|B) = \frac{P(B|A)P(A)}{P(B)} = \frac{P(B|A)P(A)}{\sum_{A}^{ }P(B|A)P(A)} P(AB)=P(B)P(BA)P(A)=AP(BA)P(A)P(BA)P(A)

其中, P ( B ∣ A ) P(B|A) P(BA)是事件 B 在另一个事件 A已经发生条件下的概率, ∑ A P ( B ∣ A ) P ( A ) \sum_{A}^{ }P(B|A)P(A) AP(BA)P(A)表示A所有可能情况下的概率,现在要来求事件A在事件B发生情况下的条件概率 P ( A ∣ B ) P(A|B) P(AB),又称后验概率。

举例说明

例1

工厂生产产品,合格产品的概率是0.9,误检的概率是0.2,误检情况中合格产品的概率是0.1,那合格产品被误检的概率是多少?

直接套用贝叶斯公式,可得:

P ( 误 检 ∣ 合 格 ) = P ( 合 格 ∣ 误 检 ) P ( 误 检 ) P ( 合 格 ) = 0.1 ∗ 0.2 0.9 = 1 45 P(误检|合格) = \frac{P(合格|误检)P(误检)}{P(合格)} = \frac{0.1*0.2}{0.9}=\frac{1}{45} P()=P()P()P()=0.90.10.2=451

例2

假设有个严重的疾病,发生的概率是万分之一,现在某人神经大条,怀疑得了该病,跑到医院检查,结果确有此病,不过医院的测试报告只有99%准确度(另外,也指正常人检测99%没问题,1%检测错误)。那么,他的死亡风险有多大?

咋一看,此人快要和世界说拜拜了,这个时候贝叶斯公式派上用场了,其中,用D表示该病(D=1,得病;D=0,健康),P表示报告准确度(T=1,准确;T=0,错误),可得:

P ( D = 1 ∣ T = 1 ) = P ( T = 1 ∣ D = 1 ) P ( D = 1 ) P ( T = 1 ∣ D = 1 ) P ( D = 1 ) + P ( T = 1 ∣ D = 0 ) P ( D = 0 ) = 0.99 ∗ 0.0001 0.99 ∗ 0.0001 + 0.01 ∗ 0.9999 = 0.0098 P(D=1|T=1) = \frac{P(T=1|D=1)P(D=1)}{P(T=1|D=1)P(D=1)+P(T=1|D=0)P(D=0)}= \frac{0.99*0.0001}{0.99*0.0001+0.01*0.9999}=0.0098 P(D=1T=1)=P(T=1D=1)P(D=1)+P(T=1D=0)P(D=0)P(T=1D=1)P(D=1)=0.990.0001+0.010.99990.990.0001=0.0098

可见,患病的几率很小,并没有想象中可怕。

朴素贝叶斯分类器(Naive Bayes Classifier)

用朴素贝叶斯分类器有个前提,需要假设所有的特征在数据集中是同等重要,但又相互独立,显然在现实情况中这是不太可能的,但还是要尽可能地满足它这个“朴素”的要求。

朴素贝叶斯的朴素思想,对于给定的待分类项,求解在此分类项出现的条件下,各个类别出现的概率,谁的概率最大,该分类项就属于哪个类别。

朴素贝叶斯的公式

在特征项集合: F = { f 1 , f 2 , f 3 , ⋅ ⋅ ⋅ , f m } F=\left \{ f_{1}, f_{2}, f_{3}, \cdot \cdot \cdot, f_{m}\right \} F={f1,f2,f3,,fm} 和类别集合: C = { c 1 , c 2 , c 3 , ⋅ ⋅ ⋅ , C n } C=\left \{ c_{1}, c_{2}, c_{3}, \cdot \cdot \cdot, C_{n}\right \} C={c1,c2,c3,,Cn}条件的下,然后根据贝叶斯定理,可得:

P ( c k ∣ f 1 , f 2 , f 3 , ⋅ ⋅ ⋅ , f m ) = P ( c k ) P ( f 1 , f 2 , f 3 , ⋅ ⋅ ⋅ , f m ∣ c k ) P ( f 1 , f 2 , f 3 , ⋅ ⋅ ⋅ , f m ) ( k = 1 , 2 , 3 , ⋅ ⋅ ⋅ , n ) P(c_{k}|f_{1}, f_{2}, f_{3}, \cdot \cdot \cdot, f_{m}) = \frac{P(c_{k})P(f_{1}, f_{2}, f_{3}, \cdot \cdot \cdot, f_{m}|c_{k})}{P(f_{1}, f_{2}, f_{3}, \cdot \cdot \cdot, f_{m})}(k=1,2,3,\cdot \cdot \cdot,n ) P(ckf1,f2,f3,,fm)=P(f1,f2,f3,,fm)P(ck)P(f1,f2,f3,,fmck)(k=1,2,3,,n)

由于都要除以 P ( f 1 , f 2 , f 3 , ⋅ ⋅ ⋅ , f m ) P(f_{1}, f_{2}, f_{3}, \cdot \cdot \cdot, f_{m}) P(f1,f2,f3,,fm),故原公式简化为:

P ( c k ∣ f 1 , f 2 , f 3 , ⋅ ⋅ ⋅ , f m ) = P ( c k ) P ( f 1 , f 2 , f 3 , ⋅ ⋅ ⋅ , f m ∣ c k ) P(c_{k}|f_{1}, f_{2}, f_{3}, \cdot \cdot \cdot, f_{m}) = P(c_{k})P(f_{1}, f_{2}, f_{3}, \cdot \cdot \cdot, f_{m}|c_{k}) P(ckf1,f2,f3,,fm)=P(ck)P(f1,f2,f3,,fmck)

各个特征属性独立,则公式变为:

P ( c k ∣ f 1 , f 2 , f 3 , ⋅ ⋅ ⋅ , f m ) = P ( c k ) P ( f 1 ∣ c k ) P ( f 2 ∣ c k ) P ( f 3 ∣ c k ) ⋅ ⋅ ⋅ P ( f m ∣ c k ) = P ( c k ) ∏ j = 1 m P ( f j ∣ c k ) P(c_{k}|f_{1}, f_{2}, f_{3}, \cdot \cdot \cdot, f_{m})=P(c_{k})P(f_{1}|c_{k})P(f_{2}|c_{k})P(f_{3}|c_{k})\cdot \cdot \cdot P(f_{m}|c_{k})=P(c_{k})\prod_{j=1}^{m}P(f_{j}|c_{k}) P(ckf1,f2,f3,,fm)=P(ck)P(f1ck)P(f2ck)P(f3ck)P(fmck)=P(ck)j=1mP(fjck)

而所要求的就是arg max P ( c k ∣ f 1 , f 2 , f 3 , ⋅ ⋅ ⋅ , f m ) P(c_{k}|f_{1}, f_{2}, f_{3}, \cdot \cdot \cdot, f_{m}) P(ckf1,f2,f3,,fm),不过针对离散情况,只要求出各个 P ( f j ∣ c k ) P(f_{j}|c_{k}) P(fjck)就行,但是面对连续值,可以使用高斯分布来求值,高斯函数如下:

P ( x i ∣ c ) = 1 2 π σ 2 e x p ( − ( x i − μ ) 2 2 σ 2 ) P(x_{i}|c)=\frac{1}{\sqrt{2\pi\sigma^{2}}}exp(-\frac{(x_{i}-\mu )^{2}}{2\sigma ^{2}}) P(xic)=2πσ2 1exp(2σ2(xiμ)2)

而关键是要求解公式中的 μ , σ 2 \mu,\sigma^{2} μ,σ2,可行的途径就是使用极大似然估计法(频率学派的方式,他们认为世界是确定的,有一个本体,这个本体的真值不变,而我们的目标是要找到这个真值或真值所在的范围),所以高斯函数中的 μ , σ 2 \mu,\sigma^{2} μ,σ2是可以求解的。

极大似然估计(Maximum Likelihood Estimation, MLE)

参数 μ , σ 2 \mu,\sigma^{2} μ,σ2的似然函数记作 L ( μ , σ 2 ) L(\mu,\sigma^{2}) L(μ,σ2),表示了m个样本 X 1 , X 2 , X 3 , ⋅ ⋅ ⋅ , X m X_{1}, X_{2}, X_{3}, \cdot \cdot \cdot, X_{m} X1,X2,X3,,Xm在特征 c k c_{k} ck上的联合概率分布:

L ( μ , σ 2 ) = ∏ j = 1 m P ( x i j ; μ , σ 2 ) = ∏ j = 1 m 1 2 π σ 2 e x p ( − ( x i j − μ ) 2 2 σ 2 ) L(\mu,\sigma^{2})=\prod_{j=1}^{m}P(x_{i}^{j};\mu,\sigma^{2})=\prod_{j=1}^{m}\frac{1}{\sqrt{2\pi\sigma^{2}}}exp(-\frac{(x_{i}^{j}-\mu )^{2}}{2\sigma ^{2}}) L(μ,σ2)=j=1mP(xij;μ,σ2)=j=1m2πσ2 1exp(2σ2(xijμ)2)

其中 x i j x_{i}^{j} xij表示的是第 j j j个样本的第 i i i个特征,为了方便求解,会在两边添加对数,可得:

l n L ( μ , σ 2 ) = l n ∏ j = 1 m 1 2 π σ 2 e x p ( − ( x i j − μ ) 2 2 σ 2 ) lnL(\mu,\sigma^{2})=ln\prod_{j=1}^{m}\frac{1}{\sqrt{2\pi\sigma^{2}}}exp(-\frac{(x_{i}^{j}-\mu )^{2}}{2\sigma ^{2}}) lnL(μ,σ2)=lnj=1m2πσ2 1exp(2σ2(xijμ)2)

化简可得:

l n L ( μ , σ 2 ) = − n 2 l n 2 π − n 2 l n σ 2 − 1 2 σ 2 ∑ i = 1 m ( x i j − μ ) 2 lnL(\mu,\sigma^{2})=-\frac{n}{2}ln2\pi-\frac{n}{2}ln\sigma^{2}-\frac{1}{2\sigma^{2}}\sum_{i=1}^{m}(x_{i}^{j}-\mu )^{2} lnL(μ,σ2)=2nln2π2nlnσ22σ21i=1m(xijμ)2

分别对 μ , σ 2 \mu,\sigma^{2} μ,σ2求偏导可得:

∂ l n L ( μ , σ 2 ) ∂ μ = 1 σ 2 ∑ i = 1 m ( x i j − μ ) = 0 \frac{\partial lnL(\mu,\sigma^{2})}{\partial\mu } =\frac{1}{\sigma^{2}}\sum_{i=1}^{m}(x_{i}^{j}-\mu )=0 μlnL(μ,σ2)=σ21i=1m(xijμ)=0

∂ l n L ( μ , σ 2 ) ∂ σ 2 = − 1 2 σ 2 ∑ i = 1 m ( 1 − ( x i j − μ ) 2 2 σ 2 ) ) = 0 \frac{\partial lnL(\mu,\sigma^{2})}{\partial\sigma^{2} } =-\frac{1}{2\sigma^{2}}\sum_{i=1}^{m}(1- \frac{(x_{i}^{j}-\mu )^{2}}{2\sigma^{2}}) )=0 σ2lnL(μ,σ2)=2σ21i=1m(12σ2(xijμ)2))=0

求解有:

μ = 1 m ∑ i = 1 m x i j \mu=\frac{1}{m}\sum_{i=1}^{m}x_{i}^{j} μ=m1i=1mxij

σ 2 = 1 m ∑ i = 1 m ( x i j − μ ) 2 \sigma^{2}=\frac{1}{m}\sum_{i=1}^{m}(x_{i}^{j}-\mu )^{2} σ2=m1i=1m(xijμ)2

其实就是求某个类别对应每个特征的平均值(mean)和方差(variance),有了参数 μ , σ 2 \mu,\sigma^{2} μ,σ2,就可以很容易估计第 i i i个特征的分布,从而求解 x i x_{i} xi的概率。

例3

有一些鸢尾花数据,总共有150行,其中特征有四个,分别是萼片的长度,萼片的宽度,花瓣的长度,花瓣的宽度,类别有三个,分别是setosa、versicolor和virginica,然后给你一组待预测数据[3.1, 4.4, 2.1, 3.1],估计它属于哪个类?(样本地址:https://download.youkuaiyun.com/download/zhuqiang9607/10764313)

代码:

import pandas as pd
from sklearn.naive_bayes import GaussianNB

data = pd.read_csv()
class_features = ["Sepal.Length","Sepal.Width","Petal.Length","Petal.Width"]
X_train = data[class_features]
y_train = data["Species"]
gnb = GaussianNB()
gnb.fit(X_train, y_train)
print (gnb.predict(X_test))

如果想深入地了解高斯贝叶斯的代码实现,可以访问github进行下载:https://github.com/AutumnBoat/MachineLearning/blob/master/GaussianNaiveBayes.ipynb

<think>好的,我现在需要回答用户关于头歌平台上的朴素贝叶斯分类器实验的问题。用户可能是在做实验时遇到了困难,需要解析或者答案。首先,我要回顾朴素贝叶斯的基本原理,确保自己理解正确。根据提供的引用[1],朴素贝叶斯是基于贝叶斯定理和特征条件独立假设的分类算法,常用于文本分类、垃圾邮件过滤等。 接下来,用户提到的头歌平台实验可能涉及MultinomialNB类的使用,引用[2]提到fit和predict函数的功能。因此,实验可能要求学员实现数据预处理、模型训练和预测的步骤。我需要考虑实验中常见的任务,比如数据加载、特征提取(比如文本分类中的TF-IDF或词袋模型)、处理缺失值、模型训练与评估等。 用户可能需要具体的代码示例或步骤解析。例如,在数据预处理阶段,可能需要将文本转换为数值特征,使用CountVectorizer或TfidfTransformer。然后,应用MultinomialNB进行分类。此外,实验可能涉及参数调整,比如平滑参数alpha的设置,或者评估指标如准确率、混淆矩阵的计算。 另外,需要注意头歌平台可能有特定的代码结构或输入输出要求,比如需要补全部分代码块,或者按照特定格式输出结果。虽然无法提供直接的实验答案,但可以指导正确的实现方法,比如如何调用fit和predict方法,如何处理多项式分布的数据(适用于离散特征,如词频)。 可能的问题点包括:特征的条件独立性假设是否合理,如何处理连续型数据(可能需要高斯朴素贝叶斯),以及拉普拉斯平滑的作用。在实验中,正确应用这些概念是关键。例如,在代码中添加平滑参数防止零概率问题。 总结回答结构时,应先解释朴素贝叶斯的原理,然后分步骤说明实验可能涉及的关键环节,并给出代码示例,同时提醒注意事项和常见错误。最后,生成相关问题帮助用户进一步理解。</think>### 头歌平台朴素贝叶斯分类器实验解析 #### 1. **实验核心目标** 头歌平台的朴素贝叶斯实验通常围绕以下内容展开: - **数据预处理**:文本特征提取(如词频统计、TF-IDF转换) - **模型训练**:调用`MultinomialNB`类的`fit`函数,学习特征与标签的联合概率分布 - **模型预测**:使用`predict`函数对新样本进行分类 - **性能评估**:计算准确率、召回率、F1值等指标 #### 2. **关键代码实现** ```python from sklearn.naive_bayes import MultinomialNB from sklearn.feature_extraction.text import CountVectorizer # 示例文本数据集 texts = ["机器学习 朴素贝叶斯 分类器", "垃圾邮件 检测 朴素贝叶斯", "文本分类 算法"] labels = [1, 0, 1] # 假设1为技术类,0为垃圾类 # 文本向量化(词频统计) vectorizer = CountVectorizer() X = vectorizer.fit_transform(texts) # 模型训练(注意alpha平滑参数) model = MultinomialNB(alpha=1.0) model.fit(X, labels) # 预测新样本 new_text = ["朴素贝叶斯 应用 场景"] X_new = vectorizer.transform(new_text) print(model.predict(X_new)) # 输出预测标签 ``` #### 3. **实验常见问题** - **特征独立性假设**:实验中需验证特征工程是否符合独立性假设[^1] - **零概率问题**:通过`alpha`参数实现拉普拉斯平滑,避免未出现特征导致概率为0 - **数据分布类型**:离散特征用`MultinomialNB`,连续特征需用`GaussianNB` - **评估指标**:头歌平台可能要求输出特定格式的准确率或混淆矩阵 #### 4. **实验注意事项** - 严格匹配输入输出格式(如矩阵维度、小数点位数) - 文本数据需统一转换为小写并去除停用词 - 多项式朴素贝叶斯适用于**词频统计**场景(如实验中的文本分类) ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值