本章主要介绍了分类算法里面的一种最基本的分类器:朴素贝叶斯算法(NB),算法性能正如英文缩写的一样,很NB,尤其在垃圾邮件检测领域,关于贝叶斯的网上资料也很多,这里推荐那篇刘未鹏写的http://mindhacks.cn/2008/09/21/the-magical-bayesian-method/,作者深入浅出的概述了贝叶斯背后的思想跟应用领域,关于其理论方面可以参考斯坦福大学NG的machine learning cs299的讲义,关于代码实现可以参考一些开源的包或者自己动手写(之前,闲来无事写了一个基于MRjob的MapReduce版本),关于成熟开源工具包可以参考scikit,orange,weka,mahout,tm等。

言归正传,本章是结合R语言在垃圾邮件检测上的应用,整章大部分篇幅在特征提取那块,如何提取邮件正文,并结合R的tm(text mining)工具包,抽取特征,计算各种先验概率,最后通过贝叶斯法则导出P(y|x)的条件概率,尽管现实很多数据并不满足该算法所要求的特征是相互独立的硬性条件,但这不妨碍NB的NB性能。

最后看一下书中给出的2个结果

 表1

邮件类型 分类正常邮件的比例 分类垃圾邮件的比例
易识别正常邮件 0.78 0.22
不易识别正常邮件 0.73 0.27
垃圾邮件 0.15 0.85

表2

邮件类型 分类正常邮件的比例 分类垃圾邮件的比例
易识别正常邮件 0.90 0.10
不易识别正常邮件 0.82 0.18
垃圾邮件 0.18 0.82

表1的结果是假定类别先验概率比例是 垃圾邮件/正常邮件=0.5/0.5,而表2是 垃圾邮件/正常邮件=0.2/0.8。

可以看出表2的误判率低于表1,但是漏判率也要高于表1,这存在一个权衡,到底关注误判率的低还是漏判率的低,或者二者的折中,这让我想起了之前做的一个关于游戏用户流失预警项目,当时我一个劲提高识别率而忽略了误判率,其实这会对误判的那些正常用户造成很大的骚扰,所以做项目还是要紧密结合业务场景。在垃圾邮件这个场景下,误判率高的意味着会更可能的把正常邮件当做垃圾邮件而删除,这会影响用户体验,漏判率高意味着识别算法的性能低下,类似的矛盾很多,如机器学习里面的bais/variance,计算机算法里面的时间复杂度/空间复杂度等。

在垃圾邮件这个场景下,误判率比漏判率可能更为重要一点,如果一封对用户很重要的邮件被系统判定spam的话,那么给用户带来的体验伤害比一封垃圾邮件带来的骚扰更深刻。当然现在的邮箱系统功能丰富,加入了各种其他的非邮件正文的特征,比如发件人的IP地址等等,识别率已经达到了99%+了,也添加了跟用户的交互功能,可以让用户标示哪些是垃圾邮件,定制一个个性化邮件过滤系统。

