朴素贝叶斯网络进行邮件分类

将以前做的邮件分类做个总结!

总体框架

下面我们将通过以下几个步骤,编写一个现实可用的垃圾邮件过滤器:
准备邮件数据;
创建词汇表;
特征提取;
训练模型;
模型验证;
使用模型。

分词与词汇表创建

删除可能是噪音的词
这一类词主要包括了副词、连词、语气助词、连词等,如常见的“在”、“的”、“而且”之类,其没有明确语义,对垃圾邮件过滤问题没有太大意义。
统一表示与词汇表
邮件体文本是不能被计算机所直接识别的,需要将其转换成计算机能够理解的形式;
一般形式是:[(‘您好’, 1) , (‘恭喜’, 0) , …, (‘谢谢’, 1) ], 前者是出现的词,后者是在对应邮件是否出现。

模型公式与其含义

样本: M封邮件,每份邮件被标记为垃圾邮件或者非垃圾邮件;

目标:M+1封邮件来的时候,判断是否是垃圾邮件;

类别c: 垃圾邮件c1c1c1,非垃圾邮件c2c2c2

词汇表: 统计M封邮件中出现的所有单词,记单词数目为N,即形成词汇表。

将每个样本si向量化: 初始化N维向量xix_ixi​,若词wjw_jwj​在sis_isi​中出现,则xij=1x_{ij}=1xij​=1,否则,为0。从而得到1000个NNN维向量xxx。
P(c∣x)=P(c)P(x∣c)P(x)=P(c)P(x)∏i=1NP(xi∣c)P(c|x) = \frac{P(c)P(x|c)}{P(x)} = \frac{P(c)}{P(x)}\prod_{i=1}^N P(x_i|c)P(c∣x)=P(x)P(c)P(x∣c)​=P(x)P(c)​i=1∏N​P(xi​∣c)

对于所有类别来说,P(x)P(x)P(x) 的值是一致的,所以使用一般直接计算:
c=argmaxci∈CP(ci)∏i=1NP(xi∣c)c = arg max_{c_i \in C } P(c_i) \prod_{i=1}^N P(x_i|c)c=argmaxci​∈C​P(ci​)i=1∏N​P(xi​∣c)
P(c∣xi)=maxci∈CP(ci)∏i=1NP(xi∣c)P(c|x_i) = max_{c_i \in C } P(c_i) \prod_{i=1}^N P(x_i|c)P(c∣xi​)=maxci​∈C​P(ci​)i=1∏N​P(xi​∣c)
具有最大概率的作为 样本 xix_ixi​ 的类别
P(ci)=∣Dci∣+1∣D∣+CiP(c_i) = \frac{|D_{c_i}| + 1}{ |D| + C_i}P(ci​)=∣D∣+Ci​∣Dci​​∣+1​
P(xi∣ci)=∣Dci,xi∣+1∣Dci∣+SiP(x_i | c_i) = \frac{|D_{c_i,x_i}| + 1}{ |D_{c_i}| + S_i}P(xi​∣ci​)=∣Dci​​∣+Si​∣Dci​,xi​​∣+1​

∣D∣|D|∣D∣:样本总数目(在这儿就是邮件数目)
∣Dci∣|D_{c_i}|∣Dci​​∣:第 i 个类别的样本数目Or 类别为cic_ici​的样本数目(比如:垃圾邮件的数目,正常邮件的数目)
∣Dci,xi∣|D_{c_i, x_i}|∣Dci​,xi​​∣:属性值为xix_ixi​ ,类别为cic_ici​的样本数目
CCC:数据集中可能的决策属性(类属性)。(比如:邮件分类是个二分类任务,这儿就是 {0,1})
CnC_nCn​:数据集中可能的决策属性(类属性)的取值数目。(比如:邮件分类是个二分类任务,这儿的取值就是 2 了)
SiS_iSi​:第 i 个属性可能的取值数,比如:某个词(属性)存在则取值1,不存在则为0,所以该属性的取值为[0, 1]

遇到生词怎么办?
+1+ 1+1 的目的是进行平滑(常常使用拉普拉斯修正):这是由于 ∣Dci∣|D_{c_i}|∣Dci​​∣ 或者∣Dxi,ci∣|D_{x_i, c_i}|∣Dxi​,ci​​∣ 的取值可能为 0,而计算的时候是累积 ∏\prod∏ 计算。
如何判定该分类器的正确率?
交叉验证

相关资料

机器学习项目:构建垃圾邮件分类

文本分类:垃圾邮件分类

中文垃圾邮件分类

贝叶斯垃圾邮件分类

