您的位置:首页 > 其它

机器学习实战(4)朴素贝叶斯学习笔记_20170707

2017-07-07 14:35 211 查看
机器学习之朴素贝叶斯实战:

    朴素贝叶斯————基于贝叶斯定理与特征条件独立假设的分类方法

    对于给定数据集,首先计算基于特征条件独立假设学习输入/输出的联合概率分布;然后基于此模型,对给定的输入x,利用贝叶斯定理求出

后验概率最大的输出y。

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

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

    如果p1>p2,那么类别为1;反之,类别为2
    推广: argmax p(ci   | x,y),使后验概率最大的ci,则(x,y)就属于ci类

其中源码第49~55行理解:

def classifyNB(vec2Classify, p0Vec, p1Vec, pClass1):
p1 = sum(vec2Classify * p1Vec) + log(pClass1)
p0 = sum(vec2Classify * p0Vec) + log(1.0 - pClass1)
if p1 > p0:
return 1
else:
return 0这是贝叶斯分类函数的代码
四个输入:要分类的向量vec2Classify 以及贝叶斯训练函数计算得到的三个概率值;

其中vec2Classify得到方式

testEntry = ['love', 'my', 'dalmation'] # 测试样本
thisDoc = array(setOfWords2Vec(myVocabList, testEntry)) # setOfWordsVec函数用来检查测试样本是否在训练的词组中
print testEntry,'classified as: ',classifyNB(thisDoc,p0V,p1V,pAb) # thisDoc = vec2Classify 这时是一个{0,1}集合的数组接下来解释 p1和p0的计算
p1 = sum(vec2Classify * p1Vec) + log(pClass1)
p0 = sum(vec2Classify * p0Vec) + log(1.0 - pClass1)已知:p( ci | w ) = p( w | ci ) * p( ci ) / p( w )
因为p( w )是定量,所以要求使之值最大的ci,即求p( w | ci ) * p ( ci )的最大值

分类函数中 ci = {0,1} 由于朴素贝叶斯假设所有特征都相互独立,则有

p( w | ci) = p( w0, w1, ... , wn | ci) = p( w0 | ci ) * p( w1 | ci ) * .... * p( wn | ci )

取对数(不影响函数单调性):

ln p ( w | ci)  = sum ( ln p( wn | ci ))    ( n = 1, 2, .... )

所有原式取对数,ln( p( w | ci) * p( ci ) ) = sum ( ln p( wn | ci) ) + ln p( ci )

p(1) = pClass1 所以 p(0) = 1 - pClass1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息