scikit-learn学习

1.9. Naive Bayes

朴素贝叶斯是一种监督学习的算法,基于贝叶斯公式和“朴素”的假设——特征之间相互独立。给出分类变量y和相互之间独立的特征x1到xn,贝叶斯公式如下:

根据独立性假设有

对于所有的i,它们的关系可以表示为

上面的公式中,P(x1,x2,...,xn)为一个常数,因此可以用下面的判别规则:

我们用最大后验概率(MAP)估计 P(y) 和 P(xi|y);后者为测试集中分类 y 的条件概率。

不同朴素贝叶斯之间的区别主要是它们对分布的假设 P(xi|y)不同。

尽管假设过于简单,但在实际情况下,朴素贝叶斯分类的效果却很好,尤其是文本分类和垃圾邮件过滤。它只需要小量样本去估计必要的参数。(理论上,朴素贝叶斯效果好的原因为,和适用怎样的数据集,可参看下面的文献。)

朴素贝叶斯学习和分类比其他先进的方法更快。分类的特征分布可以被分解为每个一维特征的条件分布。这避免了因为维度增加导致的问题。(This in turn helps to alleviate problems stemming from the curse of dimensionality.)

另一方面,尽管众所周知,朴素贝叶斯是一个实用的分类器,但它却有一个不好的假设,所以, predict_proba 预测的概率,进攻参考使用。

References:

1.9.1. Gaussian Naive Bayes

GaussianNB 用于高斯朴素贝叶斯分类算法。它假设特征分布近似高斯分布:

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

1.9.2. Multinomial Naive Bayes

 MultinomialNB 用于多项式分布朴素贝叶斯算法,是两种经典的贝叶斯算法之一,被用于文本分类(数据常用词频向量表示,tf-idf向量也常使用)。每个分类 y 的分布被参数化为向量 θy = (θy1,θy2,...,θyn),n 为特征的个数(文本分类中,为单词的个数),θyi 表示条件概率 P(xi|y), 即特征 i 在分类 y 中出现的概率。

参数 θy 用平滑极大似然估计,与其出现的频次有关:

其中, 表示测试数据集 T 中,分类 y 的第 i 个特征出现的次数,而 表示分类 y 的所有特征出现的次数。

平滑系数 α ≧ 0, 为了防止后续计算中出现测试样本中没有的特征,概率为0的情况。设置 α = 1,叫做Laplace平滑,而 α < 1,叫做 Lidstone平滑。

1.9.3. Bernoulli Naive Bayes

 BernoulliNB 用于数据分布为多项贝努利分布的朴素贝叶斯模型训练和预测;也就是说有多个特征,并且每个特征的值为二分类变量。因此,要就样本特征被表示成二分类的向量;如果包含任何其他数据, BernoulliNB 会将其转化为二分类(参数 binarize 可控制转化方法)。

贝努力朴素贝叶斯的判断规则基于:

与多项式贝努力判断规则不同, in that it explicitly penalizes the non-occurrence of a feature i that is an indicator for class y, where the multinomial variant would simply ignore a non-occurring feature.

文本分类的例子中,词频向量用于测试,并且分类。一些情况下,BernoulliNB 的效果会更好,尤其是一些短的文档。时间允许的情况下,可以尝试两种方法。

References:

1.9.4. Out-of-core naive Bayes model fitting

 朴素贝叶斯被用于解决大规模的分类问题时,数据训练可能不适合在内存中进行。解决这个问题, MultinomialNB, BernoulliNB, and GaussianNB 可以与 partial_fit配合增量的训练,见例子Out-of-core classification of text documents两个离散型分类器支持样本权重,GaussianNB 不支持。

与  fit 方法相比, partial_fit 第一次训练时,需要传递所有的分类标签列表。

查看 scikit-learn 中的内容,查看文档 out-of-core learning

笔记:partial_fit 方法调用朴素贝叶斯模型,可能会损失一部分全局效果。所以建议截取样本尽量接近内存允许的最大值。

原文地址:https://www.cnblogs.com/zhaoxy/p/5075466.html