[实战] 朴素贝叶斯分类器进行垃圾邮件过滤_朴素贝叶斯分类器和svm在垃圾邮件过滤任务中-程序员宅基地

技术标签: NLP  ——机器学习——  机器学习实战  

我们已经讲解过朴素贝叶斯分类器的基本原理和实现:动手实现朴素贝叶斯分类器进行文档分类
在此基础上,我们实现垃圾邮件的过滤,数据为50封txt邮件

(1)将text文本文件,分成单词列表
使用正则表达式,使用除单词和数字外的任意字符串为分隔符
并删除长度小于3的字符串

def textParse(bigString):
    import re
    listOfTokens = re.split(r'\W*', bigString)
    return [tok.lower() for tok in listOfTokens if len(tok) > 2]

(2)垃圾邮件检测

def spamTest():
    docList = []; classList = []; fullText = []
    for i in range(1,26):
        #读取25封垃圾邮件
        path = 'email/spam/{0}.txt'.format(i)
        wordList = textParse(open(path).read())
        docList.append(wordList)
        fullText.extend(wordList)
        classList.append(1)
        #读取25封正常邮件
        path = 'email/ham/{0}.txt'.format(i)
        wordList = textParse(open(path).read())
        docList.append(wordList)
        fullText.extend(wordList)
        classList.append(0)
    #构建词汇表
    vocabList = createVocabList(docList)
    #训练集和测试集索引列表
    trainingSet = [i for i in range(50)]; testSet = []
    #随机选取10个测试文件索引
    for i in range(10):
        randIndex = int(random.uniform(0,len(trainingSet)))
        testSet.append(trainingSet[randIndex])
        del(trainingSet[randIndex])
    #创建训练文件和标签
    trainMat = []; trainClasses = []
    for docIndex in trainingSet:
        trainMat.append(setOfWord2Vec(vocabList, docList[docIndex]))
        trainClasses.append(classList[docIndex])
    #训练数据
    p0v, p1v, pSpam = trainNB0(array(trainMat), array(trainClasses))
    #测试数据
    errorCount = 0
    for docIndex in testSet:
        wordVector = setOfWord2Vec(vocabList, docList[docIndex])
        if classifyNB(array(wordVector), p0v, p1v, pSpam) != classList[docIndex]:
            errorCount += 1
    #输出错误率
    print('the error rate is: {0}'.format(float(errorCount)/len(testSet)))
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/STILLxjy/article/details/90245412

智能推荐

springboot中返回值json中null转换空字符串_阿里的json转化怎么把null转为空字符串-程序员宅基地

