“贝叶斯定理是一则关于随机事件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