【sklearn第十三讲】Naive Bayes分类器

机器学习训练营——机器学习爱好者的自由交流空间(入群联系qq:2279055353)

Naive Bayes方法是一组有监督学习算法,它根据贝叶斯(Bayes)理论,并假设每一对特征之间是独立的。给定特征向量 x 1 , … , x n x_1, \dots, x_n x1,,xn 和类变量 y y y, Bayes理论阐明下面的关系:
P ( y ∣ x 1 , … , x n ) = p ( y ) p ( x 1 , … , x n ∣ y ) p ( x 1 , … , x n ) \mathcal{P}(y | x_1, \dots, x_n)=\frac{\mathcal{p}(y)\mathcal{p}(x_1, \dots, x_n | y)}{\mathcal{p}(x_1, \dots, x_n)} P(yx1,,xn)=p(x1,,xn)p(y)p(x1,,xny)

使用Naive独立性假设

P ( x i ∣ y , x 1 , … , x i − 1 , x i + 1 , … , x n ) = P ( x i ∣ y ) \mathcal{P}(x_i | y, x_1, \dots, x_{i-1}, x_{i+1}, \dots, x_n)=\mathcal{P}(x_i | y) P(xiy,x1,,xi1,xi+1,,xn)=P(xiy)

这样,Bayes公式可以简化为

P ( y ∣ x 1 , … , x n ) = p ( y ) ∏ i = 1 n P ( x i ∣ y ) p ( x 1 , … , x n ) \mathcal{P}(y | x_1, \dots, x_n)=\frac{\mathcal{p}(y)\prod\limits_{i=1}^n\mathcal{P}(x_i | y)}{\mathcal{p}(x_1, \dots, x_n)} P(yx1,,xn)=p(x1,,xn)p(y)i=1nP(xiy)

给定输入 x 1 , … , x n x_1, \dots, x_n x1,,xn 上式的分母是常数。我们能使用下面的分类规则:

P ( y ∣ x 1 , … , x n ) ∝ p ( y ) ∏ i = 1 n P ( x i ∣ y ) \mathcal{P}(y | x_1, \dots, x_n)\propto\mathcal{p}(y)\prod\limits_{i=1}^n\mathcal{P}(x_i | y) P(yx1,,xn)p(y)i=1nP(xiy)

y ^ = arg ⁡ min ⁡ y p ( y ) ∏ i = 1 n P ( x i ∣ y ) \hat{y}=\mathop{\arg\min}_{y} \mathcal{p}(y)\prod\limits_{i=1}^n\mathcal{P}(x_i | y) y^=argminyp(y)i=1nP(xiy)

我们使用最大后验概率(Maximum A Posteriori, MAP)估计 P ( y ) ,   P ( x i ∣ y ) \mathcal{P}(y),\,\mathcal{P}(x_i | y) P(y),P(xiy). P ( y ) \mathcal{P}(y) P(y) 用类 y y y 在训练集的相对频率来估计。不同的naive Bayes分类器的区别主要在关于 P ( x i ∣ y ) \mathcal{P}(x_i | y) P(xiy) 分布的假设。

尽管假设简单, naive Bayes分类器在很多真实的分类问题,例如文档分类、垃圾邮件过滤,效果很理想。它只需要少量的训练数据去估计必要的参数。而且,相比其它复杂的方法, naive Bayes分类器执行非常快,类条件特征分布的可分解性意味着,每一个分布都可以作为一维分布独立地估计。反过来说,尽管naive Bayes是一个适宜的分类器,但是它的估计量并不好,因此,来自predict_proba的概率输出结果建议只作为参考。

Gaussian Naive Bayes

GaussianNB执行Gaussian Naive Bayes分类算法。假设特征的似然是高斯分布:

P ( x i ∣ y ) = 1 2 π σ y 2 exp ⁡ ( − ( x i − μ y ) 2 2 σ y 2 ) \mathcal{P}(x_i | y)=\frac{1}{\sqrt{2\pi\sigma_y^2}}\exp(-\frac{(x_i-\mu_y)^2}{2\sigma_y^2}) P(xiy)=2πσy2 1exp(2σy2(xiμy)2)

参数 μ y , σ y \mu_y, \sigma_y μy,σy 使用最大似然法估计。

from sklearn import datasets
iris = datasets.load_iris()
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
y_pred = gnb.fit(iris.data, iris.target).predict(iris.data)
print("Number of mislabeled points out of a total %d points : %d"
       % (iris.data.shape[0],(iris.target != y_pred).sum()))

这里写图片描述

Multinomial Naive Bayes

MultinomialNB执行多元正态分布数据的naive Bayes算法。该算法典型地用于文本分类(文本数据通常用词计数向量表示,例如tf-idf向量)。对于每一个类 y y y, 分布经向量 θ y = ( θ y 1 , … , θ y n ) \theta_y=(\theta_{y1}, \dots, \theta_{yn}) θy=(θy1,,θyn) 参数化, n n n 是特征数(在文本分类里,是词条数目), θ y i \theta_{yi} θyi 即概率 P ( x i ∣ y ) \mathcal{P}(x_i | y) P(xiy), 出现在一个样本里的特征 i i i 属于类 y y y 的概率。

参数 θ y \theta_y θy 由最大似然的平滑版本估计,即,相对频率计数:
θ ^ y i = N y i + α N y + α n \hat{\theta}_{yi}=\frac{N_{yi}+\alpha}{N_y +\alpha n} θ^yi=Ny+αnNyi+α

这里, N y i = ∑ x ∈ T x i N_{yi}=\mathop{\sum}_{x\in T} x_i Nyi=xTxi, 是特征 i i i 出现在训练集的标签为 y y y 的样本个数。 N y = ∑ i = 1 ∣ T ∣ N y i N_y=\sum\limits_{i=1}^{|T|} N_{yi} Ny=i=1TNyi, 所有特征的具有类标签 y y y 的样本总数。平滑先验 α > 0 \alpha>0 α>0, 考虑了没有出现在学习样本的特征,避免未来计算可能出现0概率的情况。设置 α = 1 \alpha=1 α=1 称 Laplace平滑, α < 1 \alpha<1 α<1 称Lidstone平滑。

Bernoulli Naive Bayes

BernoulliNB执行多变量Bernoulli分布数据的naive Bayes分类算法。即,有多个特征,假设每一个特征是二值变量。因此,类要求样本由二值的特征向量表示。如果处理任何其它类型的数据,一个BernoulliNB实例可以二值化输入(依靠binarize参数)。Bernoulli naive Bayes的决策规则是根据:
P ( x i ∣ y ) = P ( i ∣ y ) x i + ( 1 − P ( i ∣ y ) ) ( 1 − x i ) \mathcal{P}(x_i | y)=\mathcal{P}(i | y)x_i + (1-\mathcal{P}(i | y))(1-x_i) P(xiy)=P(iy)xi+(1P(iy))(1xi)
区别于Multinomial Naive Bayes规则的是,它明确地惩罚了一个作为类 y y y 指示器的特征 i i i 不发生的情况,而Multinomial Naive Bayes只是忽略了一个不发生的特征。

在文本分类问题里,词出现向量(注意,不是词出现计数向量)可以被用来训练和使用该分类器。BernoulliNB在某些数据集上可能表现更好,特别是短文档。如果时间允许的话,建议两个模型都作评价。

阅读更多精彩内容,请关注微信公众号:统计学习与大数据

你可能感兴趣的:(【sklearn第十三讲】Naive Bayes分类器)