乐趣区

最简单详细朴素贝叶斯算法原理

朴素贝叶斯的原理归根结底就是使用先验概率去计算后验概率。有关先验概率和后验概率请参考先验概率和后验概率最简单理解。

1. 假设有一数据集 X,包含 X1 到 Xn 条数据,每条数据包含 m 个特征(m 维),可以表示为:

$$
X_1:X_1^1、X_1^2、X_1^3….X_1^m
$$

2. 数据集输出 Y 一共有 k 个类别,表示为 1 到 k。
3. 现在,我们根据频率统计得出输出 Y 的概率 P(y=1)、P(y=2)…P(y=k)
4. 我们的问题是想求得测试集 (假设有 j 个) 的分类,即

$$
max[P(y=1|X_{test1})、P(y=2|X_{test1})、P(y=3|X_{test1})…P(y=k|X_{test1})]
$$

$$
max[P(y=1|X_{testn})、P(y=2|X_{testn})、P(y=3|X_{testn})…P(y=k|X_{testn})]
$$

如果测试集数据 1 在 y = 1 的情况下概率最大,则数据 1 的输出为类别 1,同理可得其他。
5. 对于上面的目标公式,我们可以代入条件概率公式计算,即:

$$
P(y=1|X_{test1}) = \frac{P(X_{test1}|y=1)*P(y=1)}{P(X_{test1})}
$$

我们已知 P(y=1)的值,对于分母,因为分母在每一个公式中

$$
P(y=1|X_{test1})、P(y=2|X_{test1})、P(y=3|X_{test1})…P(y=k|X_{test1})
$$

都出现,所以可以省略不计算,所以最后的关键就是计算

$$
P(X_{test1}|y=1)=P(X_{test1}^1,X_{test1}^2,X_{test1}^3..X_{test1}^m|y=1)
$$

6. 朴素贝叶斯算法在这里假设 m 个特征是相互独立的(实际情况并不独立,这里只是为了方便运算,所以算法在这一步计算会有误差存在),公式可以进一步推导为:

$$
P(X_{test1}^1,X_{test1}^2,X_{test1}^3..X_{test1}^m|y=1)=P(X_{test1}^1|y=1)*P(X_{test1}^2|y=1)*P(X_{test1}^3|y=1)…P(X_{test1}^m|y=1)
$$

7. 现在问题有转化为了求解

$$
P(X_{test1}^1|y=1)
$$

$$
P(X_{test1}^2|y=1)到 P(X_{test1}^m|y=1)类同
$$

对于上述公式的求解,需要分为三种情况,第一种情况是数据集 X 的第一维特征(以第一维特征举例)取值是离散的,则第一维特征符合多项式分布:

$$
P(X_{test1}^1|y=1)=\frac{训练集中 X_{test1}^1 值出现的次数}{训练集分类为 1 的样本总的特征计数(不限于第一维)}
$$

但是如果出现分子为 0 的情况,则:

$$
P(X_{test1}^1|y=1)=0
$$

$$
P(X_{test1}^1,X_{test1}^2,X_{test1}^3..X_{test1}^m|y=1)=0*P(X_{test1}^2|y=1)*P(X_{test1}^3|y=1)…P(X_{test1}^m|y=1)=0
$$

仅仅因为一个特征取值不存在就断定当前类别概率为 0,是不公平的,所以在这里引入了拉普拉斯平滑:

$$
P(X_{test1}^1|y=1)=\frac{训练集中 X_{test1}^1 值出现的次数 +1}{训练集分类为 1 的样本总的特征计数(不限于第一维)+ 训练集中第 1 维特征的取值个数}
$$

第二种情况是数据集 X 的第一维特征(以第一维特征举例)取值是离散且稀疏的,那们我们只关心第一维特征的取值是否存在(不为 0),如果存在记为 1,不存在记为 0。则第一维特征符合伯努利分布:

$$
P(X_{test1}^1|y=1) = X_{test1}\frac{训练集中分类为 1 的数据中第一维特征 X^1 不为 0 的数据个数}{训练集中分类为 1 的数据个数}+(1-X_{test1})(1-\frac{训练集中分类为 1 的数据中第一维特征 X^1 不为 0 的数据个数}{训练集中分类为 1 的数据个数})
$$

$$
其中 X_{test1}^1 的取值如果不为 0,即为 1。
$$

第三种情况是数据集 X 的第一维特征(以第一维特征举例)取值是连续的,朴素贝叶斯假设第一维特征的先验概率为正态分布:

$$
P(X_{test1}^1|y=1) = \frac{1}{\sqrt{2\pi\sigma^2_1}}exp(-\frac{(X_{test1}^1-\mu_1)^2}{2\sigma^2_1})
$$

$$
其中 \mu_1 为训练集中第 1 为特征取值的平均值,\sigma^2_1 为训练集中第 1 为特征取值的方差
$$

8.Xtest1 的 y = 1 的情况推导出来后,可以依此类推 y = 2 到 k 的情况,数据的最终输出为概率最大的 y 的值。再以此类推其余测试集的输出,算法结束(~▽~)。

参考博客:https://www.cnblogs.com/pinar…

退出移动版