朴素贝叶斯法整理

朴素贝叶斯(naïve Bayes)法是基于贝叶斯定理特征条件独立假设的分类方法,特征条件独立假设即‘朴素’。

首先是贝叶斯定理:

贝叶斯公式:

先验概率(Prior Probability):在一个事件发生前,人们根据已有的经验或知识预测该事件发生的概率。

后验概率(Posterior Probability):在一个事件发生后,人们分析计算导致该事件发生的各种原因的各自概率。(已知结果求原因的概率)

条件概率(Conditional Probability):事件A发生的情况下事件B发生的概率


 

特征条件独立假设:

条件独立假设等于是说用于分类的特征在类确定的条件下都是条件独立的。

朴素贝叶斯模型

因为分母是一个常数,所以化简为:

朴素贝叶斯法分类时,对给定的输入x,通过学习到的模型计算后验概率分布P(Y=ck|X=x),将后验概率最大的类作为x的类输出。

期望风险最小化原则等价于后验概率最大化原则(使用0-1损失函数推导,详情见《统计学习方法》)

朴素贝叶斯法的参数估计

假设有一个数据集D和一个参数模型θ,极大似然估计的目标是找到使得数据集D出现的概率

P ( D ∣θ)  最大的参数值θ(P (θ∣D)化简后约去定值)。假设数据相互独立,P ( D ∣θ) =θ)取对数,求导取极值点,就得到了要估计的参数。

先验概率的极大似然估计为

条件概率的极大似然估计为

证明

统计学习方法 第四章习题答案_统计学习方法 第四章答案-优快云博客

贝叶斯估计

但是有一个不能忽略的问题就是:在训练集不充分的情况下,缺少某个维度的条件概率时,(例如,如果P ( X ( 1 ) = 1 ∣ Y = 1 ) P(X^{(1)}=1|Y=1)P(X (1)=1∣Y=1)为0的话)那么在预测的时候,将会产生很大的错差。解决这个问题的办法就是在各个估计中加入平滑项,即贝叶斯估计。

条件概率的贝叶斯估计是:

先验概率的贝叶斯估计是:

这个证明好像要用到狄利克雷分布,所以暂时还没写,如果对这篇笔记有什么问题,欢迎交流啊!

朴素贝叶斯算法与贝叶斯估计_朴素贝叶斯和贝叶斯估记-优快云博客

【机器学习算法笔记系列】朴素贝叶斯(NB)算法详解和实战_gaussiannb英文缩写-优快云博客

李航,著. 统计学习方法[M]. 清华大学出版社

