机器学习一:朴素贝叶斯(Naive Bayes)
朴素贝叶斯 Naive BayesIntroduction1. Gaussian Naive Bayes2. Multinomial Naive Bayes3. Complement Naive BayesReference:Naive Bayes相关文章:贝叶斯法则Introduction朴素贝叶斯方法是一组基于贝叶斯定理的有监督学习算法,该算法的"幼稚"假设是给定类变量值的每一对特征之间的条件
朴素贝叶斯 Naive Bayes
Reference:
- Naive Bayes
- 周志华《机器学习》
相关文章:贝叶斯法则
1. Introduction
朴素贝叶斯方法是一组基于贝叶斯定理的有监督学习算法,该算法的"幼稚"假设是给定类变量值的每一对特征之间的条件独立性。
不难发现,基于贝叶斯公式 P ( y ∣ x ) = P ( y ) P ( x ∣ y ) P ( x ) P(y \mid \boldsymbol{x})=\frac{P(y) P(\boldsymbol{x} \mid y)}{P(\boldsymbol{x})} P(y∣x)=P(x)P(y)P(x∣y) 来估计后验概率 P ( y ∣ x ) P(y \mid \boldsymbol{x}) P(y∣x) 的主要用难在于:类条件概率 P ( x ∣ y ) P(\boldsymbol{x} \mid y) P(x∣y) 是所有属性上的联合概率,难以从有限的训练样本直接估计而得。为避开这个障碍,朴素贝叶斯分类器 (naÏve Bayes classifier)
采用了"属性条件独立性假设" (attribute conditional independence assumption)
: 对已知类别,假设所有属性相互独立。换言之,假设每个属性独立地对分类结果发生影响。
通过贝叶斯定理,给出 类变量 y y y 与 相关特征向量 x 1 x_1 x1 到 x n x_n xn 的关系:
P ( y ∣ x 1 , … , x n ) = P ( y ) P ( x 1 , … , x n ∣ y ) P ( x 1 , … , x n ) P\left(y \mid x_{1}, \ldots, x_{n}\right)=\frac{P(y) P\left(x_{1}, \ldots, x_{n} \mid y\right)}{P\left(x_{1}, \ldots, x_{n}\right)} P(y∣x1,…,xn)=P(x1,…,xn)P(y)P(x1,…,xn∣y)
使用朴素条件独立假设:
P ( x i ∣ y , x 1 , … , x i − 1 , x i + 1 , … , x n ) = P ( x i ∣ y ) P\left(x_{i} \mid y, x_{1}, \ldots, x_{i-1}, x_{i+1}, \ldots, x_{n}\right)=P\left(x_{i} \mid y\right) P(xi∣y,x1,…,xi−1,xi+1,…,xn)=P(xi∣y)
对于所有 i i i,关系简化为:
P ( y ∣ x 1 , … , x n ) = P ( y ) ∏ i = 1 n P ( x i ∣ y ) P ( x 1 , … , x n ) P\left(y \mid x_{1}, \ldots, x_{n}\right)=\frac{P(y) \prod_{i=1}^{n} P\left(x_{i} \mid y\right)}{P\left(x_{1}, \ldots, x_{n}\right)} P(y∣x1,…,xn)=P(x1,…,xn)P(y)∏i=1nP(xi∣y)
因为 P ( x 1 , … , x n ) P\left(x_{1}, \ldots, x_{n}\right) P(x1,…,xn) 是给定常数,我们可以使用下面的分类规则:
P ( y ∣ x 1 , … , x n ) ∝ P ( y ) ∏ i = 1 n P ( x i ∣ y ) ⇓ y ^ = arg max y P ( y ) ∏ i = 1 n P ( x i ∣ y ) \begin{array}{r} P\left(y \mid x_{1}, \ldots, x_{n}\right) \propto P(y) \prod_{i=1}^{n} P\left(x_{i} \mid y\right) \\ \Downarrow \\ \hat{y}=\arg \max _{y} P(y) \prod_{i=1}^{n} P\left(x_{i} \mid y\right) \end{array} P(y∣x1,…,xn)∝P(y)∏i=1nP(xi∣y)⇓y^=argmaxyP(y)∏i=1nP(xi∣y)
然后利用最大后验估计(Maximum A Posteriori MAP)
来估计 P ( y ) P(y) P(y) 和 P ( x i ∣ y ) P\left(x_{i} \mid y\right) P(xi∣y);前者是类 y y y 在训练集中出现的相对频率。
不同的朴素贝叶斯分类器的区别主要在于它们对分布 P ( x i ∣ y ) P\left(x_{i} \mid y\right) P(xi∣y) 的假设。
尽管朴素贝叶斯分类器的假设明显过于简化,但它们在许多现实世界的情况下都工作得相当好,比如著名的文档分类和垃圾邮件过滤。它们需要少量的训练数据来估计必要的参数。(关于朴素贝叶斯的理论原因,以及它适用于哪些类型的数据,请参见下面的参考资料。)
与更复杂的方法相比,朴素贝叶斯学习器和分类器可以非常快。类条件特征分布的解耦意味着每个分布都可以独立地估计为一维分布。这反过来有助于缓解来自维度灾难的问题。
另一方面,虽然朴素贝叶斯被认为是一个不错的分类器,但它被认为是一个糟糕的估计器,所以来自 predict_proba
的概率输出不必太认真。
朴素贝叶斯分类器的训练过程就是基于训练集 D D D 来估计类先验概率 P ( y ) P(y) P(y) ,并为每个属性估计条件概率 P ( x i ∣ y ) P(x_i \mid y) P(xi∣y)。
令 D y D_y Dy 表示训练集 D D D 中第 y y y 类样本组成的集合,若有充足的独立同分布样本,则可容易地估计出类先验概率:
P ( y ) = ∣ D y ∣ ∣ D ∣ P\left( y\right)=\frac{\left|D_{y}\right|}{|D|} P(y)=∣D∣∣Dy∣
1.1 离散属性
对离散属性而言,令 D y , x i D_{y, x_{i}} Dy,xi 表示 D y D_{y} Dy 中在第 i i i 个属性上取值为 x i x_i xi 的样本组成的集合,则条件概率 P ( x i ∣ y ) P(x_{i} \mid y) P(xi∣y) 可估计为:
P ( x i ∣ y ) = ∣ D y , x i ∣ ∣ D y ∣ P\left(x_{i} \mid y\right)=\frac{\left|D_{y, x_{i}}\right|}{\left|D_{y}\right|} P(xi∣y)=∣Dy∣∣Dy,xi∣
1.2 连续属性
1.2.1 Gaussian Naive Bayes
对连续属性可考虑概率密度函数,GaussianNB
实现了用于分类的高斯朴素贝叶斯算法。假设特征的似然为高斯分布:
P ( x i ∣ y ) = 1 2 π σ y 2 exp ( − ( x i − μ y , i ) 2 2 σ y , i 2 ) P\left(x_{i} \mid y\right)=\frac{1}{\sqrt{2 \pi \sigma_{y}^{2}}} \exp \left(-\frac{\left(x_{i}-\mu_{y,i}\right)^{2}}{2 \sigma_{y,i}^{2}}\right) P(xi∣y)=2πσy21exp(−2σy,i2(xi−μy,i)2)
参数 σ y , i \sigma_{y,i} σy,i and μ y , i \mu_{y,i} μy,i 分别是第 y y y 个属性上取值的均值和方差,被用于估计最大似然。
1.2.2 Multinomial Naive Bayes
MultinomialNB
实现了多项分布数据的朴素贝叶斯算法,是文本分类中使用的两种经典朴素贝叶斯变体之一(在文本分类中,数据通常以单词向量计数表示,尽管 tf-idf 向量在实践中也很好用)。每个类别的分布由向量 θ y = ( θ y 1 , … , θ y n ) \theta_{y}=\left(\theta_{y 1}, \ldots, \theta_{y n}\right) θy=(θy1,…,θyn) 对每个类别 y y y 参数化,其中 n n n 是特征的数量(在文本分类中,词汇量的大小), θ y i \theta_{yi} θyi 是特征 i i i 出现在属于类别 y y y 的样本中的概率 P ( x i ∣ y ) P\left(x_{i} \mid y\right) P(xi∣y)。
通过最大似然的平滑版本估计参数 θ y \theta_y θy,即相对频率计数:
θ ^ y i = N y i + α N y + α n \hat{\theta}_{y i}=\frac{N_{y i}+\alpha}{N_{y}+\alpha n} θ^yi=Ny+αnNyi+α
其中 N y i = ∑ x ∈ T x i N_{y i}=\sum_{x \in T} x_{i} Nyi=∑x∈Txi 为训练集 T T T 中某类样本 y y y 中出现特征 i i i 的次数, N y = ∑ i = 1 n N y i N_{y}=\sum_{i=1}^{n} N_{y i} Ny=∑i=1nNyi 为类 y y y 所有特征的总数。
平滑先验 α ≥ 0 \alpha \geq 0 α≥0 解释了学习样本中不存在的特征,并防止在进一步的计算中出现零概率。设置 α = 0 \alpha = 0 α=0 称为 Laplace 平滑,而 α < 0 \alpha < 0 α<0 称为 Lidstone 平滑。
1.2.3 Complement Naive Bayes
ComplementNB
实现了互补朴素贝叶斯(CNB)算法。CNB 是标准多项朴素贝叶斯(MNB)算法的一种改编,特别适合于不平衡数据集。具体来说,CNB 利用每个类的补充数据来计算模型的权重。实验结果表明,与 MNB 相比,CNB 的参数估计更稳定。此外,在文本分类任务上,CNB 通常优于 MNB(通常有相当大的差距)。权重的计算过程如下:
θ ^ c i = α i + ∑ j : y j ≠ c d i j α + ∑ j : y j ≠ c ∑ k d k j w c i = log θ ^ c i w c i = w c i ∑ j ∣ w c j ∣ \begin{array}{r} \hat{\theta}_{c i}=\frac{\alpha_{i}+\sum_{j: y_{j} \neq c} d_{i j}}{\alpha+\sum_{j: y_{j} \neq c} \sum_{k} d_{k j}} \\ w_{c i}=\log \hat{\theta}_{c i} \\ w_{c i}=\frac{w_{c i}}{\sum_{j}\left|w_{c j}\right|} \end{array} θ^ci=α+∑j:yj=c∑kdkjαi+∑j:yj=cdijwci=logθ^ciwci=∑j∣wcj∣wci
其中,求和是对所有不在类 c c c 中的文档 j j j 进行的, d i j d_{ij} dij 是文档中术语的计数或 tf-idf 值,是一个平滑超参数,就像在 MNB 中发现的那样,且 α = ∑ i α i \alpha = \sum_i \alpha_i α=∑iαi。第二种归一化处理了较长的文件在 MNB 中主要参数估计数的趋势。
c ^ = arg min c ∑ i t i w c i \hat{c}=\arg \min _{c} \sum_{i} t_{i} w_{c i} c^=argcmini∑tiwci
也就是说,一个文档被赋给了 complement match 最差的类。
2. 训练和测试数据集
要保证训练和测试是在不同数据集上进行的,如果你不这么做,训练数据就可能出现过拟合。也就是说,模型可能会高估了自己对所有情况的了解程度---------这一点非常重要,因为在机器学习中需要泛化分类器,使它能够识别某些方面存在差别的新数据。
算法本身会记住所有训练数据,那么使用训练数据进行测试始终会获得 100% 的正确率,但它不知道如何泛化以分类新的数据。
所以应该始终遵守的规则是:永远保留大约 10% 的数据将其用作测试集。通过这些数据可以真正了解分类器在学习数据模式方面的进展,更客观地展示在利用训练集进行分类器训练时的表现。
3. 总结
优点:
- 这种算法非常容易执行,它的特征空间非常大;
- 该算法运行起来非常容易,效率非常高。
缺点:
- 它有时候会失败,有时候失败得很好笑。比如由多个单词组成且意义明显不同的短语,朴素贝叶斯就不太适用了。
所以要根据想要解决的具体问题以及解决问题所需要用到的数据集,来选择算法。不可以把监督分类算法当作是一个黑盒,而应该把它们上升到一种对于理论的理解。包括算法如何运行,以及它们是否适合于想要解决的问题。
4. 实例
现使用上述数据集训练一个朴素贝叶斯分类器,然后对下述测试示例进行分类:
首先估计类先验概率 P ( y ) P(y) P(y) , 显然有:
P ( 好瓜 = 是 ) = 8 17 ≈ 0.471 , P ( 好瓜 = 否 ) = 9 17 ≈ 0.529. \begin{array}{l} P(好瓜=是)=\frac{8}{17}\approx 0.471, \\ P(好瓜=否)=\frac{9}{17}\approx 0.529. \end{array} P(好瓜=是)=178≈0.471,P(好瓜=否)=179≈0.529.
然后,为每个属性估计条件概率 P ( x i ∣ c ) P(x_i \mid c) P(xi∣c):
P 青绿|是 = P ( 色泽 = 青绿 ∣ 好瓜 = 是 ) = 3 8 = 0.375 , P 青绿|否 = P ( 色泽 = 青绿 ∣ 好瓜 = 否 ) = 3 9 ≈ 0.333 , P 蜷缩|是 = P ( 根蒂 = 蜷缩 ∣ 好瓜 = 是 ) = 5 8 = 0.375 , P 蜷缩|否 = P ( 根蒂 = 蜷缩 ∣ 好瓜 = 否 ) = 3 9 ≈ 0.333 , P 浊响|是 = P ( 敲声 = 浊响 ∣ 好瓜 = 是 ) = 6 8 = 0.750 , P 浊响|否 = P ( 敲声 = 浊响 ∣ 好瓜 = 否 ) = 4 9 ≈ 0.444 , P 清晰|是 = P ( 纹理 = 清晰 ∣ 好瓜 = 是 ) = 7 8 = 0.875 , P 清晰|否 = P ( 纹理 = 清晰 ∣ 好瓜 = 否 ) = 2 9 ≈ 0.222 , P 凹陷|是 = P ( 脐部 = 凹陷 ∣ 好瓜 = 是 ) = 6 8 = 0.750 , P 凹陷|否 = P ( 脐部 = 凹陷 ∣ 好瓜 = 否 ) = 2 9 ≈ 0.222 , P 硬滑|是 = P ( 触感 = 硬滑 ∣ 好瓜 = 是 ) = 6 8 = 0.750 , P 硬滑|否 = P ( 触感 = 硬滑 ∣ 好瓜 = 否 ) = 6 9 ≈ 0.667 , p 密度: 0.697 ∣ 是 = p ( 密度 = 0.697 ∣ 好瓜 = 是 ) = 1 2 π ⋅ 0.129 exp ( − ( 0.697 − 0.574 ) 2 2 ⋅ 0.12 9 2 ) ≈ 1.959 , p 密度: 0.697 ∣ 否 = p ( 密度 = 0.697 ∣ 好瓜 = 否 ) = 1 2 π ⋅ 0.195 exp ( − ( 0.697 − 0.496 ) 2 2 ⋅ 0.19 5 2 ) ≈ 1.203 , p 含糖: 0.460 ∣ 是 = p (含糖率 = 0.460 ∣ 好瓜 = 是 ) = 1 2 π ⋅ 0.101 exp ( − ( 0.460 − 0.279 ) 2 2 ⋅ 0.10 1 2 ) ≈ 0.788 , p 含糖: 0.460 ∣ 否 = p (含糖率 = 0.460 ∣ 好瓜 = 否 ) = 1 2 π ⋅ 0.108 exp ( − ( 0.460 − 0.154 ) 2 2 ⋅ 0.10 8 2 ) ≈ 0.066 . \begin{array}{l} P_{\text {青绿|是 }}=P(\text { 色泽 }=\text { 青绿 } \mid \text { 好瓜 }=\text { 是 })=\frac{3}{8}=0.375 \text {, }\\ P_{\text {青绿|否 }}=P(\text { 色泽 }=\text { 青绿 } \mid \text { 好瓜 }=\text { 否 })=\frac{3}{9} \approx 0.333 \text {, }\\ P_{\text {蜷缩|是 }}=P(\text { 根蒂 }=\text { 蜷缩 } \mid \text { 好瓜 }=\text { 是 })=\frac{5}{8}=0.375 ,\\ P_{\text {蜷缩|否 }}=P(\text { 根蒂 }=\text { 蜷缩 } \mid \text { 好瓜 }=\text { 否 })=\frac{3}{9} \approx 0.333 \text { , }\\ P_{\text {浊响|是 }}=P(\text { 敲声 }=\text { 浊响 } \mid \text { 好瓜 }=\text { 是 })=\frac{6}{8}=0.750 \text { , }\\ P_{\text {浊响|否 }}=P(\text { 敲声 }=\text { 浊响 } \mid \text { 好瓜 }=\text { 否 })=\frac{4}{9} \approx 0.444,\\ P_{\text {清晰|是 }}=P(\text { 纹理 }=\text { 清晰 } \mid \text { 好瓜 }=\text { 是 })=\frac{7}{8}=0.875 ,\\ P_{\text {清晰|否 }}=P(\text { 纹理 }=\text { 清晰 } \mid \text { 好瓜 }=\text { 否 })=\frac{2}{9} \approx 0.222 \text {, }\\ P_{\text {凹陷|是 }}=P(\text { 脐部 }=\text { 凹陷 } \mid \text { 好瓜 }=\text { 是 })=\frac{6}{8}=0.750 \text {, }\\ P_{\text {凹陷|否 }}=P(\text { 脐部 }=\text { 凹陷 } \mid \text { 好瓜 }=\text { 否 })=\frac{2}{9} \approx 0.222 ,\\ P_{\text {硬滑|是 }}=P(\text { 触感 }=\text { 硬滑 } \mid \text { 好瓜 }=\text { 是 })=\frac{6}{8}=0.750 \text { , }\\ P_{\text {硬滑|否 }}=P(\text { 触感 }=\text { 硬滑 } \mid \text { 好瓜 }=\text { 否 })=\frac{6}{9} \approx 0.667 \text {, }\\ p_{\text {密度: } 0.697 \mid \text { 是 }}=p(\text { 密度 }=0.697 \mid \text { 好瓜 }=\text { 是 }) =\frac{1}{\sqrt{2 \pi} \cdot 0.129} \exp \left(-\frac{(0.697-0.574)^{2}}{2 \cdot 0.129^{2}}\right) \approx 1.959,\\ p_{\text {密度: } 0.697 \mid \text { 否 }}=p(\text { 密度 }=0.697 \mid \text { 好瓜 }=\text { 否 }) =\frac{1}{\sqrt{2 \pi} \cdot 0.195} \exp \left(-\frac{(0.697-0.496)^{2}}{2 \cdot 0.195^{2}}\right) \approx 1.203 \text {, }\\ \left.p_{\text {含糖: } 0.460 \mid \text { 是 }}=p \text { (含糖率 }=0.460 \mid \text { 好瓜 }=\text { 是 }\right) =\frac{1}{\sqrt{2 \pi} \cdot 0.101} \exp \left(-\frac{(0.460-0.279)^{2}}{2 \cdot 0.101^{2}}\right) \approx 0.788,\\ \left.p_{\text {含糖: } 0.460 \mid \text { 否 }}=p \text { (含糖率 }=0.460 \mid \text { 好瓜 }=\text { 否 }\right) =\frac{1}{\sqrt{2 \pi} \cdot 0.108} \exp \left(-\frac{(0.460-0.154)^{2}}{2 \cdot 0.108^{2}}\right) \approx 0.066 \text {. } \end{array} P青绿|是 =P( 色泽 = 青绿 ∣ 好瓜 = 是 )=83=0.375, P青绿|否 =P( 色泽 = 青绿 ∣ 好瓜 = 否 )=93≈0.333, P蜷缩|是 =P( 根蒂 = 蜷缩 ∣ 好瓜 = 是 )=85=0.375,P蜷缩|否 =P( 根蒂 = 蜷缩 ∣ 好瓜 = 否 )=93≈0.333 , P浊响|是 =P( 敲声 = 浊响 ∣ 好瓜 = 是 )=86=0.750 , P浊响|否 =P( 敲声 = 浊响 ∣ 好瓜 = 否 )=94≈0.444,P清晰|是 =P( 纹理 = 清晰 ∣ 好瓜 = 是 )=87=0.875,P清晰|否 =P( 纹理 = 清晰 ∣ 好瓜 = 否 )=92≈0.222, P凹陷|是 =P( 脐部 = 凹陷 ∣ 好瓜 = 是 )=86=0.750, P凹陷|否 =P( 脐部 = 凹陷 ∣ 好瓜 = 否 )=92≈0.222,P硬滑|是 =P( 触感 = 硬滑 ∣ 好瓜 = 是 )=86=0.750 , P硬滑|否 =P( 触感 = 硬滑 ∣ 好瓜 = 否 )=96≈0.667, p密度: 0.697∣ 是 =p( 密度 =0.697∣ 好瓜 = 是 )=2π⋅0.1291exp(−2⋅0.1292(0.697−0.574)2)≈1.959,p密度: 0.697∣ 否 =p( 密度 =0.697∣ 好瓜 = 否 )=2π⋅0.1951exp(−2⋅0.1952(0.697−0.496)2)≈1.203, p含糖: 0.460∣ 是 =p (含糖率 =0.460∣ 好瓜 = 是 )=2π⋅0.1011exp(−2⋅0.1012(0.460−0.279)2)≈0.788,p含糖: 0.460∣ 否 =p (含糖率 =0.460∣ 好瓜 = 否 )=2π⋅0.1081exp(−2⋅0.1082(0.460−0.154)2)≈0.066.
于是,有:
P ( 好瓜 = 是 ) × P 青绿|是 × P 蜷缩|是 × P 浊响|是 × P 清晰|是 × P 凹陷|是 × P 硬滑|是 × p 密度: 0.697 ∣ 是 × p 含糖: 0.460 ∣ 是 ≈ 0.038 , P ( 好瓜 = 否 ) × P 青绿|否 × P 蜷缩|否 × P 浊响|否 × P 清晰|否 × P 凹陷|否 × P 硬滑|否 × p 密度: 0.697 ∣ 否 × p 含糖: 0.460 ∣ 否 ≈ 6.80 × 1 0 − 5 . \begin{array}{l} P(\text { 好瓜 }=\text { 是 }) \times P_{\text {青绿|是 }} \times P_{\text {蜷缩|是 }} \times P_{\text {浊响|是 }} \times P_{\text {清晰|是 }} \times P_{\text {凹陷|是 }} \times P_{\text {硬滑|是 }} \times p_{\text {密度: } 0.697 \mid \text { 是 }} \times p_{\text {含糖: } 0.460 \mid \text { 是 }} \approx 0.038, \\ P(\text { 好瓜 }=\text { 否 }) \times P_{\text {青绿|否 }} \times P_{\text {蜷缩|否 }} \times P_{\text {浊响|否 }} \times P_{\text {清晰|否 }} \times P_{\text {凹陷|否 }} \times P_{\text {硬滑|否 }} \times p_{\text {密度: } 0.697 \mid \text { 否 }} \times p_{\text {含糖: } 0.460 \mid \text { 否 }} \approx 6.80 \times 10^{-5} . \end{array} P( 好瓜 = 是 )×P青绿|是 ×P蜷缩|是 ×P浊响|是 ×P清晰|是 ×P凹陷|是 ×P硬滑|是 ×p密度: 0.697∣ 是 ×p含糖: 0.460∣ 是 ≈0.038,P( 好瓜 = 否 )×P青绿|否 ×P蜷缩|否 ×P浊响|否 ×P清晰|否 ×P凹陷|否 ×P硬滑|否 ×p密度: 0.697∣ 否 ×p含糖: 0.460∣ 否 ≈6.80×10−5.
由于 0.038 > 6.80 × 1 0 − 5 0.038>6.80\times10^{-5} 0.038>6.80×10−5,因此,朴素贝叶斯分类器将测试样本判别为“好瓜”。
需注意,若某个属性值在训练集中没有与某个类同时出现过,则直接基于
式 P ( x i ∣ y ) = ∣ D y , x i ∣ ∣ D y ∣ P\left(x_{i} \mid y\right)=\frac{\left|D_{y, x_{i}}\right|}{\left|D_{y}\right|} P(xi∣y)=∣Dy∣∣Dy,xi∣ 进行概率估计,再根据式 y ^ = arg max y P ( y ) ∏ i = 1 n P ( x i ∣ y ) \hat{y}=\arg \max _{y} P(y) \prod_{i=1}^{n} P\left(x_{i} \mid y\right) y^=argmaxyP(y)∏i=1nP(xi∣y) 进行判别将出现问题。例如,在使用上述数据集训练朴素贝叶斯分类器时,对一个"敲声=清脆"的测试例,有
P 清脆 ∣ 是 = P ( 敲声 = 清脆 ∣ 好瓜 = 是 ) = 0 8 = 0 P_{清脆|是} =P(敲声=清脆|好瓜=是)=\frac{0}{8}=0 P清脆∣是=P(敲声=清脆∣好瓜=是)=80=0
由于式连乘式计算出的概率值为零,因此,无论该样本的其他属性是什么,哪怕在其他属性上明显像好瓜,分类的结果都将是"好瓜=否",这样显然太合理。
为了避免其他属性携带的信息被训练集中未出现的属性值"抹去“,在估计概率值时通常要进行"平滑" (smoothing) ,常用"拉普拉斯修正" (Laplacian correction)
。具体来说,令 N N N 表示训练集 D D D 中可能的类别数, N i N_i Ni 表示第 i i i 个属性可能的取值数,则上式的 P ( y ) = ∣ D y ∣ ∣ D ∣ P\left( y\right)=\frac{\left|D_{y}\right|}{|D|} P(y)=∣D∣∣Dy∣ 和 P ( x i ∣ y ) = ∣ D y , x i ∣ ∣ D y ∣ P\left(x_{i} \mid y\right)=\frac{\left|D_{y, x_{i}}\right|}{\left|D_{y}\right|} P(xi∣y)=∣Dy∣∣Dy,xi∣ 分别修正为:
P ^ ( y ) = ∣ D y ∣ + 1 ∣ D ∣ + N P ^ ( x i ∣ y ) = ∣ D y , x i ∣ + 1 ∣ D y ∣ + N i . \begin{aligned} \hat{P}(y) &=\frac{\left|D_{y}\right|+1}{|D|+N} \\ \hat{P}\left(x_{i} \mid y\right) &=\frac{\left|D_{y, x_{i}}\right|+1}{\left|D_{y}\right|+N_{i}} . \end{aligned} P^(y)P^(xi∣y)=∣D∣+N∣Dy∣+1=∣Dy∣+Ni∣Dy,xi∣+1.
例如,在本节的例子中,类先验概率可估计为:
P ^ ( 好瓜 = 是 ) = 8 + 1 17 + 2 ≈ 0.474 , P ^ ( 好瓜 = 否 ) = 9 + 1 17 + 2 ≈ 0.526. \hat{P}(\text { 好瓜 }=\text { 是 })=\frac{8+1}{17+2} \approx 0.474, \quad \hat{P}(\text { 好瓜 }=\text { 否 })=\frac{9+1}{17+2} \approx 0.526. P^( 好瓜 = 是 )=17+28+1≈0.474,P^( 好瓜 = 否 )=17+29+1≈0.526.
类似地 , P 青绿 ∣ 是 P_{青绿|是} P青绿∣是 和 P 青绿 ∣ 否 P_{青绿|否} P青绿∣否 可估计为:
P ^ 青绿|是 = P ^ ( 色泽 = 青绿 ∣ 好瓜 = 是 ) = 3 + 1 8 + 3 ≈ 0.364 , P ^ 青绿|否 = P ^ ( 色泽 = 青绿 ∣ 好瓜 = 否 ) = 3 + 1 9 + 3 ≈ 0.333 . \begin{aligned} \hat{P}_{\text {青绿|是 }}&=\hat{P}(\text { 色泽 }=\text { 青绿 } \mid \text { 好瓜 }=\text { 是 })=\frac{3+1}{8+3} \approx 0.364 \text {, }\\ \hat{P}_{\text {青绿|否 }}&=\hat{P}(\text { 色泽 }=\text { 青绿 } \mid \text { 好瓜 }=\text { 否 })=\frac{3+1}{9+3} \approx 0.333 \text {.} \end{aligned} P^青绿|是 P^青绿|否 =P^( 色泽 = 青绿 ∣ 好瓜 = 是 )=8+33+1≈0.364, =P^( 色泽 = 青绿 ∣ 好瓜 = 否 )=9+33+1≈0.333.
同时,上文提到的概率 P 清脆 ∣ 是 P_{清脆|是} P清脆∣是 可估计为:
P ^ 清脆|是 = P ^ ( 敲声 = 清脆 ∣ 好瓜 = 是 ) = 0 + 1 8 + 3 ≈ 0.091 . \hat{P}_{\text {清脆|是 }}=\hat{P}(\text { 敲声 }=\text { 清脆 } \mid \text { 好瓜 }=\text { 是 })=\frac{0+1}{8+3} \approx 0.091 \text {. } P^清脆|是 =P^( 敲声 = 清脆 ∣ 好瓜 = 是 )=8+30+1≈0.091.
显然,拉普拉斯修正(拉普拉斯修正实质上假设了属性值与类别均匀分布,这是在朴素贝叶斯学习过程中额外引入的关于
数据的先验)避免了因训练集样本不充分而导致概率估值为零的问题,并且在训练集变大时,修正过程所引入的先验 (prior) 的影响也会逐渐变得可忽略,使得估值渐趋向于实际概率值。
更多推荐
所有评论(0)