页面树结构

2017-11-09 ApacheCN 开源组织,第二期邀请成员活动,一起走的更远 : http://www.apachecn.org/member/209.html


MachineLearning 优酷地址 : http://i.youku.com/apachecn

转至元数据结尾
转至元数据起始

朴素贝叶斯

朴素贝叶斯方法是一套基于贝叶斯定理的监督学习算法,在每一对特征之间采用独立的 “naive” 假设。给定一个类变量 y 和一个从属特征向量 x_1 到 x_n ,贝叶斯定理表示以下关系:

使用 naive ( 天真 ) 独立假设:

对于所有的 i ,这种关系被简化为:

由于  给定输入是常数,所以我们可以使用以下分类规则:

我们可以使用 Maximum A Posteriori ( 最大后验 ) ( MAP ) 估计来估计P(y) 和  ; 那么前者是训练集中的类 ÿ 的相对频率。

不同的朴素贝叶斯分类器主要取决于它们对  的分布的假设。

尽管他们显然过于简化的假设,但朴素贝叶斯分类器在许多现实世界的情况下都有很好的效果,有著名的文档分类和垃圾邮件过滤。他们需要少量的训练数据来估计必要的参数。( 为了了解到朴素贝叶斯运作良好,并且在哪类数据上运行良好的假想的原因,请看下文。 )

与更复杂的方法相比,朴素贝叶斯 learners ( 学习器 )和 classifiers ( 分类器 ) 可以非常快。类条件特征分布的解耦意味着每个分布可以独立地估计为一维分布。这又有助于缓解 the curse of dimensionality ( 维度惩罚 ) 所引起的问题。

另一方面,虽然朴素贝叶斯被认为是一个还不错的分类器,但它被认为是一个不好的 estimator ( 估计器 ) ,所以来自 predict_proba 的概率输出不被过于重视。

参考

Gaussian Naive Bayes ( 高斯朴素贝叶斯 )

GaussianNB 实现高斯朴素贝叶斯算法进行分类。 特征的可能性被假设为高斯:

使用最大似然估计参数  和  :

>>> 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()))
Number of mislabeled points out of a total 150 points : 6

Multinomial Naive Bayes ( 多项朴素贝叶斯 )

MultinomialNB 实现了多元分布数据的朴素贝叶斯算法,并且是文本分类中使用的两种经典朴素贝叶斯变体之一(其中数据通常表示为字向量计数,尽管 tf-idf 向量在实践中也可以很好地工作。)分布由每个类 y 的向量  参数化,其中 n 是特征的数量 ( 在文本分类中,代表的是词汇的多少 )  和  是出现在类 y 的样本中的特征 i 的概率  。

通过 smoothed version ( 平滑版本 ) 的最大似然估计参数  ,即相对频率计数:

其中  是特征 i 出现在训练集 T 中的类 y 的样本中的次数,并且  是 y 类的所有特征的总计数。

smoothing priors ( 平滑先验 )  考虑了学习样本中不存在的特征,并防止进一步计算中的零概率。设置  被称为 Laplace smoothing ( 拉普拉斯平滑 ),而  称为 Lidstone smoothing

Bernoulli Naive Bayes ( 伯努利朴素贝叶斯 )

BernoulliNB 针对根据多元伯努利分布分布的数据实现了朴素的贝叶斯训练和分类算法;即,可以存在多个特征,但是每个都被假定为二进制值(Bernoulliboolean)变量。因此,该类要求样本被表示为二进制值特征向量;如果交给任何其他类型的数据,BernoulliNB 实例可以二进制化其输入(取决于二进制参数)。

伯努利朴素贝叶斯的决策规则是基于:

其与多项朴素贝叶斯的不同之处在于,它明确地惩罚了作为 y 类的指示符的特征 i 的不发生,其中 multinomial variant ( 多项变体 ) 将简单地忽略不发生的特征。

在文本分类的情况下,可以使用 word occurrence vectors ( 词出现向量 ) ( 而不是字计数向量 ) 来训练和使用该分类器。BernoulliNB 可能会在某些数据集上表现更好,尤其是文档较短的数据集。如果时间允许,建议对两种型号进行评估。

参考:

Out-of-core naive Bayes model fitting ( 超核的朴素贝叶斯模型拟合 )

朴素贝叶斯模型可用于解决大规模分类问题,完整的训练集可能不适合记忆。为了处理这种情况,MultinomialNB BernoulliNB 和 GaussianNB 公开了一个 partial_fit 方法,可以像其他分类器那样逐步使用,如文本文档的 Out-of-core classification ( 超核分类 )所示。所有朴素贝叶斯分类器都支持 sample weighting ( 样本加权 )。

fit 方法相反,第一次调用 partial_fit  需要传递所有预期 class labels ( 类标签 )的列表。

有关 scikit-learn 中可用策略的概述,请参阅 out-of-core learning 文档

重要

naive Bayes 模型的 partial_fit 方法调用引入了一些计算开销。 建议使用尽可能大的数据块大小,即可用 RAM 允许。

  • 无标签