一、简介
朴素贝叶斯(Naive Bayes)是一种简单但有效的概率分类器,基于贝叶斯定理。由于假设特征之间相互独立,它被称为“朴素”。虽然这种假设在实际情况中通常不成立,但朴素贝叶斯分类器在文本分类和垃圾邮件过滤等领域表现优异。
二、数学原理——贝叶斯定理
- 先验概率:基于历史数据得出的概率,不依赖于当前的条件。
- 后验概率:基于当前条件计算的概率。
- 条件概率:在事件B已发生的前提下,事件A发生的概率,表示为P(A|B)。
𝑃(𝐴∣𝐵)=𝑃(𝐴𝐵)𝑃(𝐵)P(A∣B)=P(B)P(AB)
- 贝叶斯公式:通过条件概率P(B|A)来计算P(A|B):
𝑃(𝐴∣𝐵)=𝑃(𝐵∣𝐴)×𝑃(𝐴)𝑃(𝐵)P(A∣B)=P(B)P(B∣A)×P(A)
其中,P(A|B)表示在事件B发生时,事件A发生的概率;P(B|A)表示在事件A发生时,事件B发生的概率;P(A)和P(B)分别是事件A和事件B单独发生的概率。
贝叶斯定理的核心思想是,在已知条件事件B发生后,可以利用这一条件更新事件A发生的概率。
三、朴素贝叶斯
在朴素贝叶斯算法中,特征条件假设(Feature Conditional Assumption)假设所有特征相互独立,从而简化后验概率的计算。这一假设是朴素贝叶斯算法的基础。
1. 特征条件假设
给定类别c和样本x=(x1, x2, ..., xn),算法计算条件概率P(x|c),即在类别c发生的情况下,观察到样本x的概率。基于特征条件假设,这个联合概率可以表示为各个特征的条件概率的乘积:
𝑃(𝑥∣𝑐)=𝑃(𝑥1,𝑥2,...,𝑥𝑛∣𝑐)=∏𝑖=1𝑛𝑃(𝑥𝑖∣𝑐)P(x∣c)=P(x1,x2,...,xn∣c)=∏i=1nP(xi∣c)
其中,P(xi|c)表示在类别c发生的情况下,第i个特征xi发生的概率。
2. 原理
朴素贝叶斯算法利用贝叶斯定理计算给定输入数据的类别概率。对于一个样本x,朴素贝叶斯算法计算它属于每个类别c的概率P(c|x),然后选择概率最高的类别作为预测结果。
根据贝叶斯定理:
𝑃(𝑐∣𝑥)=𝑃(𝑥∣𝑐)⋅𝑃(𝑐)𝑃(𝑥)P(c∣x)=P(x)P(x∣c)⋅P(c)
其中,P(c|x)是后验概率,P(x|c)是似然,P(c)是先验概率,P(x)是边缘概率。
3. 朴素贝叶斯分类器
朴素贝叶斯分类器通过计算每个类别的后验概率来进行分类。对于给定的样本X={x1, x2, ..., xm},分类器计算每个类别ci的后验概率P(ci|X),然后选择后验概率最高的类别作为预测结果。
由于朴素贝叶斯假设特征相互独立,似然P(X|ci)可以表示为:
𝑃(𝑋∣𝑐𝑖)=𝑃(𝑥1,𝑥2,...,𝑥𝑛∣𝑐𝑖)=∏𝑗=1𝑚𝑃(𝑥𝑗∣𝑐𝑖)P(X∣ci)=P(x1,x2,...,xn∣ci)=∏j=1mP(xj∣ci)
4. 拉普拉斯修正
拉普拉斯修正(Laplace correction),也称为加一平滑(add-one smoothing),用于解决零概率问题。在朴素贝叶斯分类器中,当某个类别或特征组合在训练数据中未出现时,会导致概率估计为零。拉普拉斯修正通过在每个事件的计数上加一个常数(通常是1),来避免零概率问题。
拉普拉斯修正后的条件概率计算公式为:
𝑃(𝑥𝑖∣𝑐)=𝑁𝑥𝑖,𝑐+1𝑁𝑐+𝑉P(xi∣c)=Nc+VNxi,c+1
其中,Nx_i,c表示在类别c中出现特征xi的次数,Nc是类别c在训练数据中的总次数,V是类别c下特征xi可能取的不同值的数量。
5. 实现步骤
- 数据准备:收集并准备训练数据集。
- 特征独立性假设:假设所有特征相互独立。
- 计算先验概率:根据训练数据集计算每个类别的先验概率P(c)。
- 计算条件概率:计算每个类别c和每个特征xi的条件概率P(xi|c)。
- 计算边缘概率:通过所有类别的条件概率和先验概率的乘积之和来计算。
- 应用贝叶斯定理:计算后验概率P(c|x)。
- 类别预测:对于新的样本x,计算其属于每个类别的后验概率,选择概率最高的类别作为预测结果。
四、代码实现
以下代码使用sklearn库实现了20类新闻的分类: