zoukankan      html  css  js  c++  java
  • 贝叶斯分类器

      本文主要介绍一个常见的分类框架--贝叶斯分类器。这篇文章分为三个部分:1. 贝叶斯决策论;2. 朴素贝叶斯分类器; 3. 半朴素贝叶斯分类器

      贝叶斯决策论

      在介绍贝叶斯决策论之前,先介绍两个概念:先验概率(prior probability)和后验概率(posterior probability)。

      直观上来讲, 先验概率 是指在事件未发生时,估计该事件发生的概率。比如投掷一枚匀质硬币,“字”朝上的概率。后验概率是指基于某个发生的条件事件,估计某个事件的概率,它是一个条件概率。比如一个盒子里面有5个球,两个红球,三个白球,求在取出一个红球后,再取出白球的概率。

      在wiki上, 先验概率的定义为:A prior probability is a marginal probability, interpreted as a description of what is known about a variable in the absence of some evidence。 后验概率的定义为:The posterior probability is the conditional probability of the variable taking the evidence into account. The probability is computed from the prior and the likelihood function via Baye's theorem.

      现在以分类任务为例。 首先假设有N种可能的类别标签, 即y={c1, c2, ..., cN}, λij 表示将一个真实标记为cj的样本误分类为ci时产生的损失。后验概率p(ci|x)表示将样本x分类给ci是的概率。那么将样本x分类成ci产生的条件风险(conditional risk)为:

     

      其中,P(cj|x) 表示样本x分类成cj类的概率,λij 表示将真实cj类误分类为ci类的损失。所以这个公式就是将x属于其他类(除ci类外)的概率与对应的误分类为ci的损失乘积之和。

    我们的目标是寻找一个判定标准,以最小化总体的风险。这个判定准则也叫做贝叶斯判定准则(Bayes decision rule): 为最小化总体风险,只需要在每个样本上选择那个能使条件风险R(c|x)最小的类别标记,即

      此时,h称为贝叶斯最优分类器(Bayes optional classifier),与之对应的总体风险R(h)称之为贝叶斯风险(Bayes risk). 1-R(h*)反映了分类器所能达到的最好性能,即理论上限。

    如果把λij定义为:

      那么风险函数可以改写为:

    (只有当i==j的时候 λij为0 ,由于概率密度的归一化,只需要用1减去i==j的情况就是我们期望的解)

      那么贝叶斯最优分类器的公式可以改写为:

     
      为了最优化上面的函数,我们必须要知道后验概率p(c|x).但是在现实任务中,很难直接知道这个概率值,所以需要我们使用现有的训练数据估计出这个后验概率。这时候就需要使用贝叶斯公式:
     
      

            先验概率p(c)和类条件概率p(x|c)(各类的总体分布)都是未知的。根据仅有的样本数据进行分类时,一种可行的办法是我们需要先对先验概率和类条件概率进行估计,然后再套用贝叶斯分类器。

            先验概率的估计较简单,1、每个样本所属的自然状态都是已知的(有监督学习);2、依靠经验;3、用训练样本中各类出现的频率估计。

            类条件概率的估计(非常难),原因包括:概率密度函数包含了一个随机变量的全部信息;样本数据可能不多;特征向量x的维度可能很大等等。总之要直接估计类条件概率的密度函数很难。解决的办法就是,把估计完全未知的概率密度转化为估计参数。这里就将概率密度估计问题转化为参数估计问题,极大似然估计就是一种参数估计方法。当然了,概率密度函数的选取很重要,模型正确,在样本区域无穷时,我们会得到较准确的估计值,如果模型都错了,那估计半天的参数,肯定也没啥意义了。上面说到,参数估计问题只是实际问题求解过程中的一种简化方法(由于直接估计类条件概率密度函数很困难)。所以能够使用极大似然估计方法的样本必须需要满足一些前提假设。

            重要前提:训练样本的分布能代表样本的真实分布。每个样本集中的样本都是所谓独立同分布的随机变量 (iid条件),且有充分的训练样本。

      极大似然估计

      一般估计类条件概率使用的是极大似然估计。首先我们假设样本符合某个确定的概率分布形式,然后使用极大似然法估计这个分布的参数θ。公式如下:

     
     

      其中,Dc表示样本空间中c类组成的样本集和。所以对参数θ的最大似然估计为:

     
       (极大似然估计推荐一篇博客
      朴素贝叶斯

      前面我们已经讲到,要估计条件概率P(c|x),我们必须得求得类条件概率P(x|c)。但是这个类条件概率很难从有限的训练样本中直接获得,为了避开这个假设,我们使用朴素贝叶斯分类器(naive Bayes Classifier),朴素贝叶斯分类器采用了“属性条件独立性假设”(attribute conditional independence assumption): 即对已知类别,假设所有的属性相互独立,那么P(c|x)可以重写为:

     
     

      对应的朴素贝叶斯判定准则为:

     
       举个栗子:
      笔者比较喜欢吃苹果,所以举例子总是会想起苹果,所以去超市买水果时,苹果往往是必备的。长年累月,摸索了一套挑选苹果的方法,一般红润而圆滑的果子都是好苹果,泛青无规则的一般都比较一般,现在根据之前几次买过的苹果,已经验证过了10个苹果,主要根据大小,颜色和形状这三个特征,来区分是好是坏,如下:

     

     

    #大小颜色形状标签
    1 青色 非规则
    2 红色 非规则
    3 红色 圆形
    4 青色 圆形
    5 青色 非规则
    6 红色 圆形
    7 青色 非规则
    8 红色 非规则
    9 青色 圆形
    10 红色 圆形

       测试集上要预测的某个样本如下:

    #大小颜色形状标签
    11 青色 圆形 ?

      上面通过这个例子折射处一个问题:训练集上,很多样本的取值可能并不在其中,但是这不并代表这种情况发生的概率为0,因为未被观测到,并不代表出现的概率为0 。

       正如上面的样本,看其他两个属性很可能属于好苹果,但是再加上颜色:青色,这三个属性取值组合在训练集中并未出现过,所以朴素贝叶斯分类后,这个属性取值的信息抹掉了其他两个属性的取值,在概率估计时,通常解决这个问题的方法是要进行平滑处理,常用拉普拉斯修正

       拉普拉斯修正的含义是,在训练集中总共的分类数,用 N 表示;di 属性可能的取值数用 Ni 表示,因此原来的先验概率 P(c) 的计算公式由:P(c) = Dc / D 被拉普拉斯修正为:P(c) = (Dc +1)/ ( D + N)

       类的条件概率P(x | c) 的计算公式由:P(Xi|c) = Dc,xi / Dc 被拉普拉斯修正为:P(xi |c) = (Dc,xi +1) / (Dc + Ni)

      例子阐述

      在拉普拉斯修正后,本文提到的预测样本预测的结果会不会还是一般的果子呢?(因为好果的概率因为某项乘积为0,所以导致最终结果为0)

    #大小颜色形状标签
    11 青色 圆形 ?

      用拉普拉斯修正后的公式计算,先验概率 P(c) ,

      P(c = 好果)=  (4+1) / (10+2) = 5/12

      P(c = 一般) = (6+1) / (10+2) = 7/12

      每个属性的类条件概率:

      P(大小=大 | c=好果) =   (3+1)/(4+2) = 4/6

      P(颜色=青色 | c=好果) = (0+1)/(4+2) = 1/6

      P(形状=圆形 | c=好果) = (3+1) / (4+2) = 4/6

      P(大小=大 | c=一般) =  (3+1) /( 6+2) = 4/8

      P(颜色=青色 | c=一般) = (5+1)/(6+2) = 6/8

      P(形状=圆形 | c=一般) =  (2+1)/(6+2) = 3/8

      因此:  

      P(c=好果) * P(大小=大 | c=好果) * P(颜色=青色 | c=好果) * P(形状=圆形 | c=好果)  = 5/12 * 4/6 * 1/6 * 4/6 

    = 0.031

      P(c=一般) * P(大小=大 | c=一般) * P(颜色=红色 | c=一般) * P(形状=圆形 | c=一般)  = 7/12 * 4/8 * 6/8 * 3/8

    = 0.082

      因此预测结果还是一般的果子,这是训练集学习后得到的结果,可能与原来的结果正好吻合,但是并不代表拉普拉斯修正是没有必要的,有时候预测的结果会和原来直接某项为0的结果不一样,可以看到拉普拉斯修正后,原来为0的结果被平滑的过渡为0.031,这起到了修正的作用。

      半朴素贝叶斯分类器

      前面讲到, 为了降低估计后验概率P(c|x)的难度,朴素贝叶斯分类器采用了属性条件独立性假设,但是在现实任务中这个假设往往不成立。于是,人们放松了这个假设的限制,提出了半朴素贝叶斯分类器的假设(semi-naive Bayes classifiers)的学习方法。其中, 独依赖估计(one-Dependent Estimator ODE)是半朴素贝叶斯分类器的一种常用的策略。独依赖估计假设所有的属性都依赖于某一个属性。这里介绍三种基于独依赖估计的半朴素贝叶斯分类器。第一种是SPODE(Super-Parent ODE),即假设所有的属性都依赖于同一个属性,这个属性也被称之为超父。超父属性的确定通过交叉验证的方式确定。第二种是TAN(Tree Augmented navie Bayes)。这种方法的做法是先计算任意两个属性之间的条件互信息(conditional mutual information),这样就可以建立一个完全连接图。基于这个图,就可以生成一棵最大带权生成树。这棵树之间的连接关系便是属性之间的依赖关系。最后一种是AODE(Averaged One-Dependent Estimator),这种方法的做法是使用每个节点作为超父属性来构造SPODE,然后将具有足够训练数据支撑的SPODE集成起来作为最终的结果。

     

    Reference:
    【1】https://www.jianshu.com/p/427ce9749fad

    【2】https://blog.csdn.net/zengxiantao1994/article/details/72787849 

    【3】https://blog.csdn.net/xo3ylAF9kGs/article/details/78643424?locationNum=5&fps=1

  • 相关阅读:
    【转】go语言的字节序
    【转】Go maps in action
    angular 的进一步深入理解
    go 中goroutine 的使用
    hdu2516-取石子游戏 (斐波那契博弈)【博弈 二分查找】
    poj1067-取石子游戏 (威佐夫博弈)
    hdu1710-Binary Tree Traversals (由二叉树的先序序列和中序序列求后序序列)
    hdu3999-The order of a Tree (二叉树的先序遍历)
    第二个MFC实例:GPA计算器
    第一个MFC实例:计算圆周长和圆面积
  • 原文地址:https://www.cnblogs.com/z1141000271/p/9999629.html
Copyright © 2011-2022 走看看