朴素贝叶斯分类算法的R语言实现

贝叶斯分类常用来预测隶属关系,计算一个给定元组属于某一类的概率


首先我们来看下贝叶斯基本公式:


P(B|A)的意思是在A事件的情况下,发生B事件的概率,可以理解为概率论中的条件概率,而贝叶斯公式的巨大作用就是对因果关系进行了交换,通过上面的公式就可以计算P(A|B)的概率,只要通过上述的转换。


朴素贝叶斯分类的正式定义如下:

      1、设为一个待分类项,而每个a为x的一个特征属性。(在我们的例子中x={"rain","hot","high","strong"}里面的4个因子为他的特征向量)

      2、有类别集合。(我们的类别中playtennis的分类yes, no,C={yes, no})

      3、计算。(计算的任务就是计算在X事件的条件下,yes和no事件的发生概率,P(Yes|X), P(No|X))

      4、如果,则。(计算出上面的结果值,拥有最大概率的值的yi就是他的分类,这个很好理解,在X条件下,那个分类类型概率高就属于哪个分类,在这里比的就是P(Yes|X), P(No|X))

      

      关键就是如何计算第3步中的各个条件概率。我们可以这么做:

      1. 找到一个已知分类的待分类项集合,这个集合叫做训练样本集

      2. 统计得到在各类别下各个特征属性的条件概率估计。即


      3. 朴素贝叶斯假定各个特征属性是条件独立的,因此又称为简单贝叶斯,则我们有如下推导:

      4. P(x)对于所有分类都是常数,因此可以省去,我们于是有以下结论:

      


     大体算法就是这样,但还没有结束,还有以下深入研究的两点内容:

     1. 计算时,若aj为连续属性,那我们需要多做点工作,可以假设aj服从期望为u,标准差为r的高斯分布;根据高斯分布的特性,我们有

      

     2. 在训练数据中有时会出现为零的情况,为了避免此零值使得为零,可以采用拉普拉斯校准法,其实很简单,即每个组对增加一个相对足够小的校准数,在我们的实现中采用的是0.01乘以训练数组的长度


    Github代码:https://github.com/bigdata-william/R_Algorithm/blob/master/native_bayes.R

    参考文档:http://blog.csdn.net/androidlushangderen/article/details/42680161 

                           《数据挖掘概念与技术第三版》

你可能感兴趣的:(大数据算法)