极大似然估计法推出朴素贝叶斯法中的先验概率估计公式

本文介绍了如何使用极大似然估计法推导朴素贝叶斯分类器中先验概率的估计公式。通过概率表示、极大似然函数及拉格朗日乘子法,详细阐述了计算过程。
令参数 P(Y=c_k)=\theta_k,其中 k\in \left\{ 1,2..K \right\}

那么随机变量Y的概率可以用参数来表示为一个紧凑的形式 P(Y)=\sum_{k=1}^{K}{\theta_k} I(Y=c_k),I是指示函数 Y=c_k成立时,I=1;否则I=0。


极大似然函数 L(\theta_k;y_1,y_2..y_N)=\prod_{i=1}^{N}P(y_i) =\prod_{k=1}^{K}\theta_k^{N_k} ,其中N为样本总数,
李航所著《统计学习方》中,朴素贝叶斯是基于贝叶斯公式和特征条件独立假设的分类方 [^2]。在朴素贝叶斯的参数估计里采用极大似然估计时,其核心在于通过已知的观察数据来评估模型的参数,也就是在“模型已定,参数未知”的情况下进行操作 [^1]。 对于朴素贝叶斯,需要估计的参数主要是先验概率 \(P(Y = c_k)\) 和条件概率 \(P(X^{(j)} = x^{(j)}|Y = c_k)\)。 先验概率 \(P(Y = c_k)\) 的极大似然估计为: \[P(Y = c_k)=\frac{\sum_{i = 1}^{N}I(y_i = c_k)}{N}\] 其中 \(N\) 是样本容量,\(I(y_i = c_k)\) 是指示函数,当 \(y_i = c_k\) 时 \(I(y_i = c_k)=1\),否则 \(I(y_i = c_k)=0\)。这一估计是通过统计样本中类别 \(c_k\) 出现的频率来近似先验概率。 条件概率 \(P(X^{(j)} = x^{(j)}|Y = c_k)\) 的极大似然估计为: \[P(X^{(j)} = x^{(j)}|Y = c_k)=\frac{\sum_{i = 1}^{N}I(x_i^{(j)} = x^{(j)},y_i = c_k)}{\sum_{i = 1}^{N}I(y_i = c_k)}\] 这里 \(x_i^{(j)}\) 是第 \(i\) 个样本的第 \(j\) 个特征值,该公式是在类别 \(c_k\) 的样本中统计特征 \(X^{(j)}\) 取 \(x^{(j)}\) 的频率来近似条件概率。 通过上述极大似然估计得到先验概率和条件概率估计值后,对于给定的输入 \(x\),就可以利用贝叶斯定理 \(P(Y = c_k|X = x)=\frac{P(Y = c_k)P(X = x|Y = c_k)}{\sum_{k}P(Y = c_k)P(X = x|Y = c_k)}\) 求出后验概率,进而选择后验概率最大的输出 \(y\) 作为分类结果,后验概率最大化等价于期望风险最小化 [^2]。 ```python import numpy as np def prior_probability(y, classes): N = len(y) prior_probs = {} for c in classes: count = np.sum(y == c) prior_probs[c] = count / N return prior_probs def conditional_probability(X, y, classes, features): num_features = X.shape[1] cond_probs = {} for c in classes: class_indices = (y == c) class_X = X[class_indices] class_count = len(class_X) cond_probs[c] = {} for j in range(num_features): unique_values = np.unique(X[:, j]) cond_probs[c][j] = {} for val in unique_values: feature_count = np.sum(class_X[:, j] == val) cond_probs[c][j][val] = feature_count / class_count return cond_probs # 示例数据 X = np.array([[1, 2], [2, 1], [1, 1], [2, 2]]) y = np.array([0, 0, 1, 1]) classes = np.unique(y) features = X.shape[1] # 计算先验概率 prior_probs = prior_probability(y, classes) print("先验概率:", prior_probs) # 计算条件概率 cond_probs = conditional_probability(X, y, classes, features) print("条件概率:", cond_probs) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值