zoukankan      html  css  js  c++  java
  • 朴素贝叶斯

    “贝叶斯定理是一则关于随机事件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
  • 相关阅读:
    第十次作业
    第九次作业
    第八次作业总结
    第八次作业
    C语言总结(6)
    作业十二总结
    作业十一总结
    实验十总结
    实验九总结
    第一次附加作业
  • 原文地址:https://www.cnblogs.com/zhq1007/p/4769994.html
Copyright © 2011-2022 走看看