1 算法概括

贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。而朴素朴素贝叶斯分类是贝叶斯分类中最简单,也是常见的一种分类方法。

贝叶斯公式:

贝叶斯为什么会有BayesABayesBBayesC 贝叶斯理解_词向量


这种形式可能对于分类问题不太明显,那么我们换种形式:

贝叶斯为什么会有BayesABayesBBayesC 贝叶斯理解_机器学习_02

,这样就一目了然了,我们的任务就是求出P(类别|特征)。如果对于一个有多个特征的数据集,那么贝叶斯的形式就要写成

贝叶斯为什么会有BayesABayesBBayesC 贝叶斯理解_词向量_03

,在朴素贝叶斯中,我们假设各特征相互独立,所以,最终写成:

贝叶斯为什么会有BayesABayesBBayesC 贝叶斯理解_词向量_04


贝叶斯的核心思想是选择具有最高概率的决策,比如有一个数据a,p(a,1)表示属于类别1的概率,p(a,2)属于类别2的概率,当p(a,1)>p(a,2),我们就推测,数据a属于类别1,这就是根据贝叶斯理论来决策的,一言以蔽之,即对于每个数据集,我们将其划分到最大密度所在的分类。就是可以用先验概率和后验概率来计算未知的概率,进一步,就是在统计资料的基础上,依据某些特征,计算各个类别的概率,从而实现分类。

贝叶斯是一种概率论的方法,所以用来预测的结果一般较为准确,一般在使用贝叶斯时,假设的前提是:①需要足够的样本数据 ;②特征之间相互独立;③每个特征同等重要

2 贝叶斯进行文档分类实现

(1)实验数据准备,创建一个实验样本

(2)将上述创建的文本转换成没有重复词出现的词向量

(3)构建贝叶斯分类器

#朴素贝叶斯分类器训练函数   从词向量计算概率
def trainNB0(trainMatrix,trainCategory):
    numTrainDocs = len(trainMatrix) #词向量中文档的大小 6
    numWords = len(trainMatrix[0])  #词向量文档中词的数量 32
    pAbusive = sum(trainCategory)/float(numTrainDocs)  # 计算文档中属于侮辱性文档的概率(先验概率)0.5
    p0Num = ones(numWords); p1Num = ones(numWords)      #change to ones() 
    p0Denom = 2.0; p1Denom = 2.0                        #change to 2.0
    for i in range(numTrainDocs): #遍历词向量中的每篇文档
        if trainCategory[i] == 1:  #遍历每篇文档中词类别,是1还是0
            p1Num += trainMatrix[i]
            p1Denom += sum(trainMatrix[i])  #计算p(w0|ci),...,p(wn|ci)
        else:
            p0Num += trainMatrix[i]
            p0Denom += sum(trainMatrix[i])
    p1Vect = log(p1Num/p1Denom)          #类别1的条件概率
    p0Vect = log(p0Num/p0Denom)          #类别0的条件概率
    return p0Vect,p1Vect,pAbusive

通过比较得到的p1Vect与p0Vect相应位置词概率的大小,决定该词是属于1类还是0类。