超易懂!贝叶斯分类器原理
概率图系列
1.贝叶斯分类器
先验概率:没有任何观测值时候,完全根据经验来判断的概率
假设训练集一共有M个样本,N类。其中c类所占类别为ncn_cnc条,那么我们可以得到以下的先验概率:
对于c类别:P(c)=ncM对于c类别:P(c) = \frac{n_c}{M} 对于c类别:P(c)=Mnc
后验概率:观测了某个对象,该对象为某个类别的概率
假设我们观测了一个对象x,那么这个对象为c类别的概率为
P(c∣x)P(c|x) P(c∣x)
这个我们称之为后验概率
类条件概率:训练集中类C中出现X的概率
P(x∣c)P(x|c) P(x∣c)
注意,后验概率P(c∣x)P(c|x)P(c∣x)和类条件概率P(x∣c)P(x|c)P(x∣c)中的x
是不一致的。值是一样,含义是不一样的。前者为预测的数据,后者为训练集中的数据。
核心公式:贝叶斯公式
P(c∣x)=P(x,c)P(c)=P(x∣c)⋅P(c)P(x)P(c|x) = \frac{P(x,c)}{P(c)} = \frac{P(x|c)\cdot P(c)}{P(x)} P(c∣x)=P(c)P(x,c)=P(x)P(x∣c)⋅P(c)
P(c∣x)P(c|x)P(c∣x)表示x被分类成C的概率(后验概率),P(x,c)P(x,c)P(x,c)表示x和c同时出现的联合概率,P(c)P(c)P(c)表示C类别在所有类别的概率(先验概率)。
P(x)P(x)P(x)表示样本x
的全概率,所有类别中出现样本x
的概率之和。
P(x)=∑i所有类别P(x∣ci)⋅P(ci)P(x) = \sum_i^{所有类别} P(x|c_i)\cdot P(c_i) P(x)=i∑所有类别P(x∣ci)⋅P(ci)
对于P(c)P(c)P(c),是可以通过训练集中每个类别的比例得到的,是不变的。
对于P(x)P(x)P(x),**在同一样本中是一样的。为什么要强调“同一样本中是一样”**的呢?
因为对于一条样本x
,我们可以得到P(c1∣x),P(c2∣x),...,P(cn∣x)P(c_1|x),P(c_2|x),...,P(c_n|x)P(c1∣x),P(c2∣x),...,P(cn∣x),在计算这些概率时,因为类别不同,它们的分子P(x∣ci)P(x|c_i)P(x∣ci)和P(ci)P(c_i)P(ci)是不同的。但。是分母P(x)P(x)P(x)是一定相同的,因为我们在计算时,**样本x
**的所有特征都是不会变的!既然特征不会变,P(x)P(x)P(x)也就都是一样的。
我们正是通过贝叶斯公式构建贝叶斯分类器进行分类,对于贝叶斯分类原则,通常有两种分类方式:最小错误概率分类、最小损失风险分类。
最小错误概率分类:
假设一共有N个类别,要预测的变量为x
。j
为假定x
最终分类的类别,i
为假定x
当前分类的类别。注意:j
不一定是x
的真实类别,这只是假定x
在分类器中的最终分类出来的类别。
定义如下规则:
λji={0j=i1j!=i\lambda_{ji} = \begin{cases} 0&j=i\\ 1&j!=i \end{cases} λji={01j=ij!=i
那么对于x
的每一种分类情况,我们定义一个错误概率PjP_jPj
(可以理解为,假定x
最终分类成j
类别,那么这时的对于j
类别的错误概率PjP_jPj就为其他类别的类条件概率加合)
Pj=∑i=1NλjiP(ci∣x)P_j = \sum_{i=1}^N\lambda_{ji} P(c_i|x) Pj=i=1∑NλjiP(ci∣x)
我们肯定希望错误概率PPP最小的类别作为判别类别,因此就有
j=argminj=1,...,NPjj = \underset{j = 1,...,N}{argmin}P_j j=j=1,...,NargminPj
做一个简单的变换
j=argminj=1,...,NPj=argminj=1,...,N(1−P(cj∣x))=argmaxj=1,...,N(P(cj∣x))j=\underset{j = 1,...,N}{argmin}P_j\\ = \underset{j = 1,...,N}{argmin}(1-P(c_j|x))\\ =\underset{j = 1,...,N}{argmax}(P(c_j|x)) j=j=1,...,NargminPj=j=1,...,Nargmin(1−P(cj∣x))=j=1,...,Nargmax(P(cj∣x))
因此,在所有的P(c∣x)P(c|x)P(c∣x)中,将x
分到P(c∣x)P(c|x)P(c∣x)最大的类别中。下面是分类流程:
假设训练集为D,一共有N个类别
最小危险风险分类:
假设一共有M条样本(训练集),N个类别。定义如下的分类损失λji\lambda_{ji}λji
λji\lambda_{ji}λji |
i =1
|
i =2
|
i =3
|
…… |
i =N
|
---|---|---|---|---|---|
j =1
|
a11a_{11}a11 | a12a_{12}a12 | a13a_{13}a13 | a1Na_{1N}a1N | |
j =2
|
a21a_{21}a21 | a22a_{22}a22 | a23a_{23}a23 | a2Na_{2N}a2N | |
j =3
|
a31a_{31}a31 | a32a_{32}a32 | a33a_{33}a33 | a3Na_{3N}a3N | |
…… | |||||
j =N
|
a41a_{41}a41 | a42a_{42}a42 | a43a_{43}a43 | a4Na_{4N}a4N |
那么对于x
的每一种分类情况,我们定义一个风险损失RjR_jRj
Rj=∑i=1NλjiP(ci∣x)R_j = \sum_{i=1}^N\lambda_{ji} P(c_i|x) Rj=i=1∑NλjiP(ci∣x)
我们肯定希望风险最小的类别作为判别类别,因此就有
j=argminj=1,...,NRjj = \underset{j = 1,...,N}{argmin}R_j j=j=1,...,NargminRj
看到这里,大家就会发现:最小错误概率分类和最小危险风险分类好像!
答案是:最小错误概率分类是最小危险风险分类的一个特例。原因是λji\lambda_{ji}λji的取值
在最小错误概率分类中,λji\lambda_{ji}λji为
λij={0i=j1i!=j\lambda_{ij} = \begin{cases} 0&i=j\\ 1&i!=j \end{cases} λij={01i=ji!=j
换成表格的形式
λji\lambda_{ji}λji |
i =1
|
i =2
|
i =3
|
…… |
i =N
|
---|---|---|---|---|---|
j =1
|
1 | 0 | 0 | 0 | 0 |
j =2
|
0 | 1 | 0 | 0 | 0 |
j =3
|
0 | 0 | 1 | 0 | 0 |
…… | 0 | 0 | 0 | 1 | 0 |
j =N
|
0 | 0 | 0 | 1 | 1 |
这样的话,最小危险风险Rj=∑i=1NλjiP(ci∣x)R_j = \sum_{i=1}^N\lambda_{ji} P(c_i|x)Rj=∑i=1NλjiP(ci∣x)中的值就可以由纯概率组成,不会受到λ\lambdaλ的干扰,因此我将其称作为最小错误概率PjP_jPj
除此之外,还有什么不同呢?当然有了!
最小错误概率分类之所以被称为最小错误概率分类,也是因为它只需要计算所有的P(c∣x)P(c|x)P(c∣x)然后取其中最大的一个就可以了。
而最小危险风险分类,则需要在计算所有的P(c∣x)P(c|x)P(c∣x)的基础上,再根据公式计算风险,然后取其中的最小。
因此我们可以得到很相似的流程图:
总结:贝叶斯的分类流程很简单,我们还需要掌握的是上述流程图中的**“根据贝叶斯公式训练出贝叶斯分类器”**。
由于“最小错误概率”分类最为常用,因此下面的贝叶斯训练均以“最小错误概率”分类为分类准则。
训练原理:
贝叶斯公式:
P(c∣x)=P(x,c)P(c)=P(x∣c)⋅P(c)P(x)P(c|x) = \frac{P(x,c)}{P(c)} = \frac{P(x|c)\cdot P(c)}{P(x)} P(c∣x)=P(c)P(x,c)=P(x)P(x∣c)⋅P(c)
由贝叶斯公式我们可以看到,想要求P(c∣x)P(c|x)P(c∣x),就必须知道P(x∣c),P(c),P(x)P(x|c),P(c),P(x)P(x∣c),P(c),P(x)
其中P(c)P(c)P(c)为先验概率,而对于P(x)P(x)P(x),在预测时,对于每一条样本(预测数据)来说,在**“同一样本(预测数据)中”**是不变的。既然是不变的,那么在比较样本x
的P(c1∣x),P(c2∣x),...,P(cn∣x)P(c_1|x),P(c_2|x),...,P(c_n|x)P(c1∣x),P(c2∣x),...,P(cn∣x)时,就可以简化成比较P(x∣c1)∗P(c1),P(x∣c2)∗P(c2),...,P(x∣cn)∗P(cn)P(x|c_1)*P(c_1),P(x|c_2)*P(c_2),...,P(x|c_n)*P(c_n)P(x∣c1)∗P(c1),P(x∣c2)∗P(c2),...,P(x∣cn)∗P(cn)
因此我们想要得到具体的分类,就必须去估计P(x∣c)P(x|c)P(x∣c),这也正是贝叶斯分类器要训练的东西!
首先回忆以下P(x∣c)P(x|c)P(x∣c)是什么?
是类条件概率!那就可以理解为C类别上的X样本
那我们假设C类别上的X样本服从某种分布。有了分布,我们就可以得到对应的概率。
若这样的分布是离散的:则P(x∣c)P(x|c)P(x∣c)就为
P(x∣c)=Dc,xDcP(x|c) =\frac{D_{c,x}}{D_c} P(x∣c)=DcDc,x
其中DcD_cDc 是c
类别的样本集合, Dc,xD_{c,x}Dc,x是在c
类别的样本集合中,x的样本的个数。
若这样的分布是连续的呢?
那么现在有一个尴尬的问题,就是我们假设了这个分布,但是不知道这个分布的具体参数是什么,有了参数,我们才能得到准确的概率密度函数。那么就要进行参数估计(这也是贝叶斯分类器在训练时真正训练的东西,训练分布的参数取值)!
因此贝叶斯分类中采取了一个十分重要的参数估计原则:最大似然估计
最大似然估计:
x
在C类别上是连续的,假设这个分布的概率密度函数为f(x,θ)f(x,\theta)f(x,θ),θ\thetaθ是未知参数。
则x
的似然函数为:
L(θ)=L(x;θ)=f(x,θ)L(\theta) = L(x;\theta) = f(x,\theta) L(θ)=L(x;θ)=f(x,θ)
若存在θ^=θ^(x)∈I(I是θ可能的取值范围)\hat{\theta} = \hat{\theta}(x) \in I(I是\theta可能的取值范围)θ^=θ^(x)∈I(I是θ可能的取值范围),使
L(θ^)=maxf(x,θ)L(\hat{\theta}) = maxf(x,\theta) L(θ^)=maxf(x,θ)
则称θ^(x)\hat{\theta}(x)θ^(x)为参数θ\thetaθ的最大似然估计值。
比如,假设该分布为高斯分布,那么θ=[μ,σ]\theta = [\mu,\sigma]θ=[μ,σ],L(θ)=L(μ,σ)L(\theta) = L(\mu,\sigma)L(θ)=L(μ,σ),估计的就是μ\muμ和σ\sigmaσ
在我们得到了参数θ^\hat{\theta}θ^后,我们会把f(x,θ^)f(x,\hat{\theta})f(x,θ^)作为P(x∣c)P(x|c)P(x∣c),这样就可以得到P(c∣x)P(c|x)P(c∣x)的值啦
朴素贝叶斯
不知道大家注意到一个点没有,我在上文的描述通篇都在用“样本X”。这是为了让大家更好的理解,而使用的一个概念化的表达。在实际应用中,一个样本x
肯定包含多个特征,也就是多维度的。那么贝叶斯公式中
P(x∣c)⋅P(c)P(x)\frac{P(x|c)\cdot P(c)}{P(x)} P(x)P(x∣c)⋅P(c)
中的P(x∣c),P(x)P(x|c),P(x)P(x∣c),P(x)到底要怎么计算呢?
假设样本x
有m个特征:x1,x2,...,xmx_1,x_2,...,x_mx1,x2,...,xm
那么我们就会有P(x1∣c),P(x2∣c),...,P(xm∣c)P(x_1|c),P(x_2|c),...,P(x_m|c)P(x1∣c),P(x2∣c),...,P(xm∣c),如果m个特征之间有相互关联的关系,那么它们与P(x∣c)P(x|c)P(x∣c)的计算会很复杂。
因此定义一个假设:假设所有特征相互独立
既然独立,那那么P(x∣c)P(x|c)P(x∣c)就可以表示为 (P(x)同理推P(x)同理推P(x)同理推):
∏i=1mP(xi∣c)\prod_{i=1}^{m}P(x_i|c) i=1∏mP(xi∣c)
因此贝叶斯公式就变为
P(c∣x)=P(c)P(x)⋅∏i=1mP(xi∣c)P(c|x) = \frac{ P(c)}{P(x)}\cdot \prod_{i=1}^{m}P(x_i|c) P(c∣x)=P(x)P(c)⋅i=1∏mP(xi∣c)
同理,在参数估计时
离散:
P(xi∣c)=Dc,xiDcP(x∣c)=∏i=1mP(xi∣c)\\P(x_i|c) =\frac{D_{c,x_i}}{D_c}\\ P(x|c) =\prod_{i=1}^{m}P(x_i|c) P(xi∣c)=DcDc,xiP(x∣c)=i=1∏mP(xi∣c)
连续:
L(θ)=L(x1,...,xm;θ)=∏i=1mf(xi;θ)L(θ^)=max∏i=1mf(xi;θ)L(\theta) = L(x_1,...,x_m;\theta) = \prod_{i=1}^m f(x_i;\theta)\\ L(\hat{\theta}) = max\prod_{i=1}^mf(x_i;\theta) L(θ)=L(x1,...,xm;θ)=i=1∏mf(xi;θ)L(θ^)=maxi=1∏mf(xi;θ)
我们称在所有特征相互独立假设基础上的贝叶斯为朴素贝叶斯。
拉普拉斯修正
有没有这一种情况,在预测变量A
中,有一个特征AiA_iAi,其取值aia_iai未在训练集中出现过。那么此时P(Ai∣c)=0P(A_i|c)=0P(Ai∣c)=0
这样的不合理的!因此我们要对上面的公式进行修正,一般采用“拉普拉斯修正”
P(c)=Dc+1D+NP(c) = \frac{D_c+1}{D+N} P(c)=D+NDc+1
DcD_cDc表示C类在训练集中的数量,DDD表示训练集的总数量,N
表示训练集DDD中可能的类别数
P(xi∣c)=Dc,xi+1Dc+NiP(x_i|c) = \frac{D_{c,x_i}+1}{D_c +N_i} P(xi∣c)=Dc+NiDc,xi+1
NiN_iNi表示第iii个特征可能的取值数。
拉普拉斯修正避免了因训练集样本不充分而导致概率估值为零的问题, 并且在训练集变大时,修正过程所引入的先验(prior)的影响也会逐渐变得可忽 略,使得估值渐趋向于实际概率值。
Sklearn
中使用贝叶斯分类器
高斯朴素贝叶斯
GaussianNB
,假设分布为高斯分布。
P(xi∣c)=12πσc2e−(xi−μc)22σc2\large P(x_i|c) = \frac{1}{\sqrt{2\pi\sigma^2_{c}}}e^{\frac{-(x_i-\mu_c)^2}{2\sigma^2_c}} P(xi∣c)=2πσc21e2σc2−(xi−μc)2
参数μc,σc\mu_c,\sigma_cμc,σc使用最大似然法估计
from sklearn import datasets#选取iris数据集
iris = datasets.load_iris()
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
#训练
model = gnb.fit(iris.data, iris.target)
#预测
y_pre = model.predict(iris.data)
多项式朴素贝叶斯
MultionmialNB
服从多项分布数据的朴素贝叶斯算法,也是用于文本分类(这个领域中数据往往以词向量表示,尽管在实践中TF-IDF
向量在预测时表现良好)的两大经典朴素贝叶斯算法之一。
分布参数由每类 CCC 的$\theta_C =(\theta_{c1},…,\theta_{cn}) $ 向量决定, 式中n是特征的数量(对于文本分类,是词汇量的大小) θci\theta_{ci}θci 是样本中属于类c
中特征 i
概率 P(xi,∣c)P(x_i,|c)P(xi,∣c) 。
参数θc\theta_cθc使用平滑过的最大似然估计法来估计,即相对频率计数:
θci^=Nci+αNc+αn\hat{\theta_{ci}} = \frac{N_{ci}+\alpha}{N_c+\alpha n} θci^=Nc+αnNci+α
Nci=∑x∈DxiN_{ci} = \sum_{x\in D}x_iNci=∑x∈Dxi 是训练集D
中特征i
在类c
中出现的次数,Nc=∑i=1nNciN_c = \sum_{i=1}^{n}N_{ci}Nc=∑i=1nNci 是类c
中出现所有特征的计数总和。
先验平滑因子α>=0\alpha >=0α>=0 为在学习样本中没有出现的特征而设计,以防在将来的计算中出现0概率输出。 把 α=1\alpha= 1α=1被称为拉普拉斯平滑(Lapalce smoothing
),而 α<1\alpha <1α<1被称为Lidstone
平滑方法(Lidstone smoothing
)。
伯努利朴素贝叶斯
BernoulliNB
实现了用于多重伯努利分布数据的朴素贝叶斯训练和分类算法,即有多个特征,但每个特征 都假设是一个二元 (Bernoulli, boolean
) 变量。 因此,这类算法要求样本以二元值特征向量表示;如果样本含有其他类型的数据, 一个 BernoulliNB
实例会将其二值化(取决于 binarize
参数)。
伯努利朴素贝叶斯的决策规则基于:
P(xi∣c)=P(i∣c)xi+(1−P(i∣c))(1−xi)P(x_i|c) = P(i|c)x_i+(1-P(i|c))(1-x_i) P(xi∣c)=P(i∣c)xi+(1−P(i∣c))(1−xi)
与多项分布朴素贝叶斯的规则不同 伯努利朴素贝叶斯明确地惩罚类 c
中没有出现作为预测因子的特征 i
,而多项分布分布朴素贝叶斯只是简单地忽略没出现的特征。
在文本分类的例子中,统计词语是否出现的向量(word occurrence vectors)(而非统计词语出现次数的向量(word count vectors))可以用于训练和使用这个分类器。 BernoulliNB
可能在一些数据集上表现得更好,特别是那些更短的文档。 如果时间允许,建议对两个模型都进行评估。
补充朴素贝叶斯
ComplementNB
实现了补充朴素贝叶斯(CNB)算法。CNB是标准多项式朴素贝叶斯(MNB)算法的一种改进,特别适用于不平衡数据集。具体来说,CNB使用来自每个类的补数的统计数据来计算模型的权重。CNB的发明者的研究表明,CNB的参数估计比MNB的参数估计更稳定。此外,CNB在文本分类任务上通常比MNB表现得更好(通常有相当大的优势)。计算权重的步骤如下:
具体原理和公式不赘述,可以看看sklearn的官方文档。
超易懂!贝叶斯分类器原理相关推荐
- 贝叶斯分类器原理——学习笔记
贝叶斯分类器原理 简介 一.逆概率推理与贝叶斯公式 1.确定性推理与概率推理 2.贝叶斯公式 二.贝叶斯分类的原理 三.概率估计 1.先验概率的估计 2.类条件概率的估计 四.贝叶斯分类的错误率 五. ...
- 朴素贝叶斯分类器原理解析与python实现
贝叶斯分类器是以贝叶斯原理为基础的分类器的总称,是一种生成式模型,朴素贝叶斯分类器是其中最简单的一种.要高明白贝叶斯分类器的原理,首先得明白一些基本概念. 预备知识 基本概念 先验概率:根据统计/经验 ...
- 朴素贝叶斯分类器原理介绍及python代码实现
目录 频率学派和贝叶斯学派 朴素贝叶斯分类器 python实现朴素贝叶斯分类器 频率学派和贝叶斯学派 说起概率统计,不得不提到频率学派和贝叶斯学派,通过对概率的不同理解而演变的两个不同的概率学派. 频 ...
- 【机器学习】朴素贝叶斯分类器原理(理论+图解)
- 机器学习:伯努利朴素贝叶斯分类器(原理+python实现)
伯努利朴素贝叶斯分类器主要用于文本分类,下面我们以一个具体的例子,来讲述下伯努利朴素贝叶斯的原理和实现逻辑. 具体例子: 已知我们有八个句子以及每个句子对应的类别,即中性或侮辱性.那么再给出一个句子, ...
- 贝叶斯分类器算法及案例详解
作者:vicky_siyu 致谢:小龙快跑jly, 巧儿.克力,Esther_or so,雨佳小和尚,老实憨厚的叶子 本文是对贝叶斯分类器(包括朴素贝叶斯分类器,半朴素贝叶斯分类器及贝叶斯网络)算法的 ...
- 【数据挖掘】贝叶斯分类 ( 贝叶斯分类器 | 贝叶斯推断 | 逆向概率 | 贝叶斯公式 | 贝叶斯公式推导 | 使用贝叶斯公式求逆向概率 )
文章目录 I . 贝叶斯分类器 II . 贝叶斯推断 ( 逆向概率 ) III . 贝叶斯推断 应用场景 ( 垃圾邮件过滤 ) IV . 贝叶斯方法 由来 V . 贝叶斯方法 VI . 贝叶斯公式 V ...
- 朴素贝叶斯分类器的python实现
徒手实现一个贝叶斯分类器 引子 代码 小结 引子 朴素贝叶斯分类器顾名思义是以贝叶斯公式为基础的分类器,其将后验概率转换为先验概率和不同类的条件概率的乘积,再通过比较不同的类别下该乘积的大小实现分类. ...
- 贝叶斯算法 — 朴素贝叶斯分类器— 过滤垃圾邮件 — 流失用户 — 用户画像
目录 应用 1. 胃疼胃癌 2. 过滤垃圾邮件 朴素贝叶斯分类器 概念介绍 朴素贝叶斯分类器原理 贝叶斯分类器的应用 公式 求得是后验概率,等式右侧为先验概率 贝叶斯定理本质:通过 先验概率 求 后验 ...
最新文章
- 1-2 postman工具简介
- 虚拟化云计算平台Proxmox VE
- R语言文件下载:谁来帮我把这个128个音频下载一下
- 如何使用Microsoft技术栈
- 【赠送】IT技术视频教程,白拿不谢!思科、华为、红帽、数据库、云计算等等
- SAP Spartacus 如何连接到其他系统
- github gists_Eclipse中的Github Gists
- 网络定位-能定位到国家省份市区县街道
- bzoj1975 [Sdoi2010]魔法猪学院 a*+堆
- 嵌入式Linux系统编程学习之二十六多线程概述
- 洛谷P2569 [SCOI2010]股票交易
- 关于ajax的content-download时间过慢问题的解决方案与思考
- ERROR: cuvid requested, but not all dependencies are satisfied: ffnvcodec
- Configuring CODESYS
- ASP.NET MVC入门
- Windows和Linux入侵痕迹清理
- Java关键字详解-配视频讲解链接(附带一些面试题)
- 阿里云服务器Intel Xeon Platinum 8269CY(Cascade Lake)处理器CPU性能评测
- JavaScript 实现textarea限制输入字数, 输入框字数实时统计更新,输入框实时字数计算移动端bug解决...
- 垂直居中对齐四种样式
热门文章
- 用pyquery5行代码爬取百度热点新闻
- Windows下Tomcat的搭建步骤
- BP神经网络隐藏层单元数的选择--(1)
- 轻信别人可以“包装”,规避限购政策购房,会有那些后果?
- Python 数字黑洞
- 彻底卸载 Visual Studio 2019【完整版】
- 09年中国网络广告:淘宝市场份额直逼新浪
- 苹果youtube无法连接网络_苹果再度“翻车”!这次AppleStore无法下载软件:遇网络故障...
- html5 oa首页免费,免费的在线oa
- 机器学习与分布式机器学习_机器学习应运而生