当前位置: 首页 > news >正文

app商城网站开发建设网站技术要求

app商城网站开发,建设网站技术要求,WordPress文章ajax,ui设计主要做什么【机器学习实战】朴素贝叶斯#xff1a;过滤垃圾邮件 0.收集数据 这里采用的数据集是《机器学习实战》提供的邮件文件#xff0c;该文件有ham 和 spam 两个文件夹#xff0c;每个文件夹中各有25条邮件#xff0c;分别代表着 正常邮件 和 垃圾邮件。 这里需要注意的是需要…【机器学习实战】朴素贝叶斯过滤垃圾邮件 0.收集数据 这里采用的数据集是《机器学习实战》提供的邮件文件该文件有ham 和 spam 两个文件夹每个文件夹中各有25条邮件分别代表着 正常邮件 和 垃圾邮件。 这里需要注意的是需要将 email 文件夹放在 py 代码文件同一级的地方。若放在其他地方需要修改博主代码中的相对地址才可正常执行。 1.解析数据 我们需要将我们的文本文件导入到程序里面其中主要参数如下 d o c L i s t docList docList 是一个二维数组一共记录了50封邮件的内容。 f u l l T e x t fullText fullText是50封邮件中出现的所有单词的一个大的单词列表有重复单词 c l a s s L i s t classList classList用于记录当前邮件是 正常邮件 还是 垃圾邮件 用 0 和 1 进行区分。 v o c a b L i s t vocabList vocabList是一个单词均不重复的词汇表。 # 导入并解析文本文件for i in range(1, 26): # 因为每个文件夹各有文件25个wordList textParse(open(email/spam/%d.txt % i, encodingISO-8859-1).read()) # 读取文件docList.append(wordList) # 用于存储所有文件的单词列表二维数组fullText.extend(wordList) # 这个列表用于存储所有文件的单词将它们合并成一个大的单词列表classList.append(1)wordList textParse(open(email/ham/%d.txt % i, encodingISO-8859-1).read())docList.append(wordList)fullText.extend(wordList)classList.append(0)vocabList createVocabList(docList) # 创建不重复的词汇表# 邮件裁词 def textParse(bigString):regEx re.compile(r\W)listOfTokens regEx.split(bigString)var [tok.lower() for tok in listOfTokens if len(tok) 2] # 只返回长度大于2的情况return var# 创建词汇表 def createVocabList(dataSet):vocabSet set([]) # 创建一个无序且不重复的集合对象for document in dataSet:vocabSet vocabSet | set(document) # 创建两个集合的并集return list(vocabSet)ps因为这里的邮件全是英文邮件所以读取的时候编码是 encodingISO-8859-1 2.区分“测试集”和“训练集” 这里我们一共创建了10个测试集每取一个测试集就将其的索引从trainingSet 中删除。故trainingSet 最后剩下的40个索引就是训练集testSet中的10个索引就是测试集。 测试集用于判断朴素贝叶斯分类是否有问题。训练集用于训练朴素贝叶斯分类器的参数。 trainingSet list(range(50)) # 训练集的索引0-49因为ham和spam各有25个故一共有50个trainingSet trainingSettestSet []# 随机构造训练集for i in range(10): # 表示只创建10个测试集、剩下的都是训练集# 函数生成一个0到len(trainingSet)之间的随机浮点数然后取整得到一个随机的索引值randIndex。randIndex int(random.uniform(0, len(trainingSet)))testSet.append(trainingSet[randIndex]) # 将随机选择的索引值randIndex添加到测试集列表testSet中。trainingSet.pop(randIndex) # 删除训练集中对应的测试集的索引值以确保不会重复选择作为测试集。3.训练算法 朴素贝叶斯算法往简单说就是计算出当前参数为不同情况的概率最后哪个可能性的概率大那么他就是哪一类。 3.1 统计词汇出现的次数 # 朴素贝叶斯词袋模型 def bagOfWords2VecMN(vocabList, inputSet):returnVec [0] * len(vocabList) # 创建一个长度为vocabList的列表returnVec并将列表中的每个元素都初始化为0for word in inputSet:if word in vocabList:returnVec[vocabList.index(word)] 1 # 在词库里出现次数return returnVec3.2.训练函数 将各个邮件中词汇出现次数的词袋和最初记录每个邮件是 正常邮件 还是 垃圾邮件 的列表传入trainNB0计算出每个词汇是正常还是垃圾的可能性。 # 朴素贝叶斯分类器训练函数 def trainNB0(trainMatrix, trainCategory):numTrainDocs len(trainMatrix)numWords len(trainMatrix[0])pAbusive sum(trainCategory) / float(numTrainDocs) # 侮辱性单词出现的概率p0Num ones(numWords) # 为了防止出现 0 * x 的情况p1Num ones(numWords)p0Denom 2.0 # 为了防止分母为0的情况p1Denom 2.0for i in range(numTrainDocs):if trainCategory[i] 1:p1Num trainMatrix[i] # 计算每个词出现的次数p1Denom sum(trainMatrix[i]) # 计算总共出现多少个词else:p0Num trainMatrix[i]p0Denom sum(trainMatrix[i])p1Vect log(p1Num / p1Denom) # 计算每个词语是侮辱性词汇的概率p0Vect log(p0Num / p0Denom) # log是为了防止数据太小导致下溢出return p0Vect, p1Vect, pAbusive3.3分类器 根据我们确定的计算概率公式计算出它各个分类的可能性然后进行比较返回我们最好的决定。 # 朴素贝叶斯分类函数 def classifyNB(vec2Classify, p0Vec, p1Vec, pClass1):p1 sum(vec2Classify * p1Vec) log(pClass1)p0 sum(vec2Classify * p0Vec) log(1.0 - pClass1)if p1 p0:return 1else:return 04.完整代码 import re from numpy import *# 创建词汇表 def createVocabList(dataSet):vocabSet set([]) # 创建一个无序且不重复的集合对象for document in dataSet:vocabSet vocabSet | set(document) # 创建两个集合的并集return list(vocabSet)# 朴素贝叶斯词袋模型 setOfWords2Vec 升级版本 def bagOfWords2VecMN(vocabList, inputSet):returnVec [0] * len(vocabList) # 创建一个长度为vocabList的列表returnVec并将列表中的每个元素都初始化为0for word in inputSet:if word in vocabList:returnVec[vocabList.index(word)] 1 # 在词库里出现次数return returnVec# 朴素贝叶斯分类器训练函数 def trainNB0(trainMatrix, trainCategory):numTrainDocs len(trainMatrix)numWords len(trainMatrix[0])pAbusive sum(trainCategory) / float(numTrainDocs) # 侮辱性单词出现的概率p0Num ones(numWords) # 为了防止出现 0 * x 的情况p1Num ones(numWords)p0Denom 2.0 # 为了防止分母为0的情况p1Denom 2.0for i in range(numTrainDocs):if trainCategory[i] 1:p1Num trainMatrix[i] # 计算每个词出现的次数p1Denom sum(trainMatrix[i]) # 计算总共出现多少个词else:p0Num trainMatrix[i]p0Denom sum(trainMatrix[i])p1Vect log(p1Num / p1Denom) # 计算每个词语是侮辱性词汇的概率p0Vect log(p0Num / p0Denom) # log是为了防止数据太小导致下溢出return p0Vect, p1Vect, pAbusive# 朴素贝叶斯分类函数 def classifyNB(vec2Classify, p0Vec, p1Vec, pClass1):p1 sum(vec2Classify * p1Vec) log(pClass1)p0 sum(vec2Classify * p0Vec) log(1.0 - pClass1)if p1 p0:return 1else:return 0# 邮件裁词 def textParse(bigString):regEx re.compile(r\W)listOfTokens regEx.split(bigString)var [tok.lower() for tok in listOfTokens if len(tok) 2] # 只返回长度大于2的情况return vardef spamTest():docList []classList []fullText []# 导入并解析文本文件for i in range(1, 26): # 因为每个文件夹各有文件25个wordList textParse(open(email/spam/%d.txt % i, encodingISO-8859-1).read()) # 读取文件docList.append(wordList) # 用于存储所有文件的单词列表二维数组fullText.extend(wordList) # 这个列表用于存储所有文件的单词将它们合并成一个大的单词列表classList.append(1)wordList textParse(open(email/ham/%d.txt % i, encodingISO-8859-1).read())docList.append(wordList)fullText.extend(wordList)classList.append(0)vocabList createVocabList(docList) # 创建不重复的词汇表trainingSet list(range(50)) # 训练集的索引0-49因为ham和spam各有25个故一共有50个trainingSet trainingSettestSet []# 随机构造训练集for i in range(10): # 表示只创建10个测试集、剩下的都是训练集# 函数生成一个0到len(trainingSet)之间的随机浮点数然后取整得到一个随机的索引值randIndex。randIndex int(random.uniform(0, len(trainingSet)))testSet.append(trainingSet[randIndex]) # 将随机选择的索引值randIndex添加到测试集列表testSet中。trainingSet.pop(randIndex) # 删除训练集中对应的测试集的索引值以确保不会重复选择作为测试集。trainMat []trainClasses []for docIndex in trainingSet:# 将选中的训练集索引的文本和词汇表进行对比计算词汇出现的次数trainMat.append(bagOfWords2VecMN(vocabList, docList[docIndex]))trainClasses.append(classList[docIndex]) # 将文档的类别标签添加到trainClasses列表中# 调用trainNB0函数传入训练数据的特征向量和类别标签进行朴素贝叶斯训练得到分类器的参数p0V, p1V, pSpam trainNB0(array(trainMat), array(trainClasses))errorCount 0 # 计算错误次数初始值为0# 对测试集分类for docIndex in testSet:wordVector bagOfWords2VecMN(vocabList, docList[docIndex]) # 计算出现次数if classifyNB(array(wordVector), p0V, p1V, pSpam) ! classList[docIndex]: # 计算结果并判断是否判断正确errorCount 1print(classification error, docList[docIndex])print(the error rate is: , float(errorCount) / len(testSet))if __name__ __main__:spamTest() 结果截图 5.总结 个人感觉该方法的分类准确率对准备的数据以及概率计算方法很敏感可能一点点的改变就会导致最后的统计结果天差地别。总的来说朴素贝叶斯并不难代码也相对比较好理解这一章就顺利通过啦
http://www.zqtcl.cn/news/206957/

