MapReduce之基于符号数据的朴素贝叶斯分类

简介

Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_数据个类{Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_High_02}中的某一类。NBC有很多应用,如垃圾邮件过滤和文档分类等。
      以垃圾邮件分类为例。使用NBC的垃圾邮件过滤器将把各个电子邮件分配到两个簇之一:垃圾邮件和非垃圾邮件。由于NBC是一个监督型学习方法,它有两个不同的阶段:

  • 阶段1:训练
        这个阶段使用一个有限的数据样本实例集合中的训练数据建立一个分类器(在下一个阶段使用)。这就是所谓的监督型学习方法,即从一个样本学习,然后使用这个信息来完成新数据分类。



训练数据

朴素贝叶斯分类器生成器

朴素贝叶斯分类器


           

  • 阶段2:分类
        在这个阶段中,使用训练数据和贝叶斯定理将新数据分类到阶段1中明确的某一个类别中

     分类过程
   新数据=Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_MapReduce_03={Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_数据_04}
   类C是{Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_垃圾邮件_05}的一个成员




新数据X

朴素贝叶斯分类器

类C


           

符号训练数据

以如下数据为例,数据来自《Machine Learning》


示例符号训练数据

天气

温度

湿度

风力

是否可以打球(分类)

Sunny

Hot

High

Weak

No

Sunny

Hot

High

Strong

No

Overcast

Hot

High

Weak

Yes

Rain

Mild

High

Weak

Yes

Rain

Cool

Normal

Weak

Yes

Rain

Cool

Normal

Strong

No

Overcast

Cool

Normal

Strong

Yes

Sunny

Mild

High

Weak

No

Sunny

Cool

Normal

Weak

Yes

Rain

Mild

Normal

Weak

Yes

Sunny

Mild

Normal

Strong

Yes

Overcast

Mild

High

Strong

Yes

Overcast

Hot

Normal

Weak

Yes

Rain

Mild

High

Strong

No

  • ”是否可以打球“列是分类列,这里有两个类别{yes,no}
  • 每个数据集有4个属性,天气(outlook),温度(temperature),湿度(humidity),风力(wind),各个数据实例是一个Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_MapReduce_06维属性值向量:Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_MapReduce_07
  • 训练数据的大小 为14,
  • 目标是使用这个训练数据建立一个分类系统,分类系统会根据天气条件来确定是否可以打网球
朴素贝叶斯分类器

先用简单的形式化表示来描述贝叶斯理论:令A和B是两个事件,P(A)和P(B)为A和B的概率(均不为0),则
Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_Java 利用朴素贝叶斯做问题匹配_08
由此得出贝叶斯理论的一般形式:令A是一个互斥事件序列{Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_数据_09},其并集是整个样本空间,令E是某个事件且Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_High_10,对于所有的Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_数据_11,Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_High_12,则:
    对于所有的Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_垃圾邮件_13
Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_Java 利用朴素贝叶斯做问题匹配_14

贝叶斯理论用于分类的形式化描述如下:令Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_垃圾邮件_15是一个需要分类的数据实例,令Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_Java 利用朴素贝叶斯做问题匹配_16是不同类别的一个有限集合,使用贝叶斯理论,可以预测一个给定Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_MapReduce_17的类别Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_垃圾邮件_18;
     Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_Java 利用朴素贝叶斯做问题匹配_19
                     Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_MapReduce_20
                     Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_MapReduce_21
                     Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_MapReduce_22
                     Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_Java 利用朴素贝叶斯做问题匹配_23
在第三步和第四步的转换过程中,由于分母不会改变,在整个计算过程中作为一个常量,所以去掉了分母。

朴素贝叶斯示例

在这个NBC示例中,如何对以下输入数据分类
Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_MapReduce_24
Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_Java 利用朴素贝叶斯做问题匹配_25
答案是Yes还是No,对于这个例子,有两个类:

  • Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_High_26
  • Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_数据_27
  • Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_High_28

根据贝叶斯分类,可以有:
Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_垃圾邮件_29
在这里:
Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_垃圾邮件_30
Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_垃圾邮件_31
如果Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_垃圾邮件_32,则Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_MapReduce_17的分类为Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_垃圾邮件_34=Yes,否则,分类为Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_High_35=No

下面是Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_数据_36的条件概率计算:
Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_数据_37

Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_MapReduce_38(打球)的9中情况中,有4中情况Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_MapReduce_39,因此,Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_垃圾邮件_40,还可以表示为Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_Java 利用朴素贝叶斯做问题匹配_41

Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_MapReduce_42

Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_MapReduce_38的9中情况中,有2中情况Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_垃圾邮件_44,因此,Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_High_45,还可以表示为Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_High_46
同理可以表示为Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_垃圾邮件_47Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_Java 利用朴素贝叶斯做问题匹配_48

接下来是计算Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_垃圾邮件_49的条件概率:
Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_数据_50

Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_垃圾邮件_51的5种情况中,有0中情况Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_垃圾邮件_52,因此,Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_数据_53,同理表示为Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_垃圾邮件_54

Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_Java 利用朴素贝叶斯做问题匹配_55

Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_垃圾邮件_51的5中情况中,有2种情况Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_High_57,因此,Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_Java 利用朴素贝叶斯做问题匹配_58,同理可以表示为Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_High_59

同理Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_数据_60

插入这些值,可以得到:
Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_数据_61
Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_Java 利用朴素贝叶斯做问题匹配_62
由于Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_垃圾邮件_32,则将X分类为Java 利用朴素贝叶斯做问题匹配 mapreduce朴素贝叶斯_数据_36
在下一篇博客中,将讲解如何利用MapReduce去实现这个过程