machine learning for hacker记录(3) 贝叶斯分类器
本章主要介绍了分类算法里面的一种最基本的分类器:朴素贝叶斯算法(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) 贝叶斯分类器的更多相关文章
- 《Machine Learning in Action》—— 白话贝叶斯,“恰瓜群众”应该恰好瓜还是恰坏瓜
<Machine Learning in Action>-- 白话贝叶斯,"恰瓜群众"应该恰好瓜还是恰坏瓜 概率论,可以说是在机器学习当中扮演了一个非常重要的角色了.T ...
- Machine Learning in Action(3) 朴素贝叶斯算法
贝叶斯决策一直很有争议,今年是贝叶斯250周年,历经沉浮,今天它的应用又开始逐渐活跃,有兴趣的可以看看斯坦福Brad Efron大师对其的反思,两篇文章:“Bayes'Theorem in the 2 ...
- machine learning for hacker记录(4) 智能邮箱(排序学习&推荐系统)
本章是上一章邮件过滤技术的延伸,上一章的内容主要是过滤掉垃圾邮件,而这里要讲的是对那些正常的邮件是否可以加入个性化元素,由于每个用户关心的主题并非一样(有人喜欢技术类型的邮件或者购物促销方便的内容邮件 ...
- machine learning for hacker记录(2) 数据分析
本章主要讲了对数据的一些基本探索,常见的six numbers,方差,均值等 > data.file <- file.path('data', '01_heights_weights_ge ...
- machine learning for hacker记录(1) R与机器学习
开篇:首先这本书的名字很霸气,全书内容讲的是R语言在机器学习上面的应用,一些基本的分类算法(tree,SVM,NB),回归算法,智能优化算法,维度约减等,机器学习领域已经有很多成熟的R工具箱,毕竟这个 ...
- 【原创】.NET平台机器学习组件-Infer.NET连载(二)贝叶斯分类器
本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html 微软Infer.NET机器学习组件文章目录:http:/ ...
- Naive Bayes Classifier 朴素贝叶斯分类器
贝叶斯分类器的分类 根据实际处理的数据类型, 可以分为离散型贝叶斯分类器和连续型贝叶斯分类器, 这两种类型的分类器, 使用的计算方式是不一样的. 贝叶斯公式 首先看一下贝叶斯公式 $ P\left ( ...
- 吴裕雄 python 机器学习——高斯贝叶斯分类器GaussianNB
import matplotlib.pyplot as plt from sklearn import datasets,naive_bayes from sklearn.model_selectio ...
- SIGAI机器学习第五集 贝叶斯分类器
讲授贝叶斯公式.朴素贝叶斯分类器.正态贝叶斯分类器的原理.实现以及实际应用 大纲: 贝叶斯公式(直接用贝叶斯公式完成分类,计算一个样本的特征向量X属于每个类c的概率,这个计算是通过贝叶斯公式来完成的. ...
随机推荐
- HDU 2767:Proving Equivalences(强连通)
题意: 一个有向图,问最少加几条边,能让它强连通 方法: 1:tarjan 缩点 2:采用如下构造法: 缩点后的图找到所有头结点和尾结点,那么,可以这么构造:把所有的尾结点连一条边到头结点,就必然可以 ...
- 回调函数 typedef bool (*IsUsed)(const string &name,boost::shared_ptr<ShpGeometry> oneGeometry);
就是指向函数的指针. 回调函数,表示了一个函数的地址,将函数作为参数进行使用.参考百度百科:http://baike.baidu.com/view/414773.htm 常用的大概就是在sort函数中 ...
- Python远程视频监控程序
老板由于事务繁忙无法经常亲临教研室,于是让我搞个监控系统,让他在办公室就能看到教研室来了多少人.o(>﹏<)o||| 最初我的想法是直接去网上下个软件,可是找来找去不是有毒就是收费,无奈技 ...
- [原创][FPGA][IP-Core]altlvds_tx & altlvds_rx
1. 概述 Alter公司的QuartusII软件提供了LVDS发送和接收的IP核供我们使用,其在本质上可以理解为并行-串行数据的转换器.其在官方文档(见附件)上也这样说过.其中的应用场景有告诉AD/ ...
- java并发之hashmap源码
在上篇博客中分析了hashmap的用法,详情查看java并发之hashmap 本篇博客重点分析下hashmap的源码(基于JDK1.8) 一.成员变量 HashMap有以下主要的成员变量 /** * ...
- 仓鼠找sugar(lca)
洛谷——P3398 仓鼠找sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅( ...
- 分布式缓存之Memcache
〇.为什么要用分布式缓存 1.软件从单机到分布式 走向分布式第一步就是解决:多台机器共享登录信息的问题. 例如:现在有三台机器组成了一个Web的应用集群,其中一台机器用户登录,然后其他另外两台机器共享 ...
- 邁向IT專家成功之路的三十則鐵律 鐵律十二:IT人養生之道-德行
所謂的「養生」在中國古代裡所指的是針對內在精神層面修為的提升,到了近代中醫所謂的養生,則除了包含最根本的內在精神層面之外,還涵蓋了外在身體的養護.在現今各行各業的人士當中,嚴格來說都應該要有一套專屬的 ...
- Android 设定横屏,禁止屏幕旋转,Activity重置 [更新视频播放器相关]
1. 设定屏幕方向 当指定了屏幕的方向后(非SCREEN_ORIENTATION_UNSPECIFIED),屏幕就不会自己主动的旋转了 有2中方式控制屏幕方向: 1.1 改动AndroidManife ...
- Hibernate中的session和load延迟载入矛盾问题,怎样解决?
假设延迟载入出现session close的情况下 方法1.在web.xml中配置spring的openSessionInViewFilter <filter> <filter-n ...