4.2 朴素贝叶斯法的参数估计
利用极大似然估计计算概率
对于先验概率\(P(Y)\),似然函数为\(L=\underset{i=1}{\overset{m}{\prod}}P(Y=y_i)\),对数似然函数为\(l=\underset{i=1}{\overset{m}{\sum}}\log P(Y=y_i)\),注意到有约束条件\(\underset{k=1}{\overset{K}{\sum}}P(Y=c_k)=1\),于是利用拉格朗日乘数法可以得出下面的方程
解这个方程组即可得出书上的公式
对于条件概率\(P(X|Y)\),似然函数为\(L=\underset{i=1}{\overset{m}{\prod}}P(X=x_i|Y=y_i)\),对数似然函数为\(l=\underset{i=1}{\overset{m}{\sum}}\log P(X=x_i|Y=y_i)\),注意到有约束条件\(\underset{s=1}{\overset{S}{\sum}}P(X=a_s|Y=c_k)=1,k=1,2,...,K\),于是利用拉格朗日乘数法可以得出下面的方程
于是可以得出书上的公式
注意在估计条件概率的时候,上面是假设特征是离散型的并且在\(Y\)给定后\(X\)符合多项式分布;如果特征是连续型的,一般就假设在\(Y\)给定后\(X\)符合高斯分布
当数据集中同时包含连续型和离散型特征时,可以使用朴素贝叶斯分类器,但需要根据特征类型选择合适的概率估计方法。以下是具体分析和建议:
1. 能否使用朴素贝叶斯?
可以。朴素贝叶斯的条件独立假设允许分别处理每个特征,因此可以通过组合不同分布来处理混合特征。具体方法如下:
- 连续型特征:假设服从高斯分布,使用高斯朴素贝叶斯(GaussianNB)计算条件概率。
- 离散型特征:若为计数或类别型数据(如文本词频),使用多项式朴素贝叶斯(MultinomialNB);若为二元特征,使用伯努利朴素贝叶斯(BernoulliNB)。
2. 应该选择高斯还是多项式?
需结合两者的方法。标准的朴素贝叶斯实现(如scikit-learn中的分类器)通常仅支持单一分布假设。因此,实际应用中需分情况处理:
-
方案一:自定义混合模型
分别对连续特征和离散特征建模,手动结合两者的概率估计。例如:- 对连续特征用高斯分布计算似然概率。
- 对离散特征用多项式或伯努利分布计算似然概率。
- 将各特征的似然概率相乘,再结合先验概率得到后验概率。
这种方式需要自行实现或扩展现有库的功能。
-
方案二:特征预处理
- 离散化连续特征:将连续特征分箱(如等宽或等频分箱),转化为离散值,统一使用多项式朴素贝叶斯。但可能损失连续数据的细节信息。
- 连续化离散特征:将离散特征编码为连续形式(如独热编码),使用高斯朴素贝叶斯。但需注意高斯分布对离散编码的适用性可能较差。
3. 实践建议
- 若需快速实现,优先尝试离散化连续特征,使用多项式朴素贝叶斯。
- 若追求精度且具备开发能力,可尝试自定义混合模型,结合高斯与多项式分布。
- 在工具选择上,Python的
scikit-learn库未直接支持混合模型,但可通过特征分桶(KBinsDiscretizer)或自定义代码实现。
结论
可以使用朴素贝叶斯处理混合特征,但需根据特征类型选择不同分布。推荐结合高斯与多项式方法(如对连续和离散特征分别建模)。若受限于工具,可对特征预处理后统一使用一种模型,但需权衡信息损失与模型性能。

浙公网安备 33010602011771号