zoukankan      html  css  js  c++  java
  • 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 方法调用朴素贝叶斯模型,可能会损失一部分全局效果。所以建议截取样本尽量接近内存允许的最大值。

  • 相关阅读:
    mysql左连接、右链接、内连接
    各种排序算法及其java程序实现(转载)
    将Android手机设备挂载到ubuntu中
    EditText 不让其自动获取焦点
    Ubuntu安装JDK+Tomcat+Eclipse以及Android adb配置环境变量
    ADT22解决引用第三方jar提示java.lang.NoClassDefFoundError
    winform实现类似google的搜索提示Suggest Search
    抽象工厂模式
    各种小知识随笔
    CSS知识点【待整理】
  • 原文地址:https://www.cnblogs.com/zhaoxy/p/5075466.html
Copyright © 2011-2022 走看看