sklearn中的朴素贝叶斯模型
引入
朴素贝叶斯方法是一系列的监督学习方法, 其中朴素(naive)的含义是假设特征之间是相互独立的. 给定类别y和特征向量x之后, 有:
P(y∣x1,…,xn)=P(x1,…,xn)P(y)P(x1,…xn∣y)
根据朴素性, 即特征之间相互独立的性质, 有:
P(xi∣y,x1,…,xi−1,xi+1,…,xn)=P(xi∣y),
因此, 朴素贝叶斯通过下面的方法进行分类:
可以使用最大后验概率(Maximum A Posteriori, MAP)来对P(y)和P(xi∣y)进行估计.
各种朴素贝叶斯分类器之间的区别, 主要在于假设的P(xi∣y)的分布形式的不同.
尽管假设条件过于理想, 朴素贝叶斯分类器在显示中很多情况下的表现还是很不错的, 例如:
文档分类
垃圾邮件分类
等各种分类问题. 仅需要很少量的数据来训练模型的参数. 关于朴素贝叶斯表现良好的理论解释, 在The optimality of Naive Bayes中有详细的说明.
此外, 相对于其他模型, 朴素贝叶斯一个巨大的优点是训练速度超级快.
但尽管朴素贝叶斯模型是一个表现相当不错的分类器, 但又是一个相当糟糕的estimator, 这里指的是它预测得到的每个类别的概率(predict_proba)是很不可靠的, 没有多少参考价值.
多种朴素贝叶斯模型
Gaussian Naive Bayes
对应于sklearn.naive_bayes.GaussianNB模型. 模型中, 关于特征的似然函数被假设为服从如下的高斯分布:
P(xi∣y)=2πσy21exp(−2σy2(xi−μy)2)
训练过程就是使用最大似然法估计分布参数σy和μy.
Multinomial Naive Bayes
对应于sklearn.naive_bayes.MultinomialNB模型. 适用于符合多项分布的数据. 多使用在text classification场景中, 例如特征是word counts或者tf-idf vectors. 假设有n个特征, 对于每一个类y, 特征向量的分布服从如下的参数向量θy=(θy1,…,θyn). 其中θyi即是P(xi∣y), 即对于一个样本, 特征i在类别y出现的概率.
训练的过程即是评估参数θy的过程, 这里使用带有平滑的最大似然估计, 即参数由以下的方式得到:
θ^yi=Ny+αnNyi+α
其中Nyi=∑x∈Txi是训练集中, 特征i在类别y中出现的次数, Ny=∑i=1nNyi是类别y中所有特征出现的总次数.
加入平滑项α≥0防止在预测中, 某个特征永远不会出现的情况. 其中, 当α=1时, 称为Laplace smoothing, 当α<1时称为Lidstone smoothing.
Complement Naive Bayes
sklearn.naive_bayes.ComplementNB是标准的multinomial naive Bayes(MNB)的一种变形. 特别适用于不平衡的数据集. CNB使用每个类别统计量的互补部分来计算模型的参数权重. 相对于MNB来说, CNB估计得到的参数更稳定, 因此在text classification任务中往往有由于MNB的表现. 模型的参数如下得到:
可以看到, 对于类别c相关参数的计算, 是在所有非c类的样本中加和计算得到的. 其中dij是样本j中特征项i的值, 可以是出现的次数统计或者tf-idf的值. 而且此时的平滑项跟细致, 对于每个特征i都有对应的平滑项αi.
此外, 为了消除长样本对于模型参数的较大影响, 使用如下的方法预测样本的分类结果:
c^=argminc∑itiwci
样本被指认为补足量最小的类, 且与每个特征在该样本中的出现次数ti相关.
相关论文见: Tackling the poor assumptions of naive bayes text classifiers.
Bernoulli Naive Bayes
sklearn.naive_bayes.BernoulliNB假设所有特征都是符合伯努利分布的, 即特征值是二值的. 如果使用在文本分类任务中, 对应的特征就是该单词是否在这个样本中出现过. 程序中如果传入的训练数据是非二值的, 模型也会自动地将其转换成二值类型.
由于xi是二值的, 因此有:
P(xi∣y)=P(i∣y)xi+(1−P(i∣y))(1−xi)
由于它的训练过程与MNB类似, 只是特征值的不同, 因此如果时间允许, 最好使用两套特征分别训练MNB和BNB. 特别的, BNB适用于样本较短的情况(评论, 微博等情况).
参考资料
最后更新于