本章主要介绍了分类算法里面的一种最基本的分类器:朴素贝叶斯算法(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. js-禁止微信内置浏览器调整字体大小

    js方法: (function(){      if(typeof WeixinJSBridge=="object"&& typeof WeixinJSBridge ...

  2. liteos事件(六)

    1. 概述 1.1 基本概念 事件是一种实现任务间通信的机制,可用于实现任务间的同步,但事件通信只能是事件类型的通信,无数据传输.一个任务可以等待多个事件的发生:可以是任意一个事件发生时唤醒任务进行事 ...

  3. http put/delete方式请求

    HttpClient使用Delete方式提交数据 1. http请求主要有以下几种方法来对指定资源做不同操作: HTTP/1.1协议中共定义了八种方法(有时也叫“动作”)来表明Request-URI指 ...

  4. How to Create a Provisioning Profile for iPhone

    If you're making iPhone and iPad apps, there are some processes you must work through to go from dev ...

  5. 【hibernate】hibernate和mybatis的比较

    理解和学习,使自己在做项目中更加得心应手. 第一方面:开发速度的对比就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些.Mybatis框架相对简单很容易上手,但也相对简陋些.个人觉 ...

  6. NN优化方法对照:梯度下降、随机梯度下降和批量梯度下降

    1.前言 这几种方法呢都是在求最优解中常常出现的方法,主要是应用迭代的思想来逼近.在梯度下降算法中.都是环绕下面这个式子展开: 当中在上面的式子中hθ(x)代表.输入为x的时候的其当时θ參数下的输出值 ...

  7. POJ 1017 Packets(积累)

    [题意简述]:这个是别人的博客,有清晰的题意描写叙述.和解题思路,借助他的想法,能够非常好的解决问题! [分析]:贪心?模拟?见代码 //216K 16Ms #include<iostream& ...

  8. dom4j的xpath查找xml的指定节点

    递归遍历所有节点http://blog.csdn.net/sidihuo/article/details/47318723 获取Document SAXReader saxReader = new S ...

  9. Jenkins系列之-—08 实现SQL脚本批量执行

    公司内部推广DevOps,所有目前在维护阶段和开发阶段项目全部配置上了自动发布.采用Jenkins+SVN+ANT,之后批量执行SQL语句的实现提上日程 一.环境 Linux环境 安装ANT工具,且下 ...

  10. oracle ORA-06550

    declare  cnt integer; begin     select count(0)     into cnt     from user_all_tables    where table ...