朴素贝叶斯

常用于文档分类

叫做朴素的原因:
整个形式化过程只作最原始、最简单的假设,概率独立性

优点:
在数据较少的情况下仍然有效,可以处理多类别的问题
缺点:
对输入数据的准备方式较为敏感
使用数据类型:
标称型数据
条件概率
这里写图片描述

从文本构建词向量

def createVacabList(dataSet):
    vacabSet = set([])
    for document in dataSet:
        vocabSet = vocabSet | set(document)
    return list(vocabSet)

def setOfWords2vec(vocabList,inputSet):
    returnVec = [0]*len(vocabList)
    for word in inputSet:
        if word in vocabList:
        #词集法
            #returnVec[vocabList.index(word)]=1
            #词袋法
            returnVec[vocabList.index(word)]+=1
        else:
            pass
    return returnVec

从词向量计算概率

def trainNBO(trainMatrix,trainCategory):
    numTrainDocs = len(trainMatrix)
    numWords = len(trainMatrix[0])
    pAbusive = sum(trainCategory)/float(numTrainDocs)
    #p0Num = zeros(numWords);p1Num = zeros(numWords)
    #p0Denom = 0.0,p1Denom = 0.0
    #由于有一个单词没有出现,那么其概率将会是0,相乘之后乘积也为0,
    #未降低这种影响,将所有词出现的次数初始化为一,并将分母初始化为2
    p0Num = ones(numWords);p1Num = ones(numWords)
    p0Denom = 2.0,p1Denom = 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
    #p0Vect = p0Num/p0Denom
    p1Vect = log(p1Num/p1Denom)
    p0Vect = log(p0Num/p0Denom)
    return p0Vect,p1Vect,pAbusive

分类

def classifyNB(vec2Classify,p0Vec,p1Vec,pClass1):
    p1 = sum(vec2Classify*p1Vec)+log(pClass1)
    p0 = sum(vec2Classify*p0Vec)+log(1-pClass1)
    if p1>p0:
        return 1
    else:
        return 0

处理文本的其他技巧:
再文本分类的时候,由于有一些词汇是常用词,他们的出现对于文本分类并没有帮助,有时候还会影响分类结果的准确性,所以不要将其计入词向量中。与之对应的我们可以统计词汇出现的频率,将较高频率的词删掉,或者使用停用词

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值