• 贝叶斯方法的m-估计


    为什么要有m-估计?

    当我们通过在全部事件的基础上观察某事件出现的比例来估计概率时,例如:P=nc/n.,其中nc为该类别中的样本数量,n为总样本数量。若n=5,当P=0.6时,则nc为3。多数情况下该比例是对概率的一个良好的估计。但当nc很小时估计会较差,例如:P=0.08,样本中同样有5个样例,那么对于nc最可能的取值只有0,。这会导致两个问题:

    1、nc/n产生了一个有偏的过低估计概率。

    2、当此概率估计为0时,将来的查询此概率项将会在贝叶斯分类器中占统治地位。原因是贝叶斯公式中计算得量其他所有概率项都将乘以此0值。

    为了避免此问题,所以需要采用一种估计概率,即如下定义的m-估计:

     

    其中nc为该类别中的样本数量,n为总样本数量,p为将要确定的概率的先验估计,m为等效样本大小的常量。

     

     

    为什么m-估计的公式是这样的?

    首先,请思考问题出现的根本原因,问题出现的根本原因是样本数量过小。所以为了避免此问题,最好的方法是等效的扩大样本的数量,即在为观察样本添加m个等效的样本,所以要在该类别中增加的等效的类别的数量就是等效样本数m乘以先验估计p。

     

    为什么在贝叶斯应用(如mahout)中使用的公式如下呢?

     

    其中nk为单词W出现的次数,n为所有单词出现的次数。

    其实,这只是m的取值的关系,当等效样本数m为词汇表中的单词数时,自然取统一的先验概率的p的值就是1/|vocabulary|咯。

    转自:http://www.xuebuyuan.com/1562982.html

  • 相关阅读:
    ubuntu 查看cpu核数
    安装pytorch
    杀死用kill id+父进程
    ubuntu 更改目录所有者
    查看cuda版本+安装cuda+安装conda
    挂载新硬盘
    Linux负载过高【10.13】
    C++中c_str()
    为什么C++比python快?
    C++匿名函数
  • 原文地址:https://www.cnblogs.com/gswang/p/7509024.html
Copyright © 2020-2023  润新知