朴素贝叶斯 后验概率最大化的含义

本文探讨了朴素贝叶斯分类器的工作原理,即如何通过最大化后验概率来实现期望风险最小化。文章详细推导了在0-1损失函数下,朴素贝叶斯法如何转化为寻找使得条件期望最小的类别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

朴素贝叶斯法将实例分到后验概率最大化的类中。这等价与期望风险最小化。假设选取的是0-1损失函数,

L(y,f(x))={10yf(x)y=f(x)

这是期望风险函数为
Rexp(f)===DXYL(y,f(x))P(x,y)dxdyDXDYL(y,f(x))P(y|x)P(x)dxdy=DX[DYL(y,f(x))P(y|x)dy]P(x)dx

其中,DYL(y,f(x))P(y|x)dy称为在X=x时的y的条件期望。

为了使期望风险最小,只需要对每一个X=x逐个极小化。

f(x)=====argminyYDYL(y,f(x))P(y|x)dyargminyYk=1KL(ck,f(x))P(ck|x)argminyYk=1KP(yck|x)argminyY1P(y=ck|x)argmaxyYP(y=ck|x)

根据期望风险最小化准则就得到了后验概率最大化准则。

f(x)=argminckP(ck|X=x)

参考书籍:
《统计学习方法》 李航

### 朴素贝叶斯中的先验概率、后验概率和条件概率 #### 先验概率 先验概率是指在没有任何观测数据之前,根据经验和假设得出的概率。它是关于某个变量本身的独立概率估计,通常表示为 \( P(y) \),其中 \( y \) 表示类别标签。 例如,在垃圾邮件分类问题中,如果已知垃圾邮件的比例为 30%,那么 \( P(\text{垃圾}) = 0.3 \)[^1]。 计算方法通常是基于历史统计数据或领域专家的经验设定。如果没有足够的数据支持,则可以采用均匀分布或其他合理的初始猜测[^2]。 #### 后验概率 后验概率是在观察到某些证据(即特征)之后更新的类别概率。它反映了在给定条件下某一事件发生的可能性大小,形式化表达为 \( P(y|x) \),其中 \( x \) 是输入特征向量,\( y \) 是目标类别。 根据贝叶斯公式: \[ P(y|x) = \frac{P(x|y)P(y)}{P(x)} \] 可以看到,后验概率由条件概率 \( P(x|y) \) 和先验概率 \( P(y) \) 的乘积除以边缘概率 \( P(x) \) 得出。 实际应用中,由于分母 \( P(x) \) 对于所有类别来说都是相同的常数项,因此可以通过比较分子部分来简化计算并找到最大后验概率对应的类别。 #### 条件概率(似然) 条件概率描述了一个随机变量在另一个特定值已经发生情况下的取值规律,写作 \( P(x|y) \) 或者称为“似然”。这代表当样本被标记成某类时其属性呈现某种状态的可能性有多大。比如在一个文档分类场景下,“单词‘免费’出现在一封电子邮件里”的几率就可以看作是该词相对于正反两类的不同表现程度之一。 为了便于理解和操作,朴素贝叶斯模型假定了各个维度之间相互独立这一特性,从而允许我们将联合分布分解开来分别对待每一个组成部分单独建模再组合起来形成最终的结果[^3]: \[ P(x|y) = \prod_{i=1}^{n} P(x_i | y) \] 这意味着只需要知道单个特征与每种类别之间的关联即可完成整个系统的构建工作流程。 ```python import numpy as np def calculate_prior(train_labels): """Calculate prior probabilities.""" unique, counts = np.unique(train_labels, return_counts=True) total_count = sum(counts) priors = {label: count / total_count for label, count in zip(unique, counts)} return priors def estimate_likelihood(feature_values, class_label, train_data, smoothing_factor=1e-9): """Estimate likelihood using Laplace smoothing.""" feature_class_data = train_data[train_data['class'] == class_label]['feature'] value_counts = feature_class_data.value_counts() # Apply Laplace Smoothing to avoid zero probability issues. num_unique_features = len(value_counts) smoothed_probabilities = { val: ((value_counts.get(val, 0) + smoothing_factor) / (len(feature_class_data) + num_unique_features * smoothing_factor)) for val in set(feature_values).union(set(value_counts.index)) } return smoothed_probabilities ``` 上述代码片段展示了如何估算先验概率以及考虑拉普拉斯平滑后的条件概率估计过程。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhengjihao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值