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

机器学习训练营——机器学习爱好者的自由交流空间(qq 群号:696721295)

Naive Bayes方法是一组有监督学习算法,它根据贝叶斯(Bayes)理论,并假设每一对特征之间是独立的。给定特征向量 x 1 , , x n 和类变量 y , Bayes理论阐明下面的关系:

P ( y | x 1 , , x n ) = p ( y ) p ( x 1 , , x n | y ) p ( x 1 , , x n )

使用Naive独立性假设

P ( x i | y , x 1 , , x i 1 , x i + 1 , , x n ) = P ( x i | y )

这样,Bayes公式可以简化为

P ( y | x 1 , , x n ) = p ( y ) i = 1 n P ( x i | y ) p ( x 1 , , x n )

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

P ( y | x 1 , , x n ) p ( y ) i = 1 n P ( x i | y )

y ^ = arg min y p ( y ) i = 1 n P ( x i | y )

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

尽管假设简单, 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 )

参数 μ 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 1 , , θ y n ) 参数化, n 是特征数(在文本分类里,是词条数目), θ y i 即概率 P ( x i | y ) , 出现在一个样本里的特征 i 属于类 y 的概率。

参数 θ y 由最大似然的平滑版本估计,即,相对频率计数:

θ ^ y i = N y i + α N y + α n

这里, N y i = x T x i , 是特征 i 出现在训练集的标签为 y 的样本个数。 N y = i = 1 | T | N y i , 所有特征的具有类标签 y 的样本总数。平滑先验 α > 0 , 考虑了没有出现在学习样本的特征,避免未来计算可能出现0概率的情况。设置 α = 1 称 Laplace平滑, α < 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 )

区别于Multinomial Naive Bayes规则的是,它明确地惩罚了一个作为类 y 指示器的特征 i 不发生的情况,而Multinomial Naive Bayes只是忽略了一个不发生的特征。

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

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

猜你喜欢

转载自blog.csdn.net/wong2016/article/details/80719885