1、概述

朴素贝叶斯分类是贝叶斯分类器的一种,贝叶斯分类算法是统计学的一种分类方法,利用概率统计知识进行分类,其分类原理就是利用贝叶斯公式根据某对象的先验 概率计算出其后验概率(即该对象属于某一类的概率),然后选择具有最大后验概率的类作为该对象所属的类。总的来说:当样本特征个数较多或者特征之间相关性较大时,朴素贝叶斯分类效率比不上决策树模型;当各特征相关性较小时,朴素贝叶斯分类性能最为良好。另外朴素贝叶斯的计算过程类条件概率等计算彼此是独立的,因此特别适于分布式计算。本文详述了朴素贝叶斯分类的统计学原理,并在文本分类中实现了该算法。朴素贝叶斯分类器用于文本分类时有多项式模型(词袋)和贝努利模型(词集)两种。

2、贝叶斯决策理论

对于随机试验E有两个随机事件A,B,且P(B) > 0 那么在B事件发生的条件下A发生的概率为:

其中P(AB)为A,B两个事件的联合概率。对上式利用乘法公式可以变形为:

这样就得到了贝叶斯公式。贝叶斯文本分类就是基于这个公式,利用先验概率来得到文本的分类。

其中P(Ci) 为第i个文本类别出现的概率, P(w1,w2…wn|Ci)
为文本类别为Ci时出现特征向量(w1,w2…wn)的概率,P(w1,w2…wn)为特征向量出现的概率。一般的会假设特征词,在文本中出现的概率是独立的,也就是说词和词之间是不相关的,那么这时候的联合概率就可以表示为乘积的形式,如
下:
(1)
对于特定的训练集合来说,上式中P(w1)P(w2)…P(wn)是一个固定的常数,那么在进行分类计算的时候可以省略掉这个分母的计算,如是得到贝叶斯准则: (2)

事例解释

假设现在有一个装了7块石头的罐子,其中3块是灰色的,4块是黑色的,如果从罐子中随机取出一块石头,那么灰色石头的可能性是3/7,黑色石头的可能性是4/7;如果这7块石头放在两个桶中,A桶有2块灰色、2块黑色,B桶有1块灰色、2块黑色,这里就涉及到条件概率,假定计算的是从B桶取到灰色石头的概率,这个概率可以记作P(gray|bucketB),我们称之为“在已知石头出自B桶的条件下,取出灰色石头的概率”,那么P(gray|buketA)=2/4,P(gray|buketB)=1/3

条件概率的公式如下:

P(gray|buketB)=P(gray and buketB)/P(buketB)

解释:首先用B桶中灰色石头的个数除以总石头数,得到P(gray and buketB)=1/7,其次由于B桶中有3块石头,而总石头数为7,于是P(buketB)=3/7,于是有P(gray|buketB)=P(gray and buketB)/P(buketB)=1/3

使用条件概率来分类

通过(1)式可以得到贝叶斯分类准则为:

如果P(C1|w1,w2,...)>P(C2|w1,w2,...),那么属于类别C1;

如果P(C1|w1,w2,...)<P(C2|w1,w2,...),那么属于类别C2。

3、朴素贝叶斯进行文档分类

朴素贝叶斯是贝叶斯决策理论的一部分。机器学习的一个重要应用就是文档的自动分类。在文档分类中,整个文档(如一封电子邮件)是实例,而电子邮件中的某些元素则构成特征,虽然电子邮件是一种会不断增加的文本,但我们同样也可以对新闻报道、用户留言、政府公文等其他任意类型的文本进行分类。我们可以观察文档中出现的词,并把每个词的出现或者不出现作为一个特征,这样得到的特征数目就会跟词汇表中的词目一样多。朴素贝叶斯是用于文档分类常用算法。

朴素贝叶斯的假设:

(1)文档中的特征之间相互独立:即一个特征或者单词出现的可能性与它和其他单词相邻没有关系,举例讲,假设单词bacon出现在unhealthy后面与出现在delicious后面的概率相同。当然,这种假设并不正确,bacon常常出现在delicious附近,这个假设正是朴素贝叶斯分类器中的朴素(native)一词的含义。

(2)文档中的每个特征同等重要,其实这个假设也是有问题的,举例讲,如果要判断留言板的留言是否得到,那么可能不需要看完所有的1000个单词,而只需要看10~20个特征就足以做出判断。

尽管上述假设存在一些小的瑕疵,但朴素贝叶斯的实际效果却很好。

4、朴素贝叶斯的一般过程

(1)收集数据:可以使用任何方法。本章使用RSS源。

(2)准备数据:需要数值型或者布尔型数据。

(3)分析数据:有大量特征时。绘制特征作用不大,此时使用直方图效果更好

(4)训练算法:计算不同的独立特征的条件概率。

(5)测试算法:计算错误绿。

(6)使用算法:一个常见的朴素贝叶斯应用是文档分类。可以在任意的分类场景中使用朴素贝叶斯分类器,不一定非要是文本。

