朴素贝叶斯

2019-08-25  本文已影响0人  xingzai

  朴素贝叶斯属于生成方法。朴素体现在样本独立同分布及特征属性条件独立。朴素贝叶斯很直观,计算量不大,在很多领域有广泛的应用

事实上,概率模型的训练过程就是参数估计的过程,对于参数估计:

贝叶斯学派的思想可以概括为先验概率+数据=后验概率。
条件独立公式,如果X和Y相互独立:
P(X,Y) = P(X)P(Y)条件概率公式:P(Y|X) = \frac{P(X,Y)}{P(X)}P(X|Y) = \frac{P(X,Y)}{P(Y)},则P(Y|X) = \frac{P(Y)P(X|Y)}{P(X)}全概率公式:P(X) = \sum_kP(X|Y=Y_k)P(Y_k),其中\sum_kP(Y_k) = 1
从上面的公式很容易得出贝叶斯公式:P(Y_k|X) = \frac{P(Y)P(X|Y)}{ \sum_kP(X|Y=Y_k)P(Y_k)}

1. 朴素贝叶斯模型

假如我们的分类模型样本是:(x_1^{(1)},x_2^{(1)},...,x_n^{(1)},y_1),(x_1^{(2)},x_2^{(2)},...,x_n^{(2)},y_2),...,(x_1^{(m)},x_2^{(m)},...,x_n^{(m)},y_m)
即我们有m个样本,每个样本有n个特征,特征输出有K个类别,定义为C_1,C_2,...,C_K

从样本我们可以学习得到朴素贝叶斯的先验分布P(Y=C_k),(𝑘=1,2,...𝐾),接着学习到条件概率分布P(X=x|Y=C_k)=P(X_1=x_1,X_2=x_2,...,X_n=x_n|Y=C_k),然后就可以用贝叶斯公式得到XY的联合分布P(X,Y)了。联合分布P(X,Y)定义为:P(X,Y=C_k) = P(Y=C_k)P(X=x|Y=C_k)=P(X_1=x_1,X_2=x_2,...,X_n=x_n|Y=C_k)从上面的式子可以看出P(Y=C_k)比较容易通过最大似然法求出,得到的P(Y=C_k)就是类别C_k在训练集里面出现的频率。但是P(X=x|Y=C_k)很难求出,这是一个超级复杂的有n个维度的条件分布。朴素贝叶斯模型在这里做了一个大胆的假设,即X的n个维度之间相互独立,这样就可以得出:P(X_1=x_1,X_2=x_2,...,X_n=x_n|Y=C_k) = P(X_1=x_1|Y=C_k)P(X_2=x_2|Y=C_k)...P(X_n=x_n|Y=C_k)
  从上式可以看出,这个很难的条件分布大大的简化了,但是这也可能带来预测的不准确性。你会说如果我的特征之间非常不独立怎么办?如果真是非常不独立的话,那就尽量不要使用朴素贝叶斯模型了,考虑使用其他的分类方法比较好。但是一般情况下,样本的特征之间独立这个条件的确是弱成立的,尤其是数据量非常大的时候。虽然我们牺牲了准确性,但是得到的好处是模型的条件分布的计算大大简化了,这就是贝叶斯模型的选择。

  对于测试样本,既然是贝叶斯模型,当然是后验概率最大化来判断分类了。我们只要计算出所有的K个条件概率𝑃(𝑌=𝐶𝑘|𝑋=𝑋(𝑡𝑒𝑠𝑡)),然后找出最大的条件概率对应的类别,这就是朴素贝叶斯的预测了。

2. 朴素贝叶斯的推断过程

  我们预测的类别𝐶_{𝑟𝑒𝑠𝑢𝑙𝑡}是使P(Y=C_k|X=X^{(test)})最大化的类别,数学表达式为:
𝐶_{𝑟𝑒𝑠𝑢𝑙𝑡} = argmax_{C_k}P(Y=C_k|X=X^{(test)}) = argmax_{C_k}\frac{P(X=X^{(test)}|Y=C_k)P(Y=C_k)}{P(X=X^{(test)})}
由于对于所有的类别,上式的分母是一样的,因此,预测公式可以简化为:
𝐶_{𝑟𝑒𝑠𝑢𝑙𝑡} = argmax_{C_k}P(X=X^{(test)}|Y=C_k)P(Y=C_k)
接着我们利用朴素贝叶斯的独立性假设,就可以得到通常意义上的朴素贝叶斯推断公式:
𝐶_{𝑟𝑒𝑠𝑢𝑙𝑡} = argmax_{C_k}P(Y=C_k)\prod_{j=1}^nP(X=X^{(test)}|Y=C_k)

3. 朴素贝叶斯的参数估计

  在上一节中,我们知道只要求出P(Y=C_k)P(X=X^{(test)}|Y=C_k), (𝑗=1,2,...𝑛),我们通过比较就可以得到朴素贝叶斯的推断结果。这一节我们就讨论怎么通过训练集计算这两个概率。

对于P(Y=C_k),比较简单,通过极大似然估计我们很容易得到P(Y=C_k)为样本类别C_k出现的频率,即样本类别C_k出现的次数𝑚𝑘除以样本总数m。

对于P(X=X^{(test)}|Y=C_k), (𝑗=1,2,...𝑛),这个取决于我们的先验条件:

从上面的计算可以看出,NB没有复杂的求导和矩阵运算,因此效率很高。

总结
朴素贝叶斯的主要优点有:

朴素贝叶斯的主要缺点有:

4. 朴素贝叶斯实战

sklearn 中有3种不同类型的朴素贝叶斯,对应上节提到的三种条件概率求法:

我们使用 iris 数据集进行分类

from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import cross_val_score
from sklearn import datasets
iris = datasets.load_iris()
gnb = GaussianNB()
scores = cross_val_score(gnb, iris.data, iris.target, cv=10)
print("Accuracy:%.3f"%scores.mean())
"""
Accuracy:0.953
"""
上一篇 下一篇

猜你喜欢

热点阅读