文章浏览阅读2.4k次。在实际项目中,我们难免会遇到一些无值。当我们转JSON时,不希望这些null出现,比如我们期望所有的null在转JSON时都变成“”“”这种空字符串,那怎么做呢?Jackson中对null的处理 1 @Configuration 2 public class JacksonConfig { 3 @Bean 4 @Primary 5 @Condition..._阿里的json转化怎么把null转为空字符串

连登 GitHub TOP 榜,中国开发者在行动!_连登 技术-程序员宅基地

文章浏览阅读1.2w次,点赞86次,收藏87次。中国开发者对于疫情的整体关注程度及防护方向。_连登 技术

java计算机毕业设计教育辅导班信息网服务端源码+mysql数据库+系统+lw文档+部署-程序员宅基地

文章浏览阅读37次。java计算机毕业设计教育辅导班信息网服务端源码+mysql数据库+系统+lw文档+部署。springboot基于Vue.js的云医疗自助就诊平台的设计与实现。前端技术:Layui、HTML、CSS、JS、JQuery等技术。springboot颜如玉图书销售网站的设计与实现。springboot竞赛信息发布及组队系统。springboot郑财校园新闻管理系统。springboot校园任务发布系统。

对jupyter notebook运行时出现“The kernel appears to have died. It will restart automatically”的解决方案_用jupyternotebook训练模型总是the kernel appears to have d-程序员宅基地

文章浏览阅读1.6w次,点赞8次,收藏21次。1、前天在jupyter notebook 上运行tensorflow的代码时(主要是卷积神经网络,用小笔记本上的GPU),运行没多久,出现“The kernel appears to have died. It will restart automatically”。试了很多遍,一直都是这样。但是又运行之前的Tensorflow基础运算和全连接神经网络的程序,都可以运行,只有开始跑卷积神经网..._用jupyternotebook训练模型总是the kernel appears to have died. it will restar

redisson分布式锁组合spring事务解决锁被释放但事务还未被提交的问题_redis分布式锁释放了,业务还没处理完-程序员宅基地

文章浏览阅读2.6k次,点赞10次,收藏25次。定义的注解里面建议组合spring的Transactional注解 这样的话,使用者能够定义像传播特性、隔离级别等之类的属性,而不需要我们重新定义/**// 开启事务 如果不需要组合的话 可选择使用此注解 // 但需要稍微改一下后续的代码 // boolean transactional() default false;// 组合事务注解 最推荐 很方便 Transactional transactional();// 开启锁 boolean lock() default true;_redis分布式锁释放了,业务还没处理完

python asyncio和celery对比_如何将Celery与asyncio结合? - python-程序员宅基地

文章浏览阅读222次。如何创建使芹菜任务看起来像asyncio.Task的包装器?还是有更好的方法将Celery与asyncio集成?@ asksol,Celery的创建者said this::使用Celery作为异步I / O框架之上的分布式层是很常见的(提示:将CPU绑定的任务路由到prefork worker意味着它们不会阻塞事件循环)。但是我找不到任何专门针对asyncio框架的代码示例。参考方案如官方网站中所..._asyncio和celery

随便推点

OpenJudge-1.3.15:苹果和虫子_openjudge苹果和虫子-程序员宅基地

文章浏览阅读267次。OpenJudge-1.3.15:苹果和虫子_openjudge苹果和虫子

深入理解代理模式:静态代理与JDK动态代理_jdk 代理是静态代理-程序员宅基地

文章浏览阅读1.3w次,点赞32次,收藏140次。摘要:      代理模式为其他对象提供了一种代理以控制对这个对象的访问,具体实现包括两大类:静态代理和动态代理。Java动态代理机制的出现使得Java开发人员只需要简单地指定一组接口及委托类对象便能动态地获得代理类,并且其所生成的代理类在将所有的方法调用分派到委托对象上反射执行的同时,还可以对方法进行增强,这也正是Spring AOP的实现基础。通过阅读本文,读者将会对代理模式和Java动态..._jdk 代理是静态代理

jquery checkbox全选,全不选,反选方法,jquery checkbox全选只能操作一次_js只能全选一次-程序员宅基地

文章浏览阅读334次。jquery checkbox全选,全不选,反选方法,jquery checkbox全选只有第一次成功jquery checkbox全选只能操作一次,下载Js代码 /** * 全选 * 对于Jquey1.7.2+版本,使用attr会造成只能操作一次。 * 对于HTML元素本身就带有的固有属性,在处理时,使用prop方法。 _js只能全选一次

JAVA微信小程序论坛系统毕业设计 开题报告_论坛微信小程序设计报告-程序员宅基地

文章浏览阅读3.5k次,点赞6次,收藏54次。本课题主要目标是设计并能够实现一个基于微信小程序论坛交流系统,前台用户使用小程序,后台管理使用Java+Mysql开发,后台使用了springboot框架;通过后台设置录入资讯、管理用户、设置轮播图、管理交流主题和回复管理;用户通过小程序登录,查看资讯、查看交流帖子、发起帖子、回复帖子等。_论坛微信小程序设计报告

command C:\Windows\system32\cmd.exe /d /s /c node ./build.js的解决方法_npm err! command c:\windows\system32\cmd.exe /d /s-程序员宅基地

文章浏览阅读3.6k次。npm ERR! command C:\Windows\system32\cmd.exe /d /s /c node ./build.js_npm err! command c:\windows\system32\cmd.exe /d /s /c node scripts/build.js

c32循迹小车c语言程序,stm32篇--小车循迹-程序员宅基地

文章浏览阅读1.3k次。小车的循迹算法循迹小车使用红外对射寻黑线,根据轨道的不同,我使用了两种不同算法:(1)第一种是在轨道外有影响的,比如轨道外有黑色,车出去一点就会碰到黑色,那就是检测到歪了之后除非检测它回来了,否则一直拐弯://自己寻道void Self_Tracting(void){while(1){test_sensor();motor_move_speed(paras.speed);if(GPIO_ReadI..._寻迹小车怎么用c语言在拐歪处区分两条黑线

推荐文章

热门文章

相关标签