朴素贝叶斯

“贝叶斯定理是一则关于随机事件A和B的条件概率定理,其中P(A|B)是在B发生的情况下A发生的可能性。”---百度百科

朴素贝叶斯是贝叶斯决策理论的一部分,贝叶斯决策定理的简单解释:

p1(x,y)表示数据点(x,y)属于类别1的概率

p2(x,y)表示数据点(x,y)属于类别2的概率

那么对于一个新数据点(X,Y),选择高概率对应的类别作为其类别分类:

如果p1(x,y) > p2(x,y),那么类别为1

如果p2(x,y) > p1(x,y),那么类别为2

贝叶斯准则:

p(Ci|x,y) = p(x,y|Ci)*p(Ci) / p(x,y)

p(Ci|x,y):数据点(x,y)属于Ci的概率

p(x,y|Ci):数据点(x,y)在条件Ci下被选择的概率

p(Ci):Ci在所有分类中出现的概率

p(x,y):数据点(x,y)在所有的点中被选择的概率

不难看出,贝叶斯准实现了如何交换条件概率中的条件与结果

基于贝叶斯决策理论的分类方法:

优点:在数据较少的情况下仍然有效,可以处理多类别问题

缺点:对于输入数据的准备方式较为敏感

适用数据类型:标称型数据

朴素贝叶斯是数据挖掘算法中常用的一种基于概率论的分类方法。称之为“朴素”是因为整个形式化过程中只做最原始,最简单的假设。朴素贝叶斯假定所有的特征直接没有关联,对每个特征一视同仁,都具有同样的权值。

朴素贝叶斯算法计算W所属分类i的概率公式:

p(Ci|W) = Σp(W|Ci) * P(Ci

算法实现:

训练P(Ci|w):

def trainNB0(trainMatrix,trainCategory):
    numTrainDocs = len(trainMatrix)
    
    numWords = len(trainMatrix[0])
    
    pAbusive = sum(trainCategory)/float(numTrainDocs)#sum=1+1+1 
    p0Num = zeros(numWords); p1Num = zeros(numWords)      #change to ones() 
    
    p0Denom = 0.0; p1Denom = 0.0                        #change to 2.0
    for i in range(numTrainDocs):
        if trainCategory[i] == 1:
            p1Num += trainMatrix[i]
            p1Denom += sum(trainMatrix[i])
        else:
            p0Num += trainMatrix[i]
            p0Denom += sum(trainMatrix[i])
           
    p1Vect = p1Num/p1Denom          #change to log()
    p0Vect = p0Num/p0Denom          #change to log()
    return p0Vect,p1Vect,pAbusive
原文地址:https://www.cnblogs.com/zhq1007/p/4769994.html