相关文章:

  • 成都家装排名前十名wordpress优化方法
  • 南阳做网站公司网站开发服务费分录
  • 网络课程网站建设龙岩个人小程序开发
  • 上海网络推广报价seo技术培训机构
  • 在线看免费网站哪个设计培训机构好
  • 网站建设制作确认单网站建设策划书格式及范文
  • framework7做网站如何在社交网站做销售
  • dedecms_v5.6室内装饰设计公司企业网站模板.rarwordpress添加3d地图吗
  • 开发网站的意义百度推广计划
  • 网站设计师网站网站建设从入门到精通pdf
  • 游戏网站建设方案百度文库wordpress调用搜索框
  • 京东物流网站建设特点网站开发与维护岗位说明书
  • 制作一个网站的基本步骤星巴克网站建设ppt
  • 搭建企业网站宽带多大php微信公众号开发教程
  • 国家建设公债拍卖网站新手如何自己建网站
  • 网站建设颊算网站注册界面代码
  • 微信h5网站模板下载百姓网征婚
  • 模板网站和插件有哪些河南第一火电建设公司网站
  • 怎么测网站流量吗网络运维工程师教程
  • 有谁帮做网站网站建设seo合同书
  • 自己做视频网站只能用地址连接专业网站建设效果
  • 重庆网站建设价格费用酒店协会网站集静态模板
  • 会议专题网站建设报价单网站代码在哪里修改
  • 怎么用net123做网站怎么给企业制作网站
  • 网站建设合同模板网页设计团队
  • 做排行的网站淘宝流量平台
  • 用dw怎么做网站后台做一个网站需要怎么做
  • 沧州地区阿里巴巴做网站修改wordpress标题图片
  • 怎么判断网站开发语言互联网推广模式
  • 做电影网站被找版权问题怎么处理网站做的简单是什么意思