zoukankan      html  css  js  c++  java
  • 朴素贝叶斯算法,贝叶斯分类算法,贝叶斯定理原理

     朴素贝叶斯算法,贝叶斯分类算法,贝叶斯定理原理

    贝叶斯分类算法是统计学的一种分类方法,它是一类利用概率统计知识进行分类的算法。在许多场合,朴素贝叶斯(Naïve Bayes,NB)分类算法可以与决策树和神经网络分类算法相媲美,该算法能运用到大型数据库中,而且方法简单、分类准确率高、速度快。
    由于贝叶斯定理假设一个属性值对给定类的影响独立于其它属性的值,而此假设在实际情况中经常是不成立的,因此其分类准确率可能会下降。为此,就衍生出许多降低独立性假设的贝叶斯分类算法,如TAN(tree augmented Bayes network)算法。

    朴素贝叶斯算法的核心思想:选择具有最高后验概率作为确定类别的指标。

    --------------------

    朴素贝叶斯算法
    设每个数据样本用一个n维特征向量来描述n个属性的值,即:X={x1,x2,…,xn},假定有m个类,分别用C1, C2,…,Cm表示。给定一个未知的数据样本X(即没有类标号),若朴素贝叶斯分类法将未知的样本X分配给类Ci,则一定是
    P(Ci|X)>P(Cj|X) 1≤j≤m,j≠i
    根据贝叶斯定理
    由于P(X)对于所有类为常数,最大化后验概率P(Ci|X)可转化为最大化先验概率P(X|Ci)P(Ci)。如果训练数据集有许多属性和元组,计算P(X|Ci)的开销可能非常大,为此,通常假设各属性的取值互相独立,这样
    先验概率P(x1|Ci),P(x2|Ci),…,P(xn|Ci)可以从训练数据集求得。
    根据此方法,对一个未知类别的样本X,可以先分别计算出X属于每一个类别Ci的概率P(X|Ci)P(Ci),然后选择其中概率最大的类别作为其类别。
    朴素贝叶斯算法成立的前提是各属性之间互相独立。当数据集满足这种独立性假设时,分类的准确度较高,否则可能较低。另外,该算法没有分类规则输出。

        在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同。对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方法,也就是直接学习出特征输出Y和特征X之间的关系,要么是决策函数Y=f(X)Y=f(X),要么是条件分布P(Y|X)P(Y|X)。但是朴素贝叶斯却是生成方法,也就是直接找出特征输出Y和特征X的联合分布P(X,Y)P(X,Y),然后用P(Y|X)=P(X,Y)/P(X)P(Y|X)=P(X,Y)/P(X)得出。

    朴素贝叶斯很直观,计算量也不大,在很多领域有广泛的应用。

    1. 朴素贝叶斯相关的统计学知识

        在了解朴素贝叶斯的算法之前,我们需要对相关必须的统计学知识做一个回顾。

        贝叶斯学派很古老,但是从诞生到一百年前一直不是主流。主流是频率学派。频率学派的权威皮尔逊和费歇尔都对贝叶斯学派不屑一顾,但是贝叶斯学派硬是凭借在现代特定领域的出色应用表现为自己赢得了半壁江山。

        贝叶斯学派的思想可以概括为先验概率+数据=后验概率。也就是说我们在实际问题中需要得到的后验概率,可以通过先验概率和数据一起综合得到。数据大家好理解,被频率学派攻击的是先验概率,一般来说先验概率就是我们对于数据所在领域的历史经验,但是这个经验常常难以量化或者模型化,于是贝叶斯学派大胆的假设先验分布的模型,比如正态分布,beta分布等。这个假设一般没有特定的依据,因此一直被频率学派认为很荒谬。虽然难以从严密的数学逻辑里推出贝叶斯学派的逻辑,但是在很多实际应用中,贝叶斯理论很好用,比如垃圾邮件分类,文本分类。

       

     2. 朴素贝叶斯的模型

        

    3. 朴素贝叶斯的推断过程

        朴素贝叶斯的完整推断过程:

    4. 朴素贝叶斯的参数估计

        

     

    5.  朴素贝叶斯算法过程

        我们假设训练集为m个样本n个维度,如下:

        共有K个特征输出类别,分别为C1,C2,...,CKC1,C2,...,CK,每个特征输出类别的样本个数为m1,m2,...,mKm1,m2,...,mK,在第k个类别中,如果是离散特征,则特征XjXj各个类别取值为mjlmjl。其中l取值为1,2,...Sj1,2,...Sj,SjSj为特征j不同的取值数。

        输出为实例X(test)X(test)的分类。

        算法流程如下:

        1) 如果没有Y的先验概率,则计算Y的K个先验概率:P(Y=Ck)=mk/mP(Y=Ck)=mk/m,否则P(Y=Ck)P(Y=Ck)为输入的先验概率。

        2) 分别计算第k个类别的第j维特征的第l个个取值条件概率:P(Xj=xjl|Y=Ck)P(Xj=xjl|Y=Ck)

          a)如果是离散值:

          λλ可以取值为1,或者其他大于0的数字。

          b)如果是稀疏二项离散值:

           此时ll只有两种取值。

          c)如果是连续值不需要计算各个l的取值概率,直接求正态分布的参数:

          需要求出μkσ2kμk和σk2。 μkμk为在样本类别CkCk中,所有XjXj的平均值。σ2kσk2为在样本类别CkCk中,所有XjXj的方差。

       

         从上面的计算可以看出,没有复杂的求导和矩阵运算,因此效率很高。

    6.  朴素贝叶斯算法小结

        朴素贝叶斯的主要优点有:

        1)朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。

        2)对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练。

        3)对缺失数据不太敏感,算法也比较简单,常用于文本分类。

        朴素贝叶斯的主要缺点有:   

        1) 理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型给定输出类别的情况下,假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。

        2)需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。

        3)由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率。

        4)对输入数据的表达形式很敏感。
  • 相关阅读:
    centos7 安装jdk 1.8
    CentOS查看Java进程并部署jar包
    Mybatis传多个参数(三种解决方案)
    mybatis使用注解往postgresql数据库表insert数据[主键自增]的写法
    在Linux上安装tomcat和JDK
    Linux下部署springboot项目的步骤及过程
    maven安装第三方jar包到本地仓库
    Android 开源动画框架:NineOldAndroids
    Android多国语言的value文件夹命名方式
    C++编程经验-返回局部变量的讨论(转)
  • 原文地址:https://www.cnblogs.com/zdz8207/p/ai-psbys.html
Copyright © 2011-2022 走看看