【机器学习】贝叶斯算法原理与应用
贝叶斯算法原理与应用
- 一、原理介绍
- 1. 条件概率(Conditional Probability)
- 2. 联合概率(Joint Probability)
- 3. 贝叶斯定理(贝叶斯公式)
- 4. 朴素贝叶斯(Naive Bayes)
- 5. 拉普拉斯平滑系数(Laplace Smoothing)
- 二、应用案例(垃圾邮件识别)
一、原理介绍
1. 条件概率(Conditional Probability)
条件概率是指在已知事件B发生的条件下,事件A发生的概率。记作 P ( A ∣ B ) P(A|B) P(A∣B),公式为:
P ( A ∣ B ) = P ( A ∩ B ) P ( B ) P(A|B) = \frac{P(A \cap B)}{P(B)} P(A∣B)=P(B)P(A∩B)
其中:
- P ( A ∩ B ) P(A \cap B) P(A∩B) 是事件A和B同时发生的联合概率。
- P ( B ) P(B) P(B) 是事件B发生的概率。
示例:假设有一个扑克牌堆(52张),事件A是“抽到一张A”,事件B是“抽到一张红桃”。那么:
- P ( A ) = 4 52 = 1 13 P(A) = \frac{4}{52} = \frac{1}{13} P(A)=524=131(有4张A)
- P ( B ) = 13 52 = 1 4 P(B) = \frac{13}{52} = \frac{1}{4} P(B)=5213=41(有13张红桃)
- P ( A ∩ B ) = 1 52 P(A \cap B) = \frac{1}{52} P(A∩B)=521(只有一张红桃A)
- 在已知抽到红桃的条件下,抽到A的概率为: P ( A ∣ B ) = P ( A ∩ B ) P ( B ) = 1 / 52 1 / 4 = 1 13 P(A|B) = \frac{P(A \cap B)}{P(B)} = \frac{1/52}{1/4} = \frac{1}{13} P(A∣B)=P(B)P(A∩B)=1/41/52=131
2. 联合概率(Joint Probability)
联合概率是指两个或多个事件同时发生的概率。记作 P ( A ∩ B ) P(A \cap B) P(A∩B) 或 P ( A , B ) P(A, B) P(A,B)。如果事件A和B是独立的,则 P ( A ∩ B ) = P ( A ) ⋅ P ( B ) P(A \cap B) = P(A) \cdot P(B) P(A∩B)=P(A)⋅P(B)。但如果不独立,则联合概率需要根据条件概率计算:
P ( A ∩ B ) = P ( A ∣ B ) ⋅ P ( B ) = P ( B ∣ A ) ⋅ P ( A ) P(A \cap B) = P(A|B) \cdot P(B) = P(B|A) \cdot P(A) P(A∩B)=P(A∣B)⋅P(B)=P(B∣A)⋅P(A)
示例:抛掷一枚公平的硬币两次,事件A是“第一次正面朝上”,事件B是“第二次正面朝上”。由于两次抛掷独立,联合概率 P ( A ∩ B ) = P ( A ) ⋅ P ( B ) = 1 2 × 1 2 = 1 4 P(A \cap B) = P(A) \cdot P(B) = \frac{1}{2} \times \frac{1}{2} = \frac{1}{4} P(A∩B)=P(A)⋅P(B)=21×21=41。
3. 贝叶斯定理(贝叶斯公式)
贝叶斯定理是基于条件概率的公式,用于在已知先验知识的情况下更新事件的概率。公式为:
P ( A ∣ B ) = P ( B ∣ A ) ⋅ P ( A ) P ( B ) P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)} P(A∣B)=P(B)P(B∣A)⋅P(A)
其中:
- P ( A ∣ B ) P(A|B) P(A∣B) 是后验概率(posterior probability),即在观察到事件B后事件A发生的概率。
- P ( B ∣ A ) P(B|A) P(B∣A) 是似然概率(likelihood),即在事件A发生的条件下事件B发生的概率。
- P ( A ) P(A) P(A) 是先验概率(prior probability),即在观察事件B前事件A发生的概率。
- P ( B ) P(B) P(B) 是证据概率(evidence),即事件B发生的总概率,通常通过全概率公式计算: P ( B ) = ∑ i P ( B ∣ A i ) P ( A i ) P(B) = \sum_{i} P(B|A_i) P(A_i) P(B)=∑iP(B∣Ai)P(Ai),其中 A i A_i Ai 是互斥且完备的事件。
示例:医学测试中,假设一种疾病的患病率(先验概率)为 P ( 病 ) = 0.01 P(\text{病}) = 0.01 P(病)=0.01,测试的灵敏度(似然概率)为 P ( 阳性 ∣ 病 ) = 0.99 P(\text{阳性}|\text{病}) = 0.99 P(阳性∣病)=0.99,测试的误报率为 P ( 阳性 ∣ 健康 ) = 0.05 P(\text{阳性}|\text{健康}) = 0.05 P(阳性∣健康)=0.05。那么,如果一个人测试阳性,实际患病的后验概率为:
P ( 病 ∣ 阳性 ) = P ( 阳性 ∣ 病 ) ⋅ P ( 病 ) P ( 阳性 ) P(\text{病}|\text{阳性}) = \frac{P(\text{阳性}|\text{病}) \cdot P(\text{病})}{P(\text{阳性})} P(病∣阳性)=P(阳性)P(阳性∣病)⋅P(病)
其中 P ( 阳性 ) = P ( 阳性 ∣ 病 ) ⋅ P ( 病 ) + P ( 阳性 ∣ 健康 ) ⋅ P ( 健康 ) = 0.99 × 0.01 + 0.05 × 0.99 = 0.0594 P(\text{阳性}) = P(\text{阳性}|\text{病}) \cdot P(\text{病}) + P(\text{阳性}|\text{健康}) \cdot P(\text{健康}) = 0.99 \times 0.01 + 0.05 \times 0.99 = 0.0594 P(阳性)=P(阳性∣病)⋅P(病)+P(阳性∣健康)⋅P(健康)=0.99×0.01+0.05×0.99=0.0594
所以:
P ( 病 ∣ 阳性 ) = 0.99 × 0.01 0.0594 ≈ 0.1667 P(\text{病}|\text{阳性}) = \frac{0.99 \times 0.01}{0.0594} \approx 0.1667 P(病∣阳性)=0.05940.99×0.01≈0.1667
即只有约16.67%的概率实际患病,尽管测试灵敏度很高。
4. 朴素贝叶斯(Naive Bayes)
朴素贝叶斯是一种基于贝叶斯定理的分类算法,常用于文本分类、垃圾邮件检测等。它被称为“朴素”是因为它假设特征之间是条件独立的(即给定类别下,每个特征相互独立)。对于特征向量 X = ( x 1 , x 2 , … , x n ) X = (x_1, x_2, \ldots, x_n) X=(x1,x2,…,xn) 和类别 C C C,后验概率为:
P ( C ∣ X ) = P ( X ∣ C ) ⋅ P ( C ) P ( X ) P(C|X) = \frac{P(X|C) \cdot P(C)}{P(X)} P(C∣X)=P(X)P(X∣C)⋅P(C)
由于特征条件独立, P ( X ∣ C ) P(X|C) P(X∣C) 可分解为:
P ( X ∣ C ) = P ( x 1 ∣ C ) ⋅ P ( x 2 ∣ C ) ⋅ … ⋅ P ( x n ∣ C ) P(X|C) = P(x_1|C) \cdot P(x_2|C) \cdot \ldots \cdot P(x_n|C) P(X∣C)=P(x1∣C)⋅P(x2∣C)⋅…⋅P(xn∣C)
因此:
P ( C ∣ X ) ∝ P ( C ) ∏ i = 1 n P ( x i ∣ C ) P(C|X) \propto P(C) \prod_{i=1}^{n} P(x_i|C) P(C∣X)∝P(C)i=1∏nP(xi∣C)
在分类时,我们选择使 P ( C ) ∏ i = 1 n P ( x i ∣ C ) P(C) \prod_{i=1}^{n} P(x_i|C) P(C)∏i=1nP(xi∣C) 最大的类别 C C C。
示例:垃圾邮件分类。假设我们有两个类别:垃圾邮件(Spam)和非垃圾邮件(Ham)。特征包括单词“免费”和“金钱”。给定一封邮件,我们计算:
- P ( Spam ) P(\text{Spam}) P(Spam) 和 P ( Ham ) P(\text{Ham}) P(Ham)(先验概率)。
- P ( 免费 ∣ Spam ) P(\text{免费}|\text{Spam}) P(免费∣Spam)、 P ( 免费 ∣ Ham ) P(\text{免费}|\text{Ham}) P(免费∣Ham) 等(条件概率)。
然后对于新邮件,根据出现的单词计算后验概率,并选择概率较高的类别。
5. 拉普拉斯平滑系数(Laplace Smoothing)
在朴素贝叶斯中,如果某个特征值在训练数据中没有出现在某个类别中,则 P ( x i ∣ C ) = 0 P(x_i|C) = 0 P(xi∣C)=0,这会导致整个后验概率为零。拉普拉斯平滑通过添加一个常数来解决这个问题,确保没有概率为零。对于离散特征,条件概率的计算变为:
P ( x i ∣ C ) = count ( x i , C ) + α count ( C ) + α ⋅ n P(x_i|C) = \frac{\text{count}(x_i, C) + \alpha}{\text{count}(C) + \alpha \cdot n} P(xi∣C)=count(C)+α⋅ncount(xi,C)+α
其中:
- count ( x i , C ) \text{count}(x_i, C) count(xi,C) 是类别 C C C 中特征 x i x_i xi 出现的次数。
- count ( C ) \text{count}(C) count(C) 是类别 C C C 中所有特征出现的总次数(或实例数)。
- α \alpha α 是平滑参数(通常设为1,即拉普拉斯平滑)。
- n n n 是特征 x i x_i xi 可能取值的数量(即特征的空间大小)。
示例:在文本分类中,假设单词“彩票”在垃圾邮件中出现0次,而垃圾邮件总词数为1000,单词表大小 n = 5000 n = 5000 n=5000。使用拉普拉斯平滑( α = 1 \alpha = 1 α=1):
P ( 彩票 ∣ Spam ) = 0 + 1 1000 + 1 × 5000 = 1 6000 ≈ 0.000167 P(\text{彩票}|\text{Spam}) = \frac{0 + 1}{1000 + 1 \times 5000} = \frac{1}{6000} \approx 0.000167 P(彩票∣Spam)=1000+1×50000+1=60001≈0.000167
这样,即使“彩票”没有出现,概率也不为零,避免了零概率问题。
二、应用案例(垃圾邮件识别)
待更新。。。
