sklearn朴素贝叶斯分类器_scikitlearn—朴素贝叶斯

朴素贝叶斯方法是一组基于Bayes定理的有监督学习算法,在给定数据标签的情况下,每对特征之间条件独立性假设。Bayes定理说明了如下关系,给定类别 y 和相关特征向量 d879712082fc3d4f9caf728d73fc18c6.pngd71f36a3bd5d2819b2f4289310d48f00.pngfbaabff936b83f19cbb6662c5e4203dd.png 使用简单的条件独立性假设 b4758efe7163036921baed4bac9f0573.png 对于所有的 i, 这种关系可以简化为 ee3390ee8e94d4ff6106a7e31389258b.png 由于 3cca0d190e112c7a285e85456884a385.png 在给定输入的情况下是常数,我们可以使用以下分类规则: 32add4e718f7087212e5d89188675734.png 并且我们可以利用最大后验概率(Maximum A Posteriori,MAP)估计  357d919ff9b5722b56d8d29e23c4898c.png8fbe04eba714406db7a450ae5508354c.png ,前者是训练集中类别y的相对频率。 不同的朴素贝叶斯分类器的主要区别在于它们对 8fbe04eba714406db7a450ae5508354c.png 分布的假设。 尽管贝叶斯分类器的假设明显过于简单,但它们在许多实际情况下(在著名的文档分类和垃圾邮件过滤中)都表现良好,它们需要少量的训练数据来估计必要的参数。(理论证明朴素贝叶斯为何能很好地工作,以及它在哪种数据类型上工作,请参见以下参考资料。) 与更复杂的方法相比,朴素贝叶斯学习器和分类器是非常快速的。类条件特征分布的解耦意味着每个特征都可以被独立地估计为一维分布。反过来,这有助于减轻因维数灾难而产生的问题。 另一方面,尽管朴素贝叶斯被认为是一个不错的分类器,但它的结果是一个坏的估计量,因此不要太重视 predict_proba 的概率输出。 参考文献:
  • H. Zhang (2004). The optimality of Naive Bayes. Proc. FLAIRS.

1. 高斯(Gaussian)朴素贝叶斯

GaussianNB 实现了高斯朴素贝叶斯分类算法。假设特征的概率为高斯分布。 fa967eddbd7711f69bb398f74f99ba4f.png 用最大似然法估计参数 50d80b55306c47278e4526fe4191e747.png  和 f6fbd83414bdf20972fec2111e239164.png  。
>>> from sklearn.datasets import load_iris
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.naive_bayes import GaussianNB
>>> X, y = load_iris(return_X_y=True)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=0)
>>> gnb = GaussianNB()
>>> y_pred = gnb.fit(X_train, y_train).predict(X_test)
>>> print("Number of mislabeled points out of a total %d points : %d"
... % (X_test.shape[0], (y_test != y_pred).sum()))
Number of mislabeled points out of a total 75 points : 4

2. 多项式(Multinomial)朴素贝叶斯

MultinomialNB 实现了服从多项式分布数据的朴素Bayes算法,是文本分类中使用的两个经典朴素Bayes变体之一(数据通常表示为词向量,尽管tf-idf向量在实践中也很有效)。对于每个类y,分布由向量 cfe94f7a7a37663f67aa2d2a30a96473.png 来参数化,其中n是特征的数量(在文本分类中,是词汇的大小), 2d4816ea99b2b45af6f2c60957a0d5c5.png 是出现在属于类y的样本的特征i的概率 c3e2d7dde84358beda01340c522fa260.png 。参数 01883833f8323da3f0f145d87dfd8b13.png 由最大似然的平滑版本来估计,即相对频率计数: a613bf2ced5e5fc96fdc393b8f956987.png 其中 22f749cec7437a7339de309671145f00.png 是训练集T中属于类y的样本中特征i出现的次数, 641c686f9e6c2c116185a04520815c25.png 是类y的所有特征的总数。 平滑因子(smoothing priors) α ≥ 0  考虑了学习样本中不存在的特征,并防止进一步计算中出现零概率。设置 α = 1 称为Laplace(拉普拉斯)平滑,而 α < 1 称为Lidstone平滑。

3. 补充(Complement)朴素贝叶斯

