贝叶斯分类器

本文介绍了贝叶斯决策论的基础概念,包括贝叶斯判定准则及其应用,并详细阐述了贝叶斯分类器的实现原理。同时,文章还对比了几种常见的贝叶斯分类器,如高斯、多项式、伯努利等,并提供了实际应用案例。

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

1.贝叶斯决策论

贝叶斯决策论(Bayesian decision theory)是概率框架下实施决策的基本方法。

对于分类任务,在所有相关概率都已知的理想情形下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记。

贝叶斯判定准则(Bayes decision rule):

为最小化总体风险,只需在每个样本上选择那个能使条件风险R(c|x) 最小的类别标记,即

此时,h^{*} 称为贝叶斯最优分类器(Bayes optimal classifier),与之对应的总体风险R(h^{*}) 称为贝叶斯风险(Bayes risk)。

1-R(h^{*}) 反映了分类器所能达到的最好性能,即通过机器学习所能产生的模型精度的理论上限。

计算条件风险R(c|x)的计算公式为

若目标是最小化分类错误率,则误判损失\lambda_{ij}对应为 0/1损失,即

于是最小化错误率的贝叶斯最优分类器为

即对每个样本x,选择能使后验概率P(c|x) 最大的类别标记。然而在现实任务中,后验概率P(c|x)难以直接获得。

机器学习所要实现的是基于有限的训练样本集尽可能准确地估计出后验概率P(c|x)。目前,有两种策略:

1)给定x,可通过直接建模P(c|x)来预测c,这样得到的是“判别式模型”(discriminative models);

2) 可先对联合概率分布P(x,c)建模,然后再由此获得P(c|x),这样得到的是“生产式模型”(generative models)。

决策树、BP神经网络、支持向量机等,都可归入判别式模型的范畴。

对生成式模型来说,必然考虑

基于贝叶斯定理,P(c|x)可写成

其中,P(c)是类“先验”(prior)概率;P(x|c)是样本x 相对于类标记c 的类条件概率(class-conditional probability),或称为“似然”(likelihood);P(x)是用于归一化的“证据”(evidence)因子。

对于给定的样本x,证据因子P(x)与类标记无关,因此估计P(c|x)的问题就转化为如何基于训练数据D 来估计先验P(c)和似然P(x|c)

2.多元正态分布的极大似然估计

估计类条件概率的一种常用策略是先假定其具有某种确定的概率分布形式,再基于训练样本对概率分布的参数进行估计。

具体地,记关于类别c 的类条件概率为P(x|c),假设P(x|c)具有确定的形式并且被参数向量\theta_{c} 唯一确定,则我们的任务就是利用训练集D 估计参数\theta_{c}

事实上,概率模型的训练过程就是参数估计(parameter estimation)过程。

此处采用频率主义学派的极大似然估计,根据数据采样来估计概率分布参数。

D_{c} 表示训练集D 中的第c 类样本组成的集合,假设这些样本是独立同分布的,则参数\theta_{c} 对于数据集D_{c}的似然是对\theta_{c} 进行极大似然估计,就是去寻找最大化似然P(D_{c}|\theta_{c})的参数值\hat{\theta}_{c}

直观上看,极大似然估计是试图在\theta_{c}所有可能的取值中,找到一个能使数据出现的“可能性”最大的值。

为了计算的方便,也为了防止连乘操作造成下溢,通常使用对数似然(log-likelihood):

为了方便计算,这里假定log取e为底。

此时参数\theta_{c} 的极大似然估计\hat{\theta}_{c}

现假设x 服从多元正态分布,则p(x|\theta_{c}) =p(x|c) \sim N(u_{c},\sigma _{c}^{2}),那么

                                                          p(x|\theta _{c}) = \frac{1}{\sqrt{2\pi ^{d}|\Sigma _{c}|}}exp(-\frac{1}{2}(x-u_{c})^{T}\Sigma _{c}^{-1}(x-u_{c}))

其中d 表示x的维度,\Sigma _{c}=\sigma _{c}^{2} 为正定协方差矩阵,|\Sigma _{c}|表示\Sigma _{c}的行列式。

