简介
一个贝叶斯网络是一个有向无环图(Directed Acyclic Graph,DAG),由代表变量节点及连接这些节点有向边构成。节点代表随机变量,节点间的有向边代表了节点间的互相关系(由父节点指向其子节点),用条件概率进行表达关系强度,没有父节点的用先验概率进行信息表达。节点变量可以是任何问题的抽象,如:测试值,观测现象,意见征询等。适用于表达和分析不确定性和概率性的事件,应用于有条件地依赖多种控制因素的决策,可以从不完全、不精确或不确定的知识或信息中做出推理,已成功地用于医疗诊断、统计决策、专家系统、学习预测等领域。
训练
使用贝叶斯网络必须知道各个状态之间相关的概率。得到这些参数的过程叫做训练。和训练马尔可夫模型一样,训练贝叶斯网络要用一些已知的数据。比如在训练上面的网络,需要知道一些心血管疾病和吸烟、家族病史等有关的情况。相比马尔可夫链,贝叶斯网络的训练比较复杂,从理论上讲,它是一个NP-complete问题,也就是说,现阶段没有可以在多项式时间内完成的算法。但是,对于某些应用,这个训练过程可以简化,并在计算上高效实现。
特性
1、贝叶斯网络本身是一种不定性因果关联模型。贝叶斯网络与其他决策模型不同,它本身是将多元知识图解可视化的一种概率知识表达与推理模型,更为贴切地蕴含了网络节点变量之间的因果关系及条件相关关系。
2、贝叶斯网络具有强大的不确定性问题处理能力。贝叶斯网络用条件概率表达各个信息要素之间的相关关系,能在有限的、不完整的、不确定的信息条件下进行学习和推理。
3、贝叶斯网络能有效地进行多源信息表达与融合。贝叶斯网络可将故障诊断与维修决策相关的各种信息纳入网络结构中,按节点的方式统一进行处理,能有效地按信息的相关关系进行融合。
对于贝叶斯网络推理研究中提出了多种近似推理算法,主要分为两大类:基于仿真方法和基于搜索的方法。在故障诊断领域里就我们水电仿真而言,往往故障概率很小,所以一般采用搜索推理算法较适合。就一个实例而言,首先要分析使用哪种算法模型:
a.)如果该实例节点信度网络是简单的有向图结构,它的节点数目少的情况下,采用贝叶斯网络的精确推理,它包含多树传播算法,团树传播算法,图约减算法,针对实例事件进行选择恰当的算法;
b.)如果是该实例所画出节点图形结构复杂且节点数目多,我们可采用近似推理算法去研究,具体实施起来最好能把复杂庞大的网络进行化简,然后在与精确推理相结合来考虑。
朴素贝叶斯
对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方法,也就是直接学习出特征输出Y和特征X之间的关系,要么是决策函数 Y = f ( X ) Y=f(X) Y=f(X),要么是条件分布 P ( Y ∣ X ) P(Y|X) P(Y∣X)。但是朴素贝叶斯却是生成方法,也就是直接找出特征输出Y和特征X的联合分布 P ( X , Y ) P(X, Y) P(X,Y),然后用 P ( Y ∣ X ) = P ( X , Y ) / P ( X ) P(Y|X)=P(X, Y)/P(X) P(Y∣X)=P(X,Y)/P(X)得出。
贝叶斯学派的思想可以概括为先验概率+数据=后验概率。也就是说我们在实际问题中需要得到的后验概率,可以通过先验概率和数据一起综合得到。
如果X和Y相互独立,则有条件独立公式:
P
(
X
,
Y
)
=
P
(
X
)
P
(
Y
)
P(X,Y)=P(X)P(Y)
P(X,Y)=P(X)P(Y)
条件概率公式:
P
(
Y
∣
X
)
=
P
(
X
,
Y
)
/
P
(
X
)
P(Y|X)=P(X,Y)/P(X)
P(Y∣X)=P(X,Y)/P(X)
P
(
X
∣
Y
)
=
P
(
X
,
Y
)
/
P
(
Y
)
P(X|Y)=P(X,Y)/P(Y)
P(X∣Y)=P(X,Y)/P(Y)
或者说:
P
(
Y
∣
X
)
=
P
(
X
∣
Y
)
P
(
Y
)
/
P
(
X
)
P(Y|X)=P(X|Y)P(Y)/P(X)
P(Y∣X)=P(X∣Y)P(Y)/P(X)
全概率公式,其中
∑
k
P
(
Y
k
)
=
1
\sum \limits_{k}P(Y_k)=1
k∑P(Yk)=1:
P
(
X
)
=
∑
k
P
(
X
∣
Y
=
Y
k
)
P
(
Y
k
)
P(X)=\sum \limits_{k}P(X|Y=Y_k)P(Y_k)
P(X)=k∑P(X∣Y=Yk)P(Yk)
从上面的公式很容易得出贝叶斯公式:
P ( Y k ∣ X ) = P ( X ∣ Y k ) P ( Y k ) ∑ k P ( X ∣ Y = Y k ) P ( Y k ) P(Yk|X)=P(X|Yk)P(Yk)∑kP(X|Y=Yk)P(Yk) P(Yk∣X)=P(X∣Yk)P(Yk)∑kP(X∣Y=Yk)P(Yk)
朴素贝叶斯模型
假如我们有m个样本,每个样本有n个特征,特征输出有K个类别
{
C
1
,
C
2
,
.
.
.
,
C
K
}
\{C_1, C_2, ..., C_K\}
{C1,C2,...,CK},则分类模型样本是:
(
x
1
(
1
)
,
x
2
(
1
)
,
.
.
.
x
n
(
1
)
)
,
(
x
1
(
2
)
,
x
2
(
2
)
,
.
.
.
x
n
(
2
)
)
,
(
x
1
(
m
)
,
x
2
(
m
)
,
.
.
.
x
n
(
m
)
)
(x_1^{(1)}, x_2^{(1)}, ... x_n^{(1)}), (x_1^{(2)}, x_2^{(2)}, ... x_n^{(2)}), (x_1^{(m)}, x_2^{(m)}, ... x_n^{(m)})
(x1(1),x2(1),...xn(1)),(x1(2),x2(2),...xn(2)),(x1(m),x2(m),...xn(m))
从样本我们可以学习得到朴素贝叶斯的先验分布
P
(
Y
=
C
k
)
(
k
=
1
,
2
,
.
.
.
K
)
P(Y=C_k)(k=1, 2, ... K)
P(Y=Ck)(k=1,2,...K),比较荣誉通过最大似然法求出,得到的
P
(
Y
=
C
k
)
P(Y=C_k)
P(Y=Ck)就是类别
C
k
C_k
Ck在训练集里出现的频数;
然后再学习条件概率分布
P
(
X
=
x
∣
Y
=
C
k
)
=
P
(
X
1
=
x
1
,
X
2
=
x
2
,
.
.
.
X
n
=
x
n
∣
Y
=
C
k
)
P(X=x|Y=C_k)=P(X_1=x_1, X_2=x_2, ...X_n=x_n|Y=C_k)
P(X=x∣Y=Ck)=P(X1=x1,X2=x2,...Xn=xn∣Y=Ck),
但
P
(
X
1
=
x
1
,
X
2
=
x
2
,
.
.
.
X
n
=
x
n
∣
Y
=
C
k
)
P(X_1=x_1, X_2=x_2, ...X_n=x_n|Y=C_k)
P(X1=x1,X2=x2,...Xn=xn∣Y=Ck)是一个有n维的条件分布,很难求出。
朴素贝叶斯模型在这里做了一个大胆的假设,即X的n个维度之间相互独立,这样就可以得出:
P ( X 1 = x 1 , X 2 = x 2 , . . . X n = x n ∣ Y = C k ) = P ( X 1 = x 1 ∣ Y = C k ) P ( X 2 = x 2 ∣ Y = C k ) . . . P ( X n = x n ∣ Y = C k ) P(X_1=x_1, X_2=x_2, ...X_n=x_n|Y=C_k)=P(X_1=x_1|Y=C_k)P(X_2=x_2|Y=C_k)...P(X_n=x_n|Y=C_k) P(X1=x1,X2=x2,...Xn=xn∣Y=Ck)=P(X1=x1∣Y=Ck)P(X2=x2∣Y=Ck)...P(Xn=xn∣Y=Ck)
如果特征之间真是非常不独立的话,那就尽量不要使用朴素贝叶斯模型了,考虑使用其他的分类方法比较好。但是一般情况下,样本的特征之间独立这个条件的确是弱成立的,尤其是数据量非常大的时候。虽然我们牺牲了准确性,但是得到的好处是模型的条件分布的计算大大简化了,这就是贝叶斯模型的选择。
最后回到我们要解决的问题,我们的问题是给定测试集的一个新样本特征 ( x 1 ( t e s t ) , x 2 ( t e s t ) , . . . x n ( t e s t ) ) (x_1^{(test)}, x_2^{(test)}, ... x_n^{(test)}) (x1(test),x2(test),...xn(test)),如何判断它属于哪个类型?
贝叶斯模型通过最大化后验概率来判断分类了。我们只要计算出所有的K个条件概率 P ( Y = C k ∣ X = X ( t e s t ) ) P(Y=C_k|X=X^{(test)}) P(Y=Ck∣X=X(test))然后找出最大的条件概率对应的类别,这就是朴素贝叶斯的预测了。
补充最大似然估计
假设样本 { X 1 , X 2 , . . . , X n } \{X_1, X_2, ..., X_n\} {X1,X2,...,Xn}服从概率密度函数 f θ ( x ) f_θ(x) fθ(x),其中 θ = ( θ 1 , θ 2 , . . . . θ k ) θ=(θ_1,θ_2,....θ_k) θ=(θ1,θ2,....θk)是未知参数。当固定x的时候, f θ ( x ) f_θ(x) fθ(x)就是 θ \theta θ的函数,我们把这个函数称为似然函数,记做 L x ( θ ) L_x(θ) Lx(θ)
似然函数不是概率,是概率密度函数在x固定时候,
θ
\theta
θ的可能性的函数。假设
x
=
(
x
1
,
.
.
.
.
.
x
n
)
x = (x_1,.....x_n)
x=(x1,.....xn)是样本的观测值,那么整体样本的似然函数是:
L
x
(
θ
)
=
∐
i
=
1
n
L
x
i
(
θ
)
L_x(\theta)=\coprod_{i=1}^{n} L_{x_i}(\theta)
Lx(θ)=i=1∐nLxi(θ)
这是 一个关于
θ
\theta
θ的函数,选取使得
L
x
(
θ
)
L_x(\theta)
Lx(θ)最大化的
θ
′
\theta^{'}
θ′作为
θ
\theta
θ的估计量。最大化似然函数,相当于最大化似然函数的对数:
l
x
(
θ
)
=
l
n
(
L
x
(
θ
)
)
l_x(\theta)=ln(L_x(\theta))
lx(θ)=ln(Lx(θ))
一般我们求解似然函数或者对数似然函数的驻点的方程
d
l
x
(
θ
)
d
θ
=
0
\frac{\mathrm{d} l_x(\theta)}{\mathrm{d} \theta}=0
dθdlx(θ)=0或者
d
L
x
(
θ
)
d
θ
=
0
\frac{\mathrm{d} L_x(\theta)}{\mathrm{d} \theta}=0
dθdLx(θ)=0;由于
L
x
(
θ
)
L_x(\theta)
Lx(θ)中包含连乘,转化对数好求解,然后判断整个驻点是否是最大点(求解驻点可以采用牛顿法或者梯度下降法)
朴素贝叶斯的推断过程
我们预测的类别
C
r
e
s
u
l
t
C_{result}
Cresult是使
P
(
Y
=
C
k
∣
X
=
X
(
t
e
s
t
)
)
P(Y=C_k|X=X^{(test)})
P(Y=Ck∣X=X(test))最大化的类别,数学表达式为:
C
r
e
s
u
l
t
=
a
r
g
m
a
x
P
(
Y
=
C
k
∣
X
=
X
(
t
e
s
t
)
)
=
a
r
g
m
a
x
P
(
X
(
t
e
s
t
)
∣
Y
=
C
k
)
P
(
Y
=
C
k
)
/
P
(
X
=
X
(
t
e
s
t
)
)
C_{result}=argmax P(Y=C_k|X=X^{(test)})=argmaxP(X^{(test)}|Y=C_k)P(Y=C_k)/P(X=X^{(test)})
Cresult=argmaxP(Y=Ck∣X=X(test))=argmaxP(X(test)∣Y=Ck)P(Y=Ck)/P(X=X(test))
由于对于所有的类别计算
P
(
Y
=
C
k
∣
X
=
X
(
t
e
s
t
)
)
P(Y=C_k|X=X^{(test)})
P(Y=Ck∣X=X(test))时,上述分母都是
P
(
X
=
X
(
t
e
s
t
)
)
P(X=X^{(test)})
P(X=X(test)),因此预测公式简化为:
C
r
e
s
u
l
t
=
a
r
g
m
a
x
P
(
Y
=
C
k
∣
X
=
X
(
t
e
s
t
)
)
=
a
r
g
m
a
x
P
(
X
(
t
e
s
t
)
∣
Y
=
C
k
)
P
(
Y
=
C
k
)
C_{result}=argmax P(Y=C_k|X=X^{(test)})=argmaxP(X^{(test)}|Y=C_k)P(Y=C_k)
Cresult=argmaxP(Y=Ck∣X=X(test))=argmaxP(X(test)∣Y=Ck)P(Y=Ck)
接着使用朴素贝叶斯的独立性假设,就可以得到通常意义上的朴素贝叶斯推断公式:
C
r
e
s
u
l
t
=
a
r
g
m
a
x
∏
j
=
1
n
P
(
X
j
=
x
j
(
t
e
s
t
)
∣
Y
=
C
k
)
P
(
Y
=
C
k
)
C_{result}=argmax \prod \limits_{j=1} nP(X_j=x_j^{(test)}|Y=C_k)P(Y=C_k)
Cresult=argmaxj=1∏nP(Xj=xj(test)∣Y=Ck)P(Y=Ck)
朴素贝叶斯的参数估计
我们已经知道了只要求出 P ( X j = x j ( t e s t ) ∣ Y = C k ) P ( Y = C k ) , ( j = 1 , 2 , . . . , n ) P(X_j=x_j^{(test)}|Y=C_k)P(Y=C_k),(j=1, 2, ..., n) P(Xj=xj(test)∣Y=Ck)P(Y=Ck),(j=1,2,...,n)和 P ( Y = C k ) P(Y=C_k) P(Y=Ck)就可以得到朴素贝叶斯的推断结果,这一节我们就讨论怎么通过训练集计算这两个概率。
通过极大似然估计, P ( Y = C k ) P(Y=C_k) P(Y=Ck)代表样本类别 C k C_k Ck出现的频率,样本类别 C k C_k Ck出现的次数 m k m_k mk除以样本总数m;
P
(
X
j
=
x
j
(
t
e
s
t
)
∣
Y
=
C
k
)
P
(
Y
=
C
k
)
,
(
j
=
1
,
2
,
.
.
.
,
n
)
P(X_j=x_j^{(test)}|Y=C_k)P(Y=C_k),(j=1, 2, ..., n)
P(Xj=xj(test)∣Y=Ck)P(Y=Ck),(j=1,2,...,n)取决于先验条件:
1)如果我们的
X
j
X_j
Xj是离散的值,那么我们可以假设
X
j
X_j
Xj符合多项式分布,这样得到
P
(
X
j
=
X
j
(
t
e
s
t
)
∣
Y
=
C
k
)
P(X_j=X_j^{(test)}|Y=C_k)
P(Xj=Xj(test)∣Y=Ck)是在样本类别
C
k
C_k
Ck中,
X
j
(
t
e
s
t
)
X_j^{(test)}
Xj(test)出现的频率。即:
P ( X j = X j ( t e s t ) ∣ Y = C k ) = m k j t e s t m k P(X_j=X_j^{(test)}|Y=C_k) = \frac{m_{kj^{test}}}{m_k} P(Xj=Xj(test)∣Y=Ck)=mkmkjtest
其中 m k m_k mk为样本类别 C k C_k Ck出现的次数,而 m k j t e s t m_{kj^{test}} mkjtest为类别为 C k C_k Ck的样本中,第j维特征 X j ( t e s t ) X_j^{(test)} Xj(test)出现的次数。
某些时候,可能某些类别在样本中没有出现,这样可能导 P ( X j = X j ( t e s t ) ∣ Y = C k ) P(X_j=X_j^{(test)}|Y=C_k) P(Xj=Xj(test)∣Y=Ck)为0,这样会影响后验的估计,为了解决这种情况,我们引入了拉普拉斯平滑,即此时有:
P ( X j = X j ( t e s t ) ∣ Y = C k ) = m k j t e s t + λ m k + n λ P(X_j=X_j^{(test)}|Y=C_k) = \frac{m_{kj^{test}} + \lambda}{m_k + n\lambda} P(Xj=Xj(test)∣Y=Ck)=mk+nλmkjtest+λ
其中λ为一个大于0的常数,常常取为1。
b)如果我们的 X j X_j Xj是非常稀疏的离散值,即各个特征出现概率很低,这时我们可以假设 X j X_j Xj符合伯努利分布,即特征 X j X_j Xj出现记为1,不出现记为0。即只要 X j X_j Xj出现即可,我们不关注 X j X_j Xj的次数。这样得到 P ( X j = X j ( t e s t ) ∣ Y = C k ) P(X_j=X_j^{(test)}|Y=C_k) P(Xj=Xj(test)∣Y=Ck)是在样本类别 C k C_k Ck中, X j ( t e s t ) X_j^{(test)} Xj(test)出现的频率。此时有:
P ( X j = X j ( t e s t ) ∣ Y = C k ) = P ( j ∣ Y = C k ) X j ( t e s t ) + ( 1 − P ( j ∣ Y = C k ) ) ( 1 − X j ( t e s t ) ) P(X_j=X_j^{(test)}|Y=C_k) = P(j|Y=C_k)X_j^{(test)} + (1 - P(j|Y=C_k))(1-X_j^{(test)}) P(Xj=Xj(test)∣Y=Ck)=P(j∣Y=Ck)Xj(test)+(1−P(j∣Y=Ck))(1−Xj(test))
其中, X j ( t e s t ) X_j^{(test)} Xj(test)取值为0和1。
c)如果我们我们的 X j X_j Xj是连续值,我们通常取 X j X_j Xj的先验概率为正态分布,即在样本类别 C k C_k Ck中, X j X_j Xj的值符合正态分布。这样 P ( X j = X j ( t e s t ) ∣ Y = C k ) P(X_j=X_j^{(test)}|Y=C_k) P(Xj=Xj(test)∣Y=Ck)的概率分布是:
P ( X j = X j ( t e s t ) ∣ Y = C k ) = 1 2 π σ k 2 e x p ( − ( X j ( t e s t ) − μ k ) 2 2 σ k 2 ) P(X_j=X_j^{(test)}|Y=C_k) = \frac{1}{\sqrt{2\pi\sigma_k^2}}exp(-\frac{(X_j^{(test)} - \mu_k)^2}{2\sigma_k^2}) P(Xj=Xj(test)∣Y=Ck)=2πσk21exp(−2σk2(Xj(test)−μk)2)
其中和 μ k \mu_k μk和 σ k 2 \sigma_k^2 σk2是正态分布的期望和方差,可以通过极大似然估计求得。 μ k \mu_k μk为在样本类别 C k C_k Ck中,所有 X j X_j Xj的平均值。 σ k 2 \sigma_k^2 σk2为在样本类别 C k C_k Ck中,所有 X j X_j Xj的方差。对于一个连续的样本值,带入正态分布的公式,就可以求出概率分布了。
朴素贝叶斯算法流程
我们假设训练集为m个样本n个维度,如下:
(
x
1
(
0
)
,
x
2
(
0
)
,
.
.
.
x
n
(
0
)
,
y
0
)
,
(
x
1
(
1
)
,
x
2
(
1
)
,
.
.
.
x
n
(
1
)
,
y
1
)
,
.
.
.
(
x
1
(
m
)
,
x
2
(
m
)
,
.
.
.
x
n
(
m
)
,
y
n
)
(x_1^{(0)}, x_2^{(0)}, ...x_n^{(0)}, y_0), (x_1^{(1)}, x_2^{(1)}, ...x_n^{(1)},y_1), ... (x_1^{(m)}, x_2^{(m)}, ...x_n^{(m)}, y_n)
(x1(0),x2(0),...xn(0),y0),(x1(1),x2(1),...xn(1),y1),...(x1(m),x2(m),...xn(m),yn)
共有K个特征输出类别,分别为
{
C
1
,
C
2
,
.
.
.
,
C
K
}
\{C_1,C_2,...,C_K\}
{C1,C2,...,CK},每个特征输出类别的样本个数为
{
m
1
,
m
2
,
.
.
.
,
m
K
}
\{m_1,m_2,...,m_K\}
{m1,m2,...,mK},在第k个类别中,如果是离散特征,则特征
X
j
X_j
Xj各个类别取值为
m
j
l
m_{jl}
mjl。其中l取值为
1
,
2
,
.
.
.
S
j
1,2,...S_j
1,2,...Sj为特征j不同的取值数。输出为实例
X
(
t
e
s
t
)
X^{(test)}
X(test)的分类。
算法流程如下:
- 如果没有Y的先验概率,则计算Y的K个先验概率: P ( Y = C k ) = m k m P(Y=C_k) = \frac{m_k}{m} P(Y=Ck)=mmk,否则 P ( Y = C k ) P(Y=C_k) P(Y=Ck)为输入的先验概率。
- 分别计算第k个类别的第j维特征的第l个取值条件概率:
P
(
X
j
=
x
j
l
∣
Y
=
C
k
)
P(X_j=x_{jl}|Y=C_k)
P(Xj=xjl∣Y=Ck):
a)如果是离散值:
P ( X j = x j l ∣ Y = C k ) = x j l + λ m k + n λ P(X_j=x_{jl}|Y=C_k) = \frac{x_{jl} + \lambda}{m_k + n\lambda} P(Xj=xjl∣Y=Ck)=mk+nλxjl+λ
λ可以取值为1,或者其他大于0的数字。
b)如果是稀疏二项离散值: P ( X j = x j l ∣ Y = C k ) = P ( j ∣ Y = C k ) x j l + ( 1 − P ( j ∣ Y = C k ) ( 1 − x j l ) P(X_j=x_{jl}|Y=C_k) = P(j|Y=C_k)x_{jl} + (1 - P(j|Y=C_k)(1-x_{jl}) P(Xj=xjl∣Y=Ck)=P(j∣Y=Ck)xjl+(1−P(j∣Y=Ck)(1−xjl)
此时l只有两种取值,0和1。
c)如果是连续值,不需要计算各个l的取值概率,直接求正态分布的参数:
P ( X j = x j ∣ Y = C k ) = 1 2 π σ k 2 e x p ( − ( x j − μ k ) 2 2 σ k 2 ) P(X_j=x_j|Y=C_k) = \frac{1}{\sqrt{2\pi\sigma_k^2}}exp(-\frac{(x_j - \mu_k)^2}{2\sigma_k^2}) P(Xj=xj∣Y=Ck)=2πσk21exp(−2σk2(xj−μk)2)
需要求出 μ k \mu_k μk和 σ k 2 \sigma_k^2 σk2。 μ k \mu_k μk为在样本类别 C k C_k Ck中,所有 X j X_j Xj的平均值。 σ k 2 \sigma_k^2 σk2为在样本类别 C k C_k Ck中,所有 X j X_j Xj的方差。
3)对于实例 X ( t e s t ) X^{(test)} X(test),分别计算:
∏ j = 1 n P ( X j = x j ( t e s t ) ∣ Y = C k ) \prod_{j=1}^{n}P(X_j=x_j^{(test)}|Y=C_k) ∏j=1nP(Xj=xj(test)∣Y=Ck)和 P ( Y = C k ) P(Y=C_k) P(Y=Ck)。
4)确定实例 X ( t e s t ) X^{(test)} X(test)的分类 C r e s u l t C_{result} Cresult
C r e s u l t = a r g m a x ∏ j = 1 n P ( X j = X j ( t e s t ) ∣ Y = C k ) P ( Y = C k ) C_{result} = argmax\prod_{j=1}^{n}P(X_j=X_j^{(test)}|Y=C_k)P(Y=C_k) Cresult=argmax∏j=1nP(Xj=Xj(test)∣Y=Ck)P(Y=Ck)
从上面的计算可以看出,没有复杂的求导和矩阵运算,因此效率很高。
朴素贝叶斯算法小结
朴素贝叶斯的主要优点有:
1)朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
2)对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练。
3)对缺失数据不太敏感,算法也比较简单,常用于文本分类。
朴素贝叶斯的主要缺点有:
1) 理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。
2)需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。
3)由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率。
4)对输入数据的表达形式很敏感。