ComplementNB 实现了补充朴素Bayes(CNB)算法。CNB是标准多项式朴素Bayes(MNB)算法的一种改进,它特别适合于不平衡数据集。具体来说,CNB使用来自每个类的 complement 中的统计信息来计算模型的权重。CNB的发明者从经验上证明了CNB的参数估计比MNB的参数估计更稳定。此外,CNB在文本分类任务上经常优于MNB(通常有相当大的幅度)。计算权重的步骤如下: 6ae912fa05401a1843f258336807b92c.png 其中对所有不在类c
的文档j求和, 4a69f0a972c796a3e1893b83b2bb7edd.png 是文档j中项i的计数或tf-idf值, 81f30221b576bf750ee71a9c80aea17d.png 是一个类似于MNB中的平滑超参数,并且 α = ∑ i α i 。第二个归一化解决了MNB在较长文档中控制参数估计的问题。分类规则为: 02ea40c81bfd669976410b1840b97bd0.png 即,将文档分配给补全匹配度最低(poorest)的项。 参考文献
  • Rennie, J. D., Shih, L., Teevan, J., & Karger, D. R. (2003). Tackling the poor assumptions of naive bayes text classifiers. In ICML (Vol. 3, pp. 616-623).

4. 伯努利(Bernoulli)朴素贝叶斯

BernoulliNB 实现了用于多元Bernoulli分布数据的朴素Bayes训练和分类算法,即有多个特征,但每个特征都假定为二值(Bernoulli,boolean)变量。因此,此类算法要求样本以二值特征向量表示。如果传递任何其他类型的数据, BernoulliNB 实例可以对其输入进行二值化(取决于 binarize  参数)。 伯努利朴素贝叶斯的决策规则基于 dfddf7b616bd5908f18b5c649be39381.png 伯努利朴素贝叶斯不同于多项式朴素贝叶斯的规则,因为伯努利朴素贝叶斯显式地惩罚了作为类y的预测因子,对于不出现的特征i,多项式朴素贝叶斯会简单地忽略掉。 在文本分类的情况下,可以使用单词出现向量(而不是单词计数向量)来训练和使用该分类器。 BernoulliNB 可能在一些数据集上表现得更好,尤其是那些短文档的数据集。如果时间允许,最好对两种模型进行评估。 参考文献
  • C.D. Manning, P. Raghavan and H. Schütze (2008). Introduction to Information Retrieval. Cambridge University Press, pp. 234-265.
  • A. McCallum and K. Nigam (1998). A comparison of event models for Naive Bayes text classification. Proc. AAAI/ICML-98 Workshop on Learning for Text Categorization, pp. 41-48.
  • V. Metsis, I. Androutsopoulos and G. Paliouras (2006). Spam filtering with Naive Bayes – Which Naive Bayes? 3rd Conf. on Email and Anti-Spam (CEAS).

5. 分类(Categorical)朴素贝叶斯

CategoricalNB  实现了用于分类分布数据的分类朴素贝叶斯算法。它假设每个由索引i描述的特征都有自己的分类分布。 对于训练集X中的每个特征i, CategoricalNB 在类y的条件下,估计X的每个特征i的分类分布。样本的索引集定义为 = { 1 , … , m } ,其中m是样本数。 给定类c的特征i中类别t的概率估计为: eeacd8048d513f7bd781a0aa6df1d731.png 其中 edef0471ad2e5785b8f481b34745e30f.png 是属于c类的样本 46cf413db33e64ae28cf39123ac63a45.png 中类别t出现的次数, 9718576bb92ec9d12b7b3b1cc0be652d.png 是c类的样本数,α是平滑参数, 4ae39f83036532f2df5a16bb5ad7477d.png 是特征i的可用类别数。 CategoricalNB  假设对样本矩阵X进行了编码(例如在 OrdinalEncoder 的帮助下),因此每个特征i的所有类别都用数字(,,)表示,其中表示特征i的类别数。

6. Out-of-core 朴素贝叶斯模型拟合

朴素贝叶斯模型可以用来解决大规模的分类问题,在大规模的分类问题下,完整的训练集无法加载在内存中进行训练。为了处理这种情况, MultinomialNB , BernoulliNB , 和 GaussianNB 实现了一个 partial_fit  方法,该方法可以像在Out-of-core classification of text documents中描述的那样,与其他分类器一起增量使用。所有朴素贝叶斯分类器都支持样本加权。 与 fit 方法相反,在第一次调用 partial_fit 的时候需要传递所有类标签列表。 有关scikit-learn中可用方案的概述,请参见 out-of-core learning文档https://urlify.cn/ymUJBn。 注意 朴素贝叶斯模型的  partial_fit  方法在调用时引入了一些计算开销。建议使用尽可能大的数据块大小,即可用RAM允许的大小。

本文由“壹伴编辑器”提供技术支持

☆☆☆为方便大家查阅,小编已将scikit-learn学习路线专栏 文章统一整理到公众号底部菜单栏,同步更新中,关注公众号,点击左下方“系列文章”,如图:

210b22ed88752342344d01c1199d68c1.png

欢迎大家和我一起沿着scikit-learn文档这条路线,一起巩固机器学习算法基础。(添加微信:mthler备注:sklearn学习,一起进【sklearn机器学习进步群】开启打怪升级的学习之旅。)

80d466470f2edc2b21a6eec5c0a252ac.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值