朴素贝叶斯主要用于文本分类。文本分类常见三大算法:KNN、朴素贝叶斯、支持向量机SVM

一、贝叶斯定理

        贝叶斯公式思想:利用已知值来估计未知概率。已知某条件概率,如何得到两个事件交换后的概率,也就是已知P(A|B)的情况下如何求得P(B|A)。

        

        条件概率:P(A|B)表示事件B已经发生的前提下,事件A发生的概率,叫做事件B发生下事件A的条件概率。基本求解公式:

【机器学习】文本分类——朴素贝叶斯Bayes-编程知识网

        现实中通常遇到这种情况:可以很容易直接得出P(A|B),而P(B|A)则很难直接得出,但我们更关心P(B|A),贝叶斯公式就是干这个用的:

【机器学习】文本分类——朴素贝叶斯Bayes-编程知识网

二、贝叶斯原理、流程

        朴素贝叶斯思想基础:对于待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。通俗地讲,好比你在街上看到一个黑人,我问你他是从哪里来的,你十有八九会说从非洲。为什么呢?因为黑人中非洲人比例最高,当然别人也有可能是美洲人或者拉丁人,但在没有其他可用信息下,我们会选择条件概率最大类别,这就是朴素贝叶斯思想基础。

贝叶斯分类的定义:

        1.设x={a1, a2, …,am}为一个待分类项,而每个a为x的一个特征属性;

        2.有类别集合C = {y1,y2, …, yn}

        3.计算P(y1|x), P(y2|x),…, P(yn|x)

        4.如果P(yk|x)= max{ P(y1|x), P(y2|x), …, P(yn|x) },则x∈yk.

关键是如何计算第3步中的各个条件概率。步骤:

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

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

        3.如果各个特征属性是条件独立的,则根据贝叶斯定理有如下推导:

【机器学习】文本分类——朴素贝叶斯Bayes-编程知识网

因为分母对于所有类别为常数,只要将分子最大化即可。又因为各特征属性是条件独立的,所以有:

【机器学习】文本分类——朴素贝叶斯Bayes-编程知识网

朴素贝叶斯流程:

【机器学习】文本分类——朴素贝叶斯Bayes-编程知识网

可以看到,整个朴素贝叶斯分类分为三个阶段:

      第一阶段——准备工作阶段,这个阶段的任务是为朴素贝叶斯分类做必要的准备,主要工作是根据具体情况确定特征属性,并对每个特征属性进行适当划分,然后由人工对一部分待分类项进行分类,形成训练样本集合。这一阶段的输入是所有待分类数据,输出是特征属性和训练样本。这一阶段是整个朴素贝叶斯分类中唯一需要人工完成的阶段,其质量对整个过程将有重要影响,分类器的质量很大程度上由特征属性、特征属性划分及训练样本质量决定。

      第二阶段——分类器训练阶段,这个阶段的任务就是生成分类器,主要工作是计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率估计,并将结果记录。其输入是特征属性和训练样本,输出是分类器。这一阶段是机械性阶段,根据前面讨论的公式可以由程序自动计算完成。

      第三阶段——应用阶段。这个阶段的任务是使用分类器对待分类项进行分类,其输入是分类器和待分类项,输出是待分类项与类别的映射关系。这一阶段也是机械性阶段,由程序完成。

三、注意问题

        1.如果给出的特征向量长度可能不同,这是需要归一化为同长度向量(这里以文本分类为例),比如说是句子单词的话,则长度为整个词汇量的长度,对应位置是该单词出现的次数。

        2. 计算公式中

【机器学习】文本分类——朴素贝叶斯Bayes-编程知识网

        其中一项条件概率可以通过朴素贝叶斯条件独立展开。要注意一点就是P(x|yi)的计算方法,而朴素贝叶斯的前提假设“独立性”可知,P(x0, x1, x2, …, xn|yi) = p(x0|yi)*p(x1|yi)*p(x2|yi)…p(xn|yi),因此一般有两种,一种是在类别为yi的那些样本集里,找到xj出现次数的总和,然后除以该样本的总和;第二种方法是类别为yi的那些样本集里,找到xj出现次数的总和,然后除以该样本中所有特征出现次数的总和。

        3.如果p(x|yi)中的某一项为0,则其联合概率乘积也可能为0,即2中公式分子为0,为了避免这种现象出现,一般情况下会将这一项初始化为1,当然为了保证概率相等,分母应该对应初始化为2(这里因为是2类,所以加2,如果是k类就需要加k,术语上叫Laplace光滑)。

四、优缺点

优点:对小规模数据表现好,适合多分类器,适合增量式训练

缺点:对输入数据格式敏感

数值类型:标称型