将上式带入对数似然函数得

                                                 LL(\theta _{c})= \sum_{x\in D_{C}}ln[ \frac{1}{\sqrt{2\pi ^{d}|\Sigma _{c}|}}exp(-\frac{1}{2}(x-u_{c})^{T}\Sigma _{c}^{-1}(x-u_{c}))]

|D_{c}| = N,

                                                  LL(\theta _{c})= \sum_{i=1}^{N}ln[ \frac{1}{\sqrt{2\pi ^{d}|\Sigma _{c}|}}exp(-\frac{1}{2}(x-u_{c})^{T}\Sigma _{c}^{-1}(x-u_{c}))]

所以只需求出使得对数似然函数LL(\theta _{c})取到最大值的\hat{\mu _{c}} 和\hat{\Sigma _{c}}},也就求出了\hat{\theta}_{c}

(懒得敲了)

 

 

因此,参数\mu _{c}\sigma _{c}^{2} 的极大似然估计为

3。朴素贝叶斯分类器

由贝叶斯定理可知

                                                     h^{*}(x) = argmax_{c\in y}\frac{p(x)p(x|c)}{p(x)} = argmax_{c\in y}p(c)p(x|c)

因此不难发现类条件概率p(x|c)是所有属性上的联合概率,难以从有限的训练样本直接估计而得。为避开这个障碍,朴素贝叶斯分类器采用“属性条件独立性”(attribute conditional independence assumption):对已知类别,假设所有属性相互独立。换言之,假设每个属性独立地对分类结果发生影响。

根据属性条件独立性假设

                                                           .p(x|c) = p(x_{1},x_{2},\cdots ,x_{d}|c) = \prod_{i=1}^{d}p(x_{i}|c)

则朴素贝叶斯分类器的表达式为

                                                  h^{*}(x) = argmax_{c\in y}p(c)p(x|c) = argmax_{c\in y} p(c) \prod_{i=1}^{d}p(x_{i}|c)

对于p(c)

它表示的是样本空间中各类样本所占的比例,根据大数定律,当训练集包含充足的独立同分布样本时,p(c)可通过各类样本出现的频率来进行估计,也即

                                                                                  p(c) = \frac{|D_c|}{|D|}

其中,D表示训练集,|D|表示D中样本数,D_c表示训练集D中第c 类样本组成的集合。|D_c|表示集合D_c中的样本个数。

对于p(x_{i}|c)

1)若样本的第i 个属性取值为连续值:我们假设该属性的取值服从正态分布,也即

其中\mu _{c,i}\sigma _{c,i}^{2}分别是第c 类样本在第i 个属性上取值的均值和方差,正态分布的参数可用极大似然估计法推得。

2)若样本的第i 个属性取值为离散值:同样根据极大似然估计法,我们用频率值作为其概率值的估计值,也即

其中D_{c,x_{i}}表示D_c中在第i 个属性上取值为x_{i} 的样本组成的集合。

为了避免其他属性携带的信息被训练集中未出现的属性值“抹去”(为了防止条件概率p(x|y)出现的概率为0),在估计概率值时通常要进行“平滑”,常用“拉普拉斯修正”。具体来说,令N表示训练集D中可能的类别数,N_{i}表示第i 个属性可能的取值数,则

 

sklearn中高斯分布贝叶斯、多项式贝叶斯、伯努利贝叶斯的区别与应用场景

高斯朴素贝叶斯

GaussianNB实现了运用于分类的高斯朴素贝叶斯算法,特征的可能性(即概率)假设为高斯分布:

from sklearn import datasets
iris = datasets.load_iris()
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
y_pred = gnb.fit(iris.data, iris.target).predict(iris.data)
print("Number of mislabeled points out of a total %d points : %d"
...   % (iris.data.shape[0],(iris.target != y_pred).sum()))
Number of mislabeled points out of a total 150 points : 6
>>> import numpy as np
>>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
>>> Y = np.array([1, 1, 1, 2, 2, 2])
>>> from sklearn.naive_bayes import GaussianNB
>>> clf = GaussianNB()
>>> clf.fit(X, Y)
GaussianNB(priors=None, var_smoothing=1e-09)
>>> print(clf.predict([[-0.8, -1]]))
[1]
>>> clf_pf = GaussianNB()
>>> clf_pf.partial_fit(X, Y, np.unique(Y))
GaussianNB(priors=None, var_smoothing=1e-09)
>>> print(clf_pf.predict([[-0.8, -1]]))
[1]

