朴素贝叶斯学习笔记
一、贝叶斯基础
1. 贝叶斯核心背景
人物与贡献:托马斯·贝叶斯(约1701-1761,英国数学家),生前为解决“逆概”问题撰写文章,死后其提出的贝叶斯方法才被认可。
两类概率问题
正向概率:已知事件条件(如袋中N个白球、M个黑球),求某结果概率(摸出黑球的概率)。
逆向概率:未知事件条件(如袋中黑白球比例),通过观测结果(摸出球的颜色)推测事件条件。
2. 贝叶斯公式(以学生性别与着装为例推导)
已知条件:男生占比60%(P(Boy)=0.6)、女生占比40%(P(Girl)=0.4);男生100%穿长裤(P(Pants|Boy)=1),女生50%穿长裤(P(Pants|Girl)=0.5)。
公式推导:已知学生穿长裤,推测其为女生的概率,最终得出通用贝叶斯公式:P(A|B) = \frac{P(A) \times P(B|A)}{P(B)},其中P(A)是先验概率,P(B|A)是条件概率,P(B)是证据概率。
二、朴素贝叶斯算法核心
1. 核心假设
假设特征之间相互独立、互不影响,以此简化条件概率计算,这是“朴素”的核心含义。
2. 关键公式
对观测数据D和猜测h,因P(D)对所有猜测为常数,比较时可忽略,故P(h|D) \propto P(h) \times P(D|h)。其中:
P(h):先验概率,即猜测h本身发生的可能性。
P(D|h):似然概率,即猜测h生成观测数据D的可能性。
三、朴素贝叶斯典型实例
1. 拼写纠正
问题:用户输入不在字典的单词D,推测其真实想输入的单词h。
逻辑:比较不同可能正确单词h_1,h_2,...的P(h|D),概率最大的h即为结果。示例:输入“tlp”时,因“top”先验概率(出现频率)高于“tip”,故推测为“top”。
2. 垃圾邮件分类
问题:给定由n个单词d_1,d_2,...d_n组成的邮件D,判定其为垃圾邮件(h_+)或正常邮件(h_-)。
逻辑
先验概率:P(h_+)(垃圾邮件在邮件库中的比例)、P(h_-)(正常邮件比例),可通过统计获取。
似然概率:因特征独立,P(D|h_+) = P(d_1|h_+) \times P(d_2|h_+) \times ... \times P(d_n|h_+),P(d_i|h_+)为单词d_i在垃圾邮件中的出现频率。
比较P(h_+|D)和P(h_-|D),概率大的即为分类结果。
四、三种常见朴素贝叶斯模型(基于sklearn)
1. 多项式朴素贝叶斯(MultinomialNB)
适用场景:离散型数据(如文本分类,统计单词出现次数)。
关键参数
alpha:浮点型,默认1.0,控制拉普拉斯平滑(alpha=0时不添加)。
fit_prior:布尔型,默认True,是否考虑先验概率。
class_prior:默认None,可手动指定类别先验概率。
代码导入:from sklearn.naive_bayes import MultinomialNB
2. 高斯朴素贝叶斯(GaussianNB)
适用场景:连续型数据(如身高、体重),假设特征服从正态分布。
关键参数:priors,默认None,手动指定先验概率(未指定则用样本极大似然法计算)。
代码导入:from sklearn.naive_bayes import GaussianNB
3. 伯努利朴素贝叶斯(BernoulliNB)
适用场景:离散型数据且特征取值仅为0/1(如文本中“单词是否出现”)。
关键参数
alpha:同多项式模型,控制拉普拉斯平滑。
binarize:浮点数或None,默认0,特征二值化阈值(为None时假定特征已二值化)。
fit_prior、class_prior:同多项式模型。
代码导入:from sklearn.naive_bayes import BernoulliNB
五、模型常用方法(sklearn)
方法 功能
fit(X,Y) 在数据集(X特征,Y标签)上拟合模型
predict(X) 对数据集X进行类别预测
predict_proba(X) 预测X属于每个类别的概率
predict_log_proba(X) 预测X属于每个类别的概率对数值
score(X,Y) 计算模型在数据集(X,Y)上的准确率