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的概率,这个计算是通过贝叶斯公式来完成的. ...
随机推荐
- 对于drawRect使用,谨慎使用!
#1.drawRect简介drawRect方法在UIView的使用上起着十分关键的作用.不知道大家注意过没有,每一次创建UIView子类文件时候,会有自动带有已注释的drawRect方法,也许从这一点 ...
- Java 基础【05】你的多继承纳?
Java省略了许多很少用到,缺乏了解,混淆功能的C + +,在我们的经验中带来更多的悲伤大于收益 . -----James Gosling James Gosling 这个人大家应该很熟悉,就是最初设 ...
- Java 基础【02】 Super 用法
路漫漫其修远兮,吾将上下而求索.——屈原<离骚> 昨天写this用法总结的时候,突然产生了一个问题,请教别人之后,有了自己的一点认识.还是把它写下来,为大家更好的认识提供一点思路. 1)有 ...
- 济南day3
连续几天都有点炸 预计的分拿不到,调整好心态,考试的时候多想一下,think twice,code once 唉,什么情况啊 题解链接 0+0+0 T1读错题输出反了 n*m%2判断是否==1 T2 ...
- C# Ftp Client 基本操作
C# Ftp Client 上传.下载与删除 简单介绍一下Ftp Client 上传.下载与删除,这是目前比较常用的命令,各个方法其实都差不多,重点是了解Ftp命令协议. 1.建立连接 public ...
- Spring Boot中实现异步调用之@Async
一.什么是异步调用 “异步调用”对应的是“同步调用”,同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行:异步调用指程序在顺序执行时,不等待异步调用 的语句返回结果 ...
- 几种支持动作模型格式的比较(MD2,MD5,sea3d) 【转】
最近使用了几种不同的模型格式做人物动作的表现,记录一下优缺点 1) MD2 数据内容: 记录了所有动作顶点数据 数据格式: 二进制 动作文件: 动作文件合并在一个模型文件 文件大小: 动作多时很大 ...
- 浅析 rand7生成rand10 方法 之 思想篇(一)
[问题描写叙述] rand7是一个能生成1-7的随机数.要求利用rand7生成1-10的随机数. [算法思想] 1.组合数学方法 第1次 1 2 3 4 5 6 7 之中用rand7取一个数 第2次从 ...
- 整合Hibernate3.x
As of Spring 3.0, Spring requires Hibernate 3.2 or later. Hibernate 3和Hibernate 4有一些区别,所以对于spring而已, ...
- PHP几种抓取网络数据的常见方法
//本小节的名称为 fsockopen,curl与file_get_contents,具体是探讨这三种方式进行网络数据输入输出的一些汇总.关于 fsockopen 前面已经谈了不少,下面开始转入其它. ...