多项式分布朴素贝叶斯

MultinomialNB实现了服从多项分布数据的朴素贝叶斯算法,也是用于文本分类(这个领域中数据往往以词向量表示,尽管在实践中tf-idf向量在预测时表现良好)的两个经典朴素贝叶斯算法之一。

分布参数由每类y\theta_{y} = (\theta_{y1},\theta_{y2},\cdots,\theta_{yn})向量决定,式中n是特征的数据(对于文本分类,是词汇量的大小),\theta_{yi}是样本中属于类y中特征i概率P(x_{i}|y)

参数\theta_{y}使用平滑过的最大似然估计法来估计,即相对频率计数:

式中N_{yi}=\sum_{x\in T}x_{i}是训练集T中特征i在类y中出现的次数,N_{y}=\sum_{i=1}^{n}N_{yi}是类y中出现所有特征的计算总和。先验平滑因子\alpha \geq 0应用于在学习样本中没有出现的特征,以防止在将来的计算中出现0的概率输出。把\alpha =1被称为拉普拉斯平滑,而\alpha<1被称为Lidstone平滑方法。

>>> import numpy as np
>>> X = np.random.randint(5, size=(6, 100))
>>> y = np.array([1, 2, 3, 4, 5, 6])
>>> from sklearn.naive_bayes import MultinomialNB
>>> clf = MultinomialNB()
>>> clf.fit(X, y)
MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True)
>>> print(clf.predict(X[2:3]))
[3]

补充朴素贝叶斯

ComplementNB实现了多项朴素贝叶斯(CNB)算法,CNB是标准多项式朴素(MNB)算法的一种改进,特征适用于不平衡数据集。具体来说,CNB使用来自每个类的补数的统计数据来计算模型的权重。CNB的参数估计比MNB的参数估计更稳定。此外,CNB在文本分类任务上通常比MNB表现得更好。计算权重的步骤如下:

其中对不在类c中的所有记录j求和,d_{ij}既是计算也是记录ji的tf-idf值,\alpha_{i}是平滑因子,且\alpha = \sum_{i}\alpha_{i}

>>> import numpy as np
>>> X = np.random.randint(5, size=(6, 100))
>>> y = np.array([1, 2, 3, 4, 5, 6])
>>> from sklearn.naive_bayes import ComplementNB
>>> clf = ComplementNB()
>>> clf.fit(X, y)
ComplementNB(alpha=1.0, class_prior=None, fit_prior=True, norm=False)
>>> print(clf.predict(X[2:3]))
[3]

伯努利朴素贝叶斯

BernoulliNB实现了用于多重伯努利分布数据朴素贝叶斯训练和分类算法,即有多个特征,但每个特征都假设是一个二元变量。因此,这类算法要求样本以二元值特征向量表示;如果样本含有其他类型的数据,一个BernoulliNB实例会将其二值化(取决于binarize参数)。

伯努利朴素贝叶斯的决策规则基于:

与多项式分布朴素贝叶斯的规则不同,伯努利朴素贝叶斯明确地惩罚类y中没有出现作为预测因子的特征i,而多项式分布朴素贝叶斯知识简单地忽略没出现的特征。

在文本分类的例子中,词频向量(非词数向量)可能用于训练和由于这个分类器。BernoulliNB可能在一些数据集上可能表现得更好,特征是那些更短的文档。如果时间允许,建议对两个模型都进行评估。

>>> import numpy as np
>>> X = np.random.randint(2, size=(6, 100))
>>> Y = np.array([1, 2, 3, 4, 4, 5])
>>> from sklearn.naive_bayes import BernoulliNB
>>> clf = BernoulliNB()
>>> clf.fit(X, Y)
BernoulliNB(alpha=1.0, binarize=0.0, class_prior=None, fit_prior=True)
>>> print(clf.predict(X[2:3]))
[3]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值