• 大小: 25KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: Python
  • 标签:

资源简介

使用Python3.5实现贝叶斯完成文本分类,代码中有详细的解释

资源截图

代码片段和文件信息

#coding=utf-8
from numpy import *
#文本转化为词向量
def loadDataSet():#创建一个实验样本
    postingList=[[‘my‘ ‘dog‘ ‘has‘ ‘flea‘ ‘problems‘ ‘help‘ ‘please‘]
                 [‘maybe‘ ‘not‘ ‘take‘ ‘him‘ ‘to‘ ‘dog‘ ‘park‘ ‘stupid‘]
                 [‘my‘ ‘dalmation‘ ‘is‘ ‘so‘ ‘cute‘ ‘I‘ ‘love‘ ‘him‘]
                 [‘stop‘ ‘posting‘ ‘stupid‘ ‘worthless‘ ‘garbage‘]
                 [‘mr‘ ‘licks‘ ‘ate‘ ‘my‘ ‘steak‘ ‘how‘ ‘to‘ ‘stop‘ ‘him‘]
                 [‘quit‘ ‘buying‘ ‘worthless‘ ‘dog‘ ‘food‘ ‘stupid‘]]
    classVec = [010101]    #1表示侮辱类,0表示不属于
    return postingListclassVec #词条切分后的分档和类别标签

#包含所有文档 不含重复词的列表list
def createVocabList(dataSet):
    vocabSet=set([])#创建空集,set是返回不带重复词的list
    for document in dataSet:
        vocabSet=vocabSet|set(document) #创建两个集合的并集
    return list(vocabSet)#输出不重复的元素
#判断某个词条在文档中是否出现-词集模型
def setOfWords2Vec(vocabList inputSet):#参数为词汇表和某个文档
    returnVec = [0]*len(vocabList)#创建一个所含有的元素都为0 的向量
    for word in inputSet:#遍历文档中所有的单词,如果出现词汇表中的单词,则将输出的文档向量中的对应值设为1
        if word in vocabList:
            returnVec[vocabList.index(word)] = 1#index函数在字符串里找到字符第一次出现的位置模型
        else: print(“the word: %s is not in my Vocabulary!“ % word)#返回文档向量 表示某个词是否在输入文档中出现过 1/0
    return returnVec #输入中的元素在词汇表时,词汇表相应位置为1,否则为0

#高级词袋模型,判断词出现次数
def bagOfWords2VecMN(vocabListinputSet):
    returnVec = [0] * len(vocabList)
    for word in inputSet:
        if word in vocabList:
            returnVec[vocabList.index(word)] += 1#文档的词袋模型  每个单词可以出现多次
        else:
            print(“the word: %s is not in my Vocabulary!“ % word)  # 返回文档向量 表示某个词是否在输入文档中出现过 1/0
    return returnVec

#朴素贝叶斯分类训练函数-得到每个特征的条件概率-从词向量计算概率
def trainNB0(trainMatrixtrainCategory):#输入的文档信息和标签
#trainMatrix:文档矩阵
#trainCategory:每篇文档类别标签
    numTrainDocs=len(trainMatrix) #文档数目
    numWords=len(trainMatrix[0])
    pAbusive=sum(trainCategory)/float(numTrainDocs) #文档中属于侮辱类的概率,等于1才能算,0是非侮辱类
    #p0Num=zeros(numWords); p1Num=zeros(numWords)
    #p0Denom=0.0;p1Denom=0.0
    p0Num = ones(numWords)#避免一个概率值为0,最后的乘积也为0
    p1Num = ones(numWords)#避免一个概率值为0,最后的乘积也为0
    p0Denom = 2.0#分母初始化为2
    p1Denom = 2.0
    for i in range(numTrainDocs):#遍历每个文档
        #if else潜在遍历类别,共2个类别
        if trainCategory[i]==1: #一旦某个词出现在某个文档中出现(出现为1,不出现为0)
            p1Num+=trainMatrix[i]  #该词数加1
            p1Denom+=sum(trainMatrix[i]) #文档总词数加1
        else: #另一个类别
            p0Num+=trainMatrix[i]
            p0Denom+=sum(trainMatrix[i])
        # p1Vect = p1Num / p1Denom
        # p0Vect = p0Num / p0Denom
    p1Vec = log(p1Num / p1Denom)
    p0Vec = log(p0Num / p0Denom)#避免下溢出或者浮点数舍入导致的错误-下溢出是由非常多很小的数相乘得到的
    return p0Vec p1Vec pAbusive  #返回p0Vec,p1Vec都是矩阵,对应每个词在文档总体中出现概率,pAb对应文档属于1的概率

#朴素贝叶斯分类器-给定词向量 判断类别
def classifyNB(vec2Classifyp0Vecp1VecpClass1): 
#第一个参数为01组合二分类矩阵,对应词汇表各个词是否出现
#p0Vecp1VecpClass1:分别对应trainNB0计算得到的3个概率
    p1=sum(vec2Classify*p1Vec)+log(pClass1)
    p0=sum(vec2Classify*p0Vec)+log(1.0-pClass1)
    if p1>p0:
        return 1
    else: return 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-08-24 08:34  bayes\
     文件       10531  2017-08-24 10:25  bayes\bayes.py
     目录           0  2017-08-24 08:34  bayes\email\
     目录           0  2017-08-24 08:34  bayes\email\ham\
     文件         141  2017-05-15 17:44  bayes\email\ham\1.txt
     文件          82  2017-05-15 17:44  bayes\email\ham\10.txt
     文件         122  2017-05-15 17:44  bayes\email\ham\11.txt
     文件         172  2017-05-15 17:44  bayes\email\ham\12.txt
     文件         164  2017-05-15 17:44  bayes\email\ham\13.txt
     文件         162  2017-05-15 17:44  bayes\email\ham\14.txt
     文件         522  2017-05-15 17:44  bayes\email\ham\15.txt
     文件          90  2017-05-15 17:44  bayes\email\ham\16.txt
     文件         454  2017-05-15 17:44  bayes\email\ham\17.txt
     文件         168  2017-05-15 17:44  bayes\email\ham\18.txt
     文件         151  2017-05-15 17:44  bayes\email\ham\19.txt
     文件         232  2017-05-15 17:44  bayes\email\ham\2.txt
     文件         204  2017-05-15 17:44  bayes\email\ham\20.txt
     文件         229  2017-05-15 17:44  bayes\email\ham\21.txt
     文件         324  2017-05-15 17:44  bayes\email\ham\22.txt
     文件         601  2017-05-15 17:44  bayes\email\ham\23.txt
     文件          42  2017-05-15 17:44  bayes\email\ham\24.txt
     文件          88  2017-05-15 17:44  bayes\email\ham\25.txt
     文件         364  2017-05-15 17:44  bayes\email\ham\3.txt
     文件         205  2017-05-15 17:44  bayes\email\ham\4.txt
     文件         113  2017-05-15 17:44  bayes\email\ham\5.txt
     文件        1458  2017-05-15 17:44  bayes\email\ham\6.txt
     文件         103  2017-05-15 17:44  bayes\email\ham\7.txt
     文件         634  2017-05-15 17:44  bayes\email\ham\8.txt
     文件         142  2017-05-15 17:44  bayes\email\ham\9.txt
     目录           0  2017-08-24 08:34  bayes\email\spam\
     文件         235  2017-05-15 17:44  bayes\email\spam\1.txt
............此处省略26个文件信息

评论

共有 条评论