### 朴素贝叶斯算法实现垃圾信息分 #### 理论基础 朴素贝叶斯是一种基于贝叶斯定理的简单而强大的分算法,它假设特征之间相互独立。这种假设虽然在实际场景中未必成立,但在许多情况下仍然能取得良好的效果[^1]。对于垃圾信息分任务,朴素贝叶斯可以通过计算给定邮件属于垃圾邮件或正常邮件的概率来进行决策。 #### 应用场景 垃圾信息分朴素贝叶斯的一个经典应用场景。通过对邮件内容中的关键词及其出现频率进行建模,可以有效地区分垃圾邮件和正常邮件。相比于传统方(如“关键词”或“校验码”),朴素贝叶斯具有更高的鲁棒性和适应性,尤其当数据规模增大时,其性能表现更优[^2]。 --- ### 实现步骤 #### 数据预处理 为了使原始文本适合输入到机器学习模型中,通常需要对其进行一系列预处理操作: - **清洗**: 删除无关字符、HTML标签以及停用词。 - **分词**: 将连续的文本分割成单独的词语。 - **去重与标准化**: 统一大小写并移除重复项。 这些步骤有助于减少噪声干扰,提升后续特征提取的质量。 #### 特征提取 常用的特征表示方式有两种: 1. **词袋模型 (Bag of Words)**: 把文档映射为固定长度的向量,忽略语结构只关注词汇频次。 2. **TF-IDF (Term Frequency-Inverse Document Frequency)**: 不仅考虑某个词在当前文档内的频率还兼顾全局重要程度。 采用哪种策略取决于具体需求;不过,在大多数垃圾邮件检测案例里,简单的词袋已经足够胜任[^3]。 #### 模型训练 核心部分涉及两个主要参数估计——先验概率 \(P(C_k)\) 和条件概率分布 \(P(x_i | C_k)\),其中\(C_k\)代表别k(此处指代'normal'/'spam'): \[ P(C_{\text{spam}})= \frac{\text{Number Of Spam Emails In Training Set}} {\text{Total Number Of Emails In Training Set}} \] 接着利用拉普拉斯平滑技术防止零概率问题发生: \[ P(w_j|\text{Spam})=\log⁡(\frac{\sum_{d∈D_\text{{spam}}} f(d,w_j)+α}{N_\text{{spam}}+\alpha V}), \quad α>0,V:\text{Vocabulary Size} \] 最终返回三个值:p0Vec,p1Vec分别对应于两下各维度属性取特定值得可能性数组形式表达;还有pAbusive即正别的经验几率. 下面是完整的 Python 函数定义用于完成上述逻辑运算过程: ```python import numpy as np def trainNB(trainMatrix, trainCategory): """ :param trainMatrix: 文档矩阵 [[w1,...wn],...] :param trainCategory: 别列表 [c1,c2,...cn] :return: p0Vect, p1Vect, pAbusive """ numTrainDocs = len(trainMatrix) numWords = len(trainMatrix[0]) # 计算垃圾邮件的比例作为先验概率 pAbusive = sum(trainCategory) / float(numTrainDocs) # 初始化分子计数器 p0Num = np.ones(numWords) p1Num = np.ones(numWords) # 初始化分母总次数 p0Denom = 2.0 p1Denom = 2.0 for i in range(numTrainDocs): if trainCategory[i] == 1: # 如果是垃圾邮件 p1Num += trainMatrix[i] # 更新垃圾邮件下的词频统计 p1Denom += sum(trainMatrix[i]) # 更新垃圾邮件总的词数量 else: # 否则是正常邮件 p0Num += trainMatrix[i] # 更新正常邮件下的词频统计 p0Denom += sum(trainMatrix[i]) # 更新正常邮件总的词数量 # 转换成对数值避免下溢现象 p1Vect = np.log(p1Num / p1Denom) p0Vect = np.log(p0Num / p0Denom) return p0Vect, p1Vect, pAbusive ``` 此函数接收两组输入—一个是经过二元化后的词条表构成的大矩阵`trainMatrix`,另一个是由布尔值组成的指示列阵表明相应记录所属群体身份标记`trainCategory`. 输出结果包括三部分内容:`p0Vect`,`p1Vect`各自保存针对不同种情形下调用各个字段呈现指定状态的可能性集合描述;还有一个就是关于恶意意图占比评估指标`pAbusive`. #### 预测阶段 有了前面构建起来的基础之后就可以着手编写测试环节代码片段了. ```python def classifyNB(vec2Classify, p0Vec, p1Vec, pClass1): """ 对新样本vec2Classify进行分 vec2Classify: 待分的新样本向量 返回:预测的结果 {0:'Normal', 1:'Spam'} """ # 根据公式求解后验概率 p1 = sum(vec2Classify * p1Vec) + np.log(pClass1) # log(P(W|S)) + log(P(S)) p0 = sum(vec2Classify * p0Vec) + np.log(1.0 - pClass1)# log(P(W|H)) + log(P(H)) if p1 > p0: return 1 # 判断为垃圾邮件 else: return 0 # 正常邮件 ``` 这段程序接受四个参数分别是待判定实例对象编码串表述版式`vec2Classify`;之前所得各别关联权重系数序列`p0Vec`, `p1Vec`;再加上先前确立下来的发生率估值`pClass1`(也就是上面提到过的那个比例). 它们共同协作得出结论要么归入常规通信范畴要么划分为骚扰性质通讯往来之中的一项抉择成果. --- ### 总结 以上便是运用朴素贝叶斯原理执行电子邮件过滤工作的全过程概述说明.从最初的数据整理准备直至最后落实检验确认各个环节均有所涉猎探讨.希望这份资料对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值