machine learning for hacker记录(3) 贝叶斯分类器的更多相关文章

  1. 《Machine Learning in Action》—— 白话贝叶斯,“恰瓜群众”应该恰好瓜还是恰坏瓜

    <Machine Learning in Action>-- 白话贝叶斯,"恰瓜群众"应该恰好瓜还是恰坏瓜 概率论,可以说是在机器学习当中扮演了一个非常重要的角色了.T ...

  2. Machine Learning in Action(3) 朴素贝叶斯算法

    贝叶斯决策一直很有争议,今年是贝叶斯250周年,历经沉浮,今天它的应用又开始逐渐活跃,有兴趣的可以看看斯坦福Brad Efron大师对其的反思,两篇文章:“Bayes'Theorem in the 2 ...

  3. machine learning for hacker记录(4) 智能邮箱(排序学习&推荐系统)

    本章是上一章邮件过滤技术的延伸,上一章的内容主要是过滤掉垃圾邮件,而这里要讲的是对那些正常的邮件是否可以加入个性化元素,由于每个用户关心的主题并非一样(有人喜欢技术类型的邮件或者购物促销方便的内容邮件 ...

  4. machine learning for hacker记录(2) 数据分析

    本章主要讲了对数据的一些基本探索,常见的six numbers,方差,均值等 > data.file <- file.path('data', '01_heights_weights_ge ...

  5. machine learning for hacker记录(1) R与机器学习

    开篇:首先这本书的名字很霸气,全书内容讲的是R语言在机器学习上面的应用,一些基本的分类算法(tree,SVM,NB),回归算法,智能优化算法,维度约减等,机器学习领域已经有很多成熟的R工具箱,毕竟这个 ...

  6. 【原创】.NET平台机器学习组件-Infer.NET连载(二)贝叶斯分类器

                本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html 微软Infer.NET机器学习组件文章目录:http:/ ...

  7. Naive Bayes Classifier 朴素贝叶斯分类器

    贝叶斯分类器的分类 根据实际处理的数据类型, 可以分为离散型贝叶斯分类器和连续型贝叶斯分类器, 这两种类型的分类器, 使用的计算方式是不一样的. 贝叶斯公式 首先看一下贝叶斯公式 $ P\left ( ...

  8. 吴裕雄 python 机器学习——高斯贝叶斯分类器GaussianNB

    import matplotlib.pyplot as plt from sklearn import datasets,naive_bayes from sklearn.model_selectio ...

  9. SIGAI机器学习第五集 贝叶斯分类器

    讲授贝叶斯公式.朴素贝叶斯分类器.正态贝叶斯分类器的原理.实现以及实际应用 大纲: 贝叶斯公式(直接用贝叶斯公式完成分类,计算一个样本的特征向量X属于每个类c的概率,这个计算是通过贝叶斯公式来完成的. ...

随机推荐

  1. Cmder 快捷键

    1, Cmder常用快捷键 利用Tab,自动路径补全: 利用Ctrl+T建立新页签:利用Ctrl+W关闭页签; 利用Ctrl+Tab切换页签; Alt+F4:关闭所有页签 Alt+Shift+1:开启 ...

  2. AC日记——网络最大流 洛谷 P3376

    题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行 ...

  3. 浅谈DPCHookSSDT和RemoveDPC

    最近学了DPC这一对,把Win7 32位和64位都做了,查阅了大量的资料,并且进行了大量调试,理一下思路,为了后面更好的学习. 转载请注明出处:http://www.cnblogs.com/littl ...

  4. 使用vue-element-admin框架开发时遇到的跨域问题

    之前 使用js和jquery开发时也碰到过接口请求时的跨域问题, 但是在使用vue-element-admin开发也碰到这个问题,而且不能使用之前的方法解决,查过不少资料,找到一个很好的方法解决了这个 ...

  5. SD-WAN用户实践分享:老网工趟出的SD-WAN成功路

    在这个离开“人大物云”(人-人工智能.大-大数据.物-物联网.云-云计算)话题都张不开嘴的年代,在这个在咖啡店谈生意都不好意思低于1个亿的年代,反思我的老本行——网络,正在以一种全新的.更加重要的姿态 ...

  6. Linux下安装python3.3.2及configrue、make、make install

    一.安装python3.3.2 raspberry的/usr/local/src目录没有权限,可执行如下命令 pi@raspberrypi:~$ sudo chmod -R 777 /usr/loca ...

  7. hadoop之hdfs------------------FileSystem及其源码分析

    FileSystem及其源码分析 FileSystem这个抽象类提供了丰富的方法用于对文件系统的操作,包括上传.下载.删除.创建等.这里多说的文件系统通常指的是HDFS(DistributedFile ...

  8. ios中表示private

    在.m中写成 如下形式既为私有的形式 @interface ViewController ()  这里只是声明类名和括号即可 /////方法等 @end

  9. Android(java方法)上实现mp4的分割和拼接 (二)

    这节谈一下如何在android上实现mp4文件的高效率切割. 业务需求举例:把一段2分钟的mp4文件切割出00:42 至 01:16这段时间的视频,要求足够短的执行时间和尽量少的误差. 分析:mp4P ...

  10. OpenGL step to step(1)

    在窗体上绘制一个矩形,just a demo #include <GLUT/GLUT.h> void init() { glClearColor(0.0,0.0,0.0,0.0); glS ...