5、朴素贝叶斯优缺点

优点:在数据较少的情况下仍然有效,可以处理多类别问题。

缺点:对于输入数据的准备方式较为敏感。

适用数据类型:标称型数据

【Machine Learning in Action --4】朴素贝叶斯分类的更多相关文章

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

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

  2. 机器学习实战(Machine Learning in Action)学习笔记————04.朴素贝叶斯分类(bayes)

    机器学习实战(Machine Learning in Action)学习笔记————04.朴素贝叶斯分类(bayes) 关键字:朴素贝叶斯.python.源码解析作者:米仓山下时间:2018-10-2 ...

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

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

  4. 【机器学习实战】Machine Learning in Action 代码 视频 项目案例

    MachineLearning 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远 Machine Learning in Action (机器学习实战) | ApacheCN(apa ...

  5. 学习笔记之机器学习实战 (Machine Learning in Action)

    机器学习实战 (豆瓣) https://book.douban.com/subject/24703171/ 机器学习是人工智能研究领域中一个极其重要的研究方向,在现今的大数据时代背景下,捕获数据并从中 ...

  6. 《Machine Learning in Action》—— 浅谈线性回归的那些事

    <Machine Learning in Action>-- 浅谈线性回归的那些事 手撕机器学习算法系列文章已经肝了不少,自我感觉质量都挺不错的.目前已经更新了支持向量机SVM.决策树.K ...

  7. K近邻 Python实现 机器学习实战(Machine Learning in Action)

    算法原理 K近邻是机器学习中常见的分类方法之间,也是相对最简单的一种分类方法,属于监督学习范畴.其实K近邻并没有显式的学习过程,它的学习过程就是测试过程.K近邻思想很简单:先给你一个训练数据集D,包括 ...

  8. 机器学习实战(Machine Learning in Action)学习笔记————10.奇异值分解(SVD)原理、基于协同过滤的推荐引擎、数据降维

    关键字:SVD.奇异值分解.降维.基于协同过滤的推荐引擎作者:米仓山下时间:2018-11-3机器学习实战(Machine Learning in Action,@author: Peter Harr ...

  9. 机器学习实战(Machine Learning in Action)学习笔记————09.利用PCA简化数据

    机器学习实战(Machine Learning in Action)学习笔记————09.利用PCA简化数据 关键字:PCA.主成分分析.降维作者:米仓山下时间:2018-11-15机器学习实战(Ma ...

  10. 机器学习实战(Machine Learning in Action)学习笔记————08.使用FPgrowth算法来高效发现频繁项集

    机器学习实战(Machine Learning in Action)学习笔记————08.使用FPgrowth算法来高效发现频繁项集 关键字:FPgrowth.频繁项集.条件FP树.非监督学习作者:米 ...

随机推荐

  1. css和css3学习

    css和css3学习 css布局理解 css颜色大全 样式的层叠和继承 css ::before和::after伪元素的用法 中文字体font-family常用列表 cursor属性 css选择器 F ...

  2. PAT乙级1004. 成绩排名 (20)

    读入n名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式:每个测试输入包含1个测试用例,格式为 第1行:正整数n 第2行:第1个学生的姓名 学号 成绩 第3行:第2个学生 ...

  3. putty 使用 注意事项

    putty命令行模式,修改文本 小心数字小键盘 变命令!! 务必在putty--选项 Terminal->Features 里,找到 Disable application keypad mod ...

  4. 利用Paramiko模块远程连接Linux

    使用Paramiko模块模拟SSH远程连接到服务器,并执行命令.(支持Tab键补全) 1.安装相关模块: 1)安装 Crypto 模块: 下载源码包解压 安装: sudo python setup.p ...

  5. css 小知识

    <!-- IE下消除点击图片文字后出现的虚线框代码 --> <style type="text/css">a {blr:expression(this.on ...

  6. clone远程代码及push

    clone远程代码1. git bash进入 git文件夹2. 从远程直接clone: git clone root@109.110.100.56:/usr/src/git-2.1.2/data/gi ...

  7. Difference between TCP and UDP

    refered from http://www.cyberciti.biz/faq/key-differences-between-tcp-and-udp-protocols/ TCP UDP Rel ...

  8. Python--变量作用域

    变量作用域: 一般在函数体外定义的变量成为全局变量,在函数内部定义的变量称为局部变量. 全局变量所有作用域都可读,局部变量只能在本函数可读 函数在读取变量时,优先读取函数本身自有的局部变量,再去读全局 ...

  9. php 设置白名单ip

    //检查白名单ip private function _checkAllowIp() { $allowIp = ['203.195.156.12']; $ip = $this->getIp(); ...

  10. jquery学习笔记3——jq HTML

    jQuery最常用的部分就是操作DOM,jQuery提供了一系列操作DOM的相关方法,使其很容易: 一.获取 1.获取内容 text()方法    设置或返回所选元素的文本内容: html()方法   ...