第4章 4.5使用Python进行文本分类---4.5.3 测试算法:根据现实情况修改分类器

 

4.5.3 测试算法:根据现实情况修改分类器

4.5.4 准备数据:文档词袋模型

        词集模型:将每个词的出现与否作为一个特征。

        词袋模型:每个词在文档中出现不止一次,这可能意味着包含该词是否出现在文档中所不能表达的某种信息,记录每个词出现的次数。

 

相应代码及解释如下:

'''
函数功能:判断待分类的文本向量,属于哪个类别(0,1)的概率大
输入:待分类的向量,类别0下各特征的概率向量,类别1下各特征的概率向量,类别1的概率
输出:待分类向量属于的类别
函数思想:见书上
'''      
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

'''
函数功能:便利函数,封装对文本进行分类的所有操作
'''

def testingNB():    
    listOPosts,listClasses = loadDataSet()#加载训练文本集和对应标签向量
    myVocabList = createVocabList(listOPosts)#根据训练文本集获取对应的词汇表
    
    trainMat = []#存放训练文本向量
    for postinDoc in listOPosts:#依次将训练文本通过setOfWords2Vec函数,转化为文本向量
        trainMat.append(setOfWords2Vec(myVocabList,postinDoc))
    p0V,p1V,pAb = trainNB0(trainMat,listClasses)#得到该训练文本向量集中的各种概率
    
    #进行测试
    testEntry = ['love', 'my', 'dalmation']#创建待分类文本
    thisDoc = array(setOfWords2Vec(myVocabList,testEntry))#得到待分类文本对应的文本向量
    result = classifyNB(thisDoc,p0V,p1V,pAb)#计算该文本向量在哪个类别中的概率最大
    print(result)#打印分类结果
    

'''
函数功能:词袋模型。
    即和函数setOfWords2Vec()功能相似。
    都是将某个文档根据词汇表,转换为文档向量。
    不同的是setOfWords2Vec统计词条是否出现,bagOfWords2VecMN统计词条出现的次数
'''
def bagOfWords2VecMN(vocabList, inputSet):
    returnVec = [0] * len(vocabList)#初始化输出向量,和词汇表等长,元素为0 
    
    #然后依次读取输入文档中的每个词,判断该词是否在词汇表中出现
    for word in inputSet:
        if word in vocabList:
            returnVec[vocabList.index(word)] += 1# 若在词汇表中出现,则找到该词在词汇表中的位置,累积加1
            
    return returnVec

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值