朴素贝叶斯网络进行邮件分类相关推荐

  1. [CS229学习笔记] 5.判别学习算法与生成学习算法,高斯判别分析,朴素贝叶斯,垃圾邮件分类,拉普拉斯平滑

    本文对应的是吴恩达老师的CS229机器学习的第五课.这节课介绍了判别学习算法和生成学习算法,并给出了生成学习算法的一个实例:利用朴素贝叶斯进行垃圾邮件分类. 判别学习(Discriminative L ...

  2. Python实现基于朴素贝叶斯的垃圾邮件分类 标签: python朴素贝叶斯垃圾邮件分类 2016-04-20 15:09 2750人阅读 评论(1) 收藏 举报 分类: 机器学习(19) 听说

    Python实现基于朴素贝叶斯的垃圾邮件分类 标签: python朴素贝叶斯垃圾邮件分类 2016-04-20 15:09 2750人阅读 评论(1) 收藏 举报  分类: 机器学习(19)  听说朴 ...

  3. 机器学习--使用朴素贝叶斯进行垃圾邮件分类

    一.学习背景 垃圾邮件的问题一直困扰着人们,传统的垃圾邮件分类的方法主要有"关键词法"和"校验码法"等,然而这两种方法效果并不理想.其中,如果使用的是" ...

  4. 朴素贝叶斯法 - 垃圾邮件分类

    本文基于朴素贝叶斯构建一个分类垃圾邮件的模型,研究对象是英文的垃圾邮件. 邮件内容保存在txt文件中,其中分为训练样本train和测试样本test. 在训练样本中正常邮件命名为:pos:垃圾邮件命名为 ...

  5. 【阿旭机器学习实战】【11】文本分类实战:利用朴素贝叶斯模型进行邮件分类

    [阿旭机器学习实战]系列文章主要介绍机器学习的各种算法模型及其实战案例,欢迎点赞,关注共同学习交流. 本文主要介绍如何使用朴素贝叶斯模型进行邮件分类,置于朴素贝叶斯模型的原理及分类,可以参考我的上一篇 ...

  6. AI基础:朴素贝叶斯与垃圾邮件分类

    来,继续回顾基础算法 文章目录 背景&贝叶斯原理 贝叶斯分类器 朴素贝叶斯分类器 西瓜数据集下的朴素贝叶斯示例 朴素贝叶斯分类的优缺点 朴素贝叶斯关键问题 朴素贝叶斯企业中的应用案例 基于朴素 ...

  7. 朴素贝叶斯(垃圾邮件分类)

    一.基于贝叶斯决策理论的分类方法 朴素贝叶斯是经典的机器学习算法之一,也是为数不多的基于概率论的分类算法.对于大多数的分类算法,在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同.比 ...

  8. 基于朴素贝叶斯的垃圾邮件分类-着重理解拉普拉斯变换

    1. 引言 在正式学习朴素贝叶斯之前,需要明确的是机器学习所要实现的是基于有限的训练样本集尽可能准确地估计出后验概率P(c|x),即根据特征得到所属类别的概率,首先引入两个概念. 判别式模型(disc ...

  9. Python微调文本顺序对抗朴素贝叶斯算法垃圾邮件分类机制

    封面图片:<Python可以这样学>,ISBN:9787302456469,董付国,清华大学出版社 图书详情(京东): ================= 关于朴素贝叶斯算法中文垃圾邮件分 ...

最新文章

  1. python self的含义
  2. MyBatis学习 之 二、SQL语句映射文件(1)resultMap
  3. (原)Ubuntu14中安装GraphicsMagick
  4. SpringMVC 之类型转换Converter 源代码分析
  5. 网易云服务器上传文件,网易云音乐怎么把音乐上传到云盘 网易云音乐把音乐上传到云盘的步骤方法...
  6. LoadRunner教程(24)-LoadRunner 读取Excel数据参数化
  7. 数据库连接池原理之手写
  8. css能不能实现剪切蒙版,CSS中图形剪切、遮罩功能-及使用说明
  9. Tea Data Analysis System 茶饮数据分析系统
  10. 共用体union与枚举enum(C++)
  11. 验收测试的名词解释_验收测试工作流程及准则
  12. c语言中ch1和ch2是什么意思,2020-05-26(C语言)1.将串str中所有值为ch1的字符转换成ch2的字符,如果str为空串,或者串中不含值为ch1的字符,则什么都不做.2.逆转函数...
  13. 【Linux系统】第5节 Linux增删改查常用命令及查看命令字帮助手册
  14. 如何为Win10开启DoH(DNS over HTTPS)
  15. springcloud + nacos多环境联调、本地联调(即灰度版本)
  16. 引起网络广播风暴的原因
  17. 005:vue+openlayers加载Mapbox地图示例
  18. 使用vCenter Converter 工具P2V迁移windos server 2003 sp1-sp2操作系统遇到的问题
  19. 【优化模型】最优化计算蒙特卡洛法
  20. 2.7关系运算与逻辑运算

热门文章

  1. Java中introduce方法_Java基础—继承
  2. ad16自动布线设置规则_电路板设计技巧:七大步骤确定PCB布局和布线
  3. 蒙山中学网站的服务器,上海金山区蒙山中学
  4. keil c语言 位域,联合体位域在keil c遇到的问题怎样解决?
  5. linq 动态拼接where条件 类似 T_SQL And Or
  6. js实现小时钟,js中Date对象的使用?
  7. python 模块
  8. MANIFEST.MF的用途(转载)
  9. 大约HR升级版的设计为组汇总
  10. VS2010调试小技巧