DDR爱好者之家 Design By 杰米
本文实例为大家分享了Python朴素贝叶斯实例代码,供大家参考,具体内容如下
#-*- 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']] #类别标签:1侮辱性文字,0正常言论 classVec = [0,1,0,1,0,1] #返回文档向量,类别向量 return postingList,classVec #创建词汇表 #输入:dataSet已经经过切分处理 #输出:包含所有文档中出现的不重复词的列表 def createVocabList(dataSet): #构建set集合,会返回不重复词表 vocabSet = set([]) #遍历每篇文档向量,扫描所有文档的单词 for document in dataSet: #通过set(document),获取document中不重复词列表 vocabSet = vocabSet | set(document) #求并集 return list(vocabSet) #***词集模型:只考虑单词是否出现 #vocabList:词汇表 #inputSet :某个文档向量 def setOfWords2Vec(vocabList, inputSet): #创建所含元素全为0的向量 returnVec = [0]*len(vocabList) #依次取出文档中的单词与词汇表进行对照,若在词汇表中出现则为1 for word in inputSet: if word in vocabList: #单词在词汇表中出现,则记为1 returnVec[vocabList.index(word)] = 1 #词集模型 #若测试文档的单词,不在词汇表中,显示提示信息,该单词出现次数用0表示 else: print "the word: %s is not in my Vocabulary!" % word return returnVec #====训练分类器,原始的朴素贝叶斯,没有优化===== #输入trainMatrix:词向量数据集 #输入trainCategory:数据集对应的类别标签 #输出p0Vect:词汇表中各个单词在正常言论中的类条件概率密度 #输出p1Vect:词汇表中各个单词在侮辱性言论中的类条件概率密度 #输出pAbusive:侮辱性言论在整个数据集中的比例 def trainNB00(trainMatrix,trainCategory): #numTrainDocs训练集总条数 numTrainDocs = len(trainMatrix) #训练集中所有不重复单词总数 numWords = len(trainMatrix[0]) #侮辱类的概率(侮辱类占总训练数据的比例) pAbusive = sum(trainCategory)/float(numTrainDocs) #*正常言论的类条件概率密度 p(某单词|正常言论)=p0Num/p0Denom p0Num = zeros(numWords); #初始化分子为0 #*侮辱性言论的类条件概率密度 p(某单词|侮辱性言论)=p1Num/p1Denom p1Num = zeros(numWords) #初始化分子为0 #初始化分母置为0 p0Denom = 0; p1Denom = 0 #遍历训练集数据 for i in range(numTrainDocs): #若为侮辱类 if trainCategory[i] == 1: #统计侮辱类所有文档中的各个单词总数 p1Num += trainMatrix[i] #p1Denom侮辱类总单词数 p1Denom += sum(trainMatrix[i]) #若为正常类 else: #统计正常类所有文档中的各个单词总数 p0Num += trainMatrix[i] #p0Denom正常类总单词数 p0Denom += sum(trainMatrix[i]) #词汇表中的单词在侮辱性言论文档中的类条件概率 p1Vect = p1Num/p1Denom #词汇表中的单词在正常性言论文档中的类条件概率 p0Vect = p0Num/p0Denom return p0Vect,p1Vect,pAbusive #=====训练分类器,优化处理===== #输入trainMatrix:词向量数据集 #输入trainCategory:数据集对应的类别标签 #输出p0Vect:词汇表中各个单词在正常言论中的类条件概率密度 #输出p1Vect:词汇表中各个单词在侮辱性言论中的类条件概率密度 #输出pAbusive:侮辱性言论在整个数据集中的比例 def trainNB0(trainMatrix,trainCategory): #训练集总条数:行数 numTrainDocs = len(trainMatrix) #训练集中所有单词总数:词向量维度 numWords = len(trainMatrix[0]) #侮辱类的概率(侮辱类占总训练数据的比例) pAbusive = sum(trainCategory)/float(numTrainDocs) #*拉普拉斯平滑防止类条件概率为0,初始化分子为1,分母为2 #正常类向量置为1 p0Num = ones(numWords); #初始化分子为1 #侮辱类向量置为1 p1Num = ones(numWords) #初始化分子为1 #初始化分母置为2 p0Denom = 2.0; p1Denom = 2.0 #遍历训练集每个样本 for i in range(numTrainDocs): #若为侮辱类 if trainCategory[i] == 1: #统计侮辱类所有文档中的各个单词总数 p1Num += trainMatrix[i] #向量 #p1Denom侮辱类总单词数 p1Denom += sum(trainMatrix[i]) #若为正常类 else: #统计正常类所有文档中的各个单词总数 p0Num += trainMatrix[i] #p0Denom正常类总单词数 p0Denom += sum(trainMatrix[i]) #数据取log,即单个单词的p(x1|c1)取log,防止下溢出 p1Vect = log(p1Num/p1Denom) p0Vect = log(p0Num/p0Denom) return p0Vect,p1Vect,pAbusive #vec2Classify:待分类文档 #p0Vect:词汇表中每个单词在训练样本的正常言论中的类条件概率密度 #p1Vect:词汇表中每个单词在训练样本的侮辱性言论中的类条件概率密度 #pClass1:侮辱性言论在训练集中所占的比例 def classifyNB(vec2Classify, p0Vect, p1Vect, pClass1): #在对数空间中进行计算,属于哪一类的概率比较大就判为哪一类 #print'0p1=',sum(vec2Classify * p0Vect) #查看结果 #print'0p0=',sum(vec2Classify * p0Vect) p1 = sum(vec2Classify * p1Vect) + log(pClass1) p0 = sum(vec2Classify * p0Vect) + log(1.0 - pClass1) #print'p1=',p1 #print'p0=',p0 if p1 > p0: return 1 else: return 0 def testingNB(): #获得训练数据,类别标签 listOPosts,listClasses = loadDataSet() #创建词汇表 myVocabList = createVocabList(listOPosts) #构建矩阵,存放训练数据 trainMat=[] #遍历原始数据,转换为词向量,构成数据训练矩阵 for postinDoc in listOPosts: #数据转换后存入数据训练矩阵trainMat中 trainMat.append(setOfWords2Vec(myVocabList, postinDoc)) #训练分类器 p0V,p1V,pAb = trainNB0(array(trainMat),array(listClasses)) #===测试数据(1) testEntry = ['love', 'my', 'dalmation'] #测试数据转为词向量 thisDoc = array(setOfWords2Vec(myVocabList, testEntry)) #输出分类结果 print testEntry,'classified as: ',classifyNB(thisDoc,p0V,p1V,pAb) #===测试数据(2) testEntry = ['stupid', 'garbage'] #测试数据转为词向量 thisDoc = array(setOfWords2Vec(myVocabList, testEntry)) #输出分类结果 print testEntry,'classified as: ',classifyNB(thisDoc,p0V,p1V,pAb) #***词袋模型:考虑单词出现的次数 #vocabList:词汇表 #inputSet :某个文档向量 def bagOfWords2VecMN(vocabList, inputSet): #创建所含元素全为0的向量 returnVec = [0]*len(vocabList) #依次取出文档中的单词与词汇表进行对照,统计单词在文档中出现的次数 for word in inputSet: if word in vocabList: #单词在文档中出现的次数 returnVec[vocabList.index(word)] += 1 #若测试文档的单词,不在词汇表中,显示提示信息,该单词出现次数用0表示 else: print "the word: %s is not in my Vocabulary!" % word return returnVec #准备数据,按空格切分出词 #单词长度小于或等于2的全部丢弃 def textParse(bigString): import re listOfTokens = re.split(r'\W*', bigString) #tok.lower() 将整个词转换为小写 return [tok.lower() for tok in listOfTokens if len(tok) > 2] def spamTest(): #文章按篇存放 docList=[]; #存放文章类别 classList = []; #存放所有文章内容 fullText =[] for i in range(1,26): #读取垃圾邮件 #wordList = textParse(open('D:/work/python/email/spam/%d.txt' % i).read()) wordList = textParse(open('D:/machine learning/python/bayes/email/spam/%d.txt' % i).read()) #docList按篇存放文章 docList.append(wordList) #fullText邮件内容存放到一起 fullText.extend(wordList) #垃圾邮件类别标记为1 classList.append(1) #读取正常邮件 #wordList = textParse(open('D:/work/python/email/ham/%d.txt' % i).read()) wordList = textParse(open('D:/machine learning/python/bayes/email/ham/%d.txt' % i).read()) docList.append(wordList) fullText.extend(wordList) #正常邮件类别标记为0 classList.append(0) #创建词典 vocabList = createVocabList(docList) #训练集共50篇文章 trainingSet = range(50); #创建测试集 testSet=[] #随机选取10篇文章为测试集,测试集中文章从训练集中删除 for i in range(10): #0-50间产生一个随机数 randIndex = int(random.uniform(0,len(trainingSet))) #从训练集中找到对应文章,加入测试集中 testSet.append(trainingSet[randIndex]) #删除对应文章 del(trainingSet[randIndex]) #准备数据,用于训练分类器 trainMat=[]; #训练数据 trainClasses = [] #类别标签 #遍历训练集中文章数据 for docIndex in trainingSet: #每篇文章转为词袋向量模型,存入trainMat数据矩阵中 trainMat.append(bagOfWords2VecMN(vocabList, docList[docIndex])) #trainClasses存放每篇文章的类别 trainClasses.append(classList[docIndex]) #训练分类器 p0V,p1V,pSpam = trainNB0(array(trainMat),array(trainClasses)) #errorCount记录测试数据出错次数 errorCount = 0 #遍历测试数据集,每条数据相当于一条文本 for docIndex in testSet: #文本转换为词向量模型 wordVector = bagOfWords2VecMN(vocabList, docList[docIndex]) #模型给出的分类结果与本身类别不一致时,说明模型出错,errorCount数加1 if classifyNB(array(wordVector),p0V,p1V,pSpam) != classList[docIndex]: errorCount += 1 #输出出错的文章 print "classification error",docList[docIndex] #输出错误率,即出错次数/总测试次数 print 'the error rate is: ',float(errorCount)/len(testSet) #return vocabList,fullText if __name__ == "__main__": ###**********************留言板数据:观察参数值start ### #获取数据 listOPosts,listClasses = loadDataSet() # #构建词汇表 myVocabList = createVocabList(listOPosts) print 'myVocabList=',myVocabList print 'result=',setOfWords2Vec(myVocabList, listOPosts[0]) trainMat = [] for postinDoc in listOPosts: #构建训练矩阵 trainMat.append(setOfWords2Vec(myVocabList, postinDoc)) p0Vect,p1Vect,pAbusive = trainNB0(trainMat, listClasses) print 'p0Vect=' print p0Vect print 'p1Vect=' print p1Vect print 'pAbusive=' print pAbusive print 'trainMatrix=' print trainMat print 'listClasses=',listClasses ###**********************留言板数据:观察参数值end ## #测试留言板文档 print'===================================' testingNB() #***********************垃圾邮件 ## #垃圾邮件分类 print'=======spam filtering=============' spamTest()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米
暂无评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
2025年02月23日
2025年02月23日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]