博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用朴素贝叶斯进行分本分类
阅读量:4053 次
发布时间:2019-05-25

本文共 3040 字,大约阅读时间需要 10 分钟。

**

代码如下:'''使用Python进行文本分类''''''词表到向量的转换函数'''def loadDataSet():    postingList=[['my', 'dog', 'has', 'flea', 'problems', 'help', 'please'],                 ['maybe', 'not', 'take', 'him', 'to', 'dog', 'park', 'stupid'],                 ['mr', 'licks', 'ate', 'my', 'steak', 'how', 'to', 'stop', 'him'],                 ['quit', 'buying', 'worthless', 'dog', 'food', 'stupid']]    classVec = [0,1,0,1,0,1]    return postingList,classVec'''创建包含所有文档中出现的不重复词的列表'''def createVocabList(dataSet):    vocabSet = set([])    for document in dataSet:        vocabSet = vocabSet | set(document)'''set of  words model(词集模型:仅将每个词的出现与否作为一个特征)'''def setOfWords2Vec(vocabList,inputSet):    returnVec = [0]*len(vocabList)    for word in inputSet:        if word in inputSet:            returnVec[vocabList.index(word)] = 1        else:            print "the word : %s is not in my Vocabulary!" % word    return returnVec'''bag of words model(词袋模型:该模型中每个词可以出现不止一次)'''def bagOfWordsVecMN(vocabList,inputSet):    returnVec = [0]*len(vocabList)    for word in inputSet:        if word in vocabList:            returnVec[vocabList.index(word)] += 1    return returnVec'''训练算法:从词向量计算概率''''''trainMatrix:文档矩阵(numTrainDocs行*numWords列);trainCategory:每篇文档类别标签所构成的向量'''def trainNB0(trainMatrix,trainCategory):     numTrainDocs = len(trainMatrix)'''训练文本数'''    numWords = len(trainMatrix[0])'''总单词数(词汇表中的总单词数)'''    pAbusive = sum(trainCategory)/float(munTrainDocs) '''统计侮辱性(1)在文档中出现的概率'''    '''p0Num = zeros(numWords)    p1Num = zeros(numWords)    p0Denom = 0.0    p1Denom = 0.0变更代码如下:使用拉普拉斯校准避免计算零概率值'''    p0Num = ones(numWords)    p1Num = ones(numWords)    p0Denom = 2.0    p1Denom = 2.0    '''以下分别计算p(wi|c1)和p(wi|c0)的概率'''    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变更此行代码如下,为避免下溢出(由于太多很小的数相乘造成,在Python环境中由于太多很小的数相乘最后四舍五入会得到0),    取自然对数,可避免下溢出或者浮点数舍入导致的错误'''    p1Vect = log(p1Num/p1Denom)    p0Vect = log(p0Num/p0Denom)       return p0Vect,p1Vect,pAbusivedef classifyNB(vec2Classify,p0Vec,p1Vec,pClass1):    p1 = sum(vec2Classify*p1Vec) + log(pClass1) '''本应该是 p1Vec*pClass1但整体的都去了对数,所以最后变为对数相加的形式'''    p0 = sum(vec2Classify*p0Vec) + log(1.0 - pClass1)    if p1>p0:        return 1    else:        return 0def testingNB():    listOPosts,listClasses = loadDataSet()    myVocabList = createVocabList(listOPosts)    trainMat=[]    for postinDoc in listOPosts:        trainMat.append(setOfWords2Vec(myVocabList, postinDoc))    p0V,p1V,pAb = trainNB0(array(trainMat),array(listClasses))    testEntry = ['love', 'my', 'dalmation']    thisDoc = array(setOfWords2Vec(myVocabList, testEntry))    print testEntry,'classified as: ',classifyNB(thisDoc,p0V,p1V,pAb)    testEntry = ['stupid', 'garbage']    thisDoc = array(setOfWords2Vec(myVocabList, testEntry))    print testEntry,'classified as: ',classifyNB(thisDoc,p0V,p1V,pAb)

**

转载地址:http://icaci.baihongyu.com/

你可能感兴趣的文章
SpringBoot 动态编译 JAVA class 解决 jar in jar 的依赖问题
查看>>
fhs-framework springboot mybatis 解决表关联查询问题的关键方案-翻译服务
查看>>
ZUUL2 使用场景
查看>>
Spring AOP + Redis + 注解实现redis 分布式锁
查看>>
elastic-job 和springboot 集成干货
查看>>
php开发微服务注册到eureka中(使用sidecar)
查看>>
mybatis mybatis plus mybatis jpa hibernate spring data jpa比较
查看>>
支付宝生活号服务号 用户信息获取 oauth2 登录对接 springboot java
查看>>
CodeForces #196(Div. 2) 337D Book of Evil (树形dp)
查看>>
uva 12260 - Free Goodies (dp,贪心 | 好题)
查看>>
uva-1427 Parade (单调队列优化dp)
查看>>
【设计模式】学习笔记13:组合模式(Composite)
查看>>
hdu 1011 Starship Troopers (树形背包dp)
查看>>
hdu 1561 The more, The Better (树形背包dp)
查看>>
【设计模式】学习笔记14:状态模式(State)
查看>>
poj 1976 A Mini Locomotive (dp 二维01背包)
查看>>
斯坦福大学机器学习——因子分析(Factor analysis)
查看>>
项目导入时报错:The import javax.servlet.http.HttpServletRequest cannot be resolved
查看>>
不一定会执行finally代码块的两个例子
查看>>
LRUCache
查看>>