朴素贝叶斯(Naive Bayes)
1.朴素贝叶斯模型
朴素贝叶斯分类器是一种有监督算法,并且是一种生成模型,简单易于实现,且效果也不错,需要注意,朴素贝叶斯是一种线性模型,他是是基于贝叶斯定理的算法,贝叶斯定理的形式如下:
\[P(Y|X) = \frac{P(X,Y)}{P(X)} = \frac{P(Y) \cdot P(X|Y)}{P(X)}\]
朴素贝叶斯是这样执行的,假设 $X$ 为数据的特征 其中每一维度均可看做一个随机变量,即 $X_1= x_1,X_2=x_2,...,X_n = x_n$ ,$Y = y_1,....,y_k$ 为对应的类标签, 对于给定的输入 $X$ ,朴素贝叶斯是这样预测其类别 $Y$ 的:
\begin{aligned}
P(Y = y_k|X_1 = x_1,X_2=x_2,...,X_n = x_n)
&=\frac{P(X_1 = x_1,X_2=x_2,...,X_n = x_n,Y = y_k)}{\sum_i P(X_1 = x_1,X_2=x_2,...,X_n = x_n)P(Y=y_i)} \\
&=\frac{P(Y =y_k) \cdot P(X_1 = x_1,X_2=x_2,...,X_n = x_n|Y = y_k)}{P(X_1 = x_1,X_2=x_2,...,X_n = x_n)} \\
&=\frac{P(Y =y_k) \cdot \prod_iP(X_i = x_i|Y = y_k)}{P(X_1 = x_1,X_2=x_2,...,X_n = x_n)} \\
\end{aligned}
朴素二字的含义指的是条件独立,即在类别确定的条件下,各个特征是条件独立的。条件独立可用以下公式表示:
\[P(a,b|c) = P(a|c)P(b|c)\]
这里第倒数第二步到最后一步就利用了特征间条件独立的特性。综上可可给出最终的贝叶斯分类器的公式,样本 $X$ 的 类别 $Y = y$的计算如下:
\[ y = \max_{y_k}P(Y=y_k) \prod_iP(X_i = x_i|Y=y_k) \ \ (1)\]
这里需要注意的几个问题
1) 朴素贝叶斯是一个生成模型,需要对联合概率 $P(X,Y)$ 进行建模,然后对于给定的 $X$ 求得关于模型的后验估计 $Y$ 。
2)上式中的 $X_i$ 指把第 $i$ 个特征看做随机变量, $x_i$ 则代表第 $i$ 个特征的取值,特征 $x_i$ 可以有 $I_{x_i}$ 种取值。
3)对于给定的输入 $X$ ,要得到其分别属于 $Y = y_k , \ k = 1,....K $ 的概率,取其中最大的一个即为其类别。
2.参数估计
对于朴素贝叶斯分类器,根据 $(1)$ 式可以得到需要估计的参数,其中$P(Y= y_k) $ 即训练数据中类别 $k$ 的先验概率,对于大小为 $N$ 类别数目为 $K$ 的训练数据集:\[P(Y = y_k) = \frac{N_k}{N}, k=1,2,....,K\]相对来说,$P(X_i = x_i|Y=y_k)$ 这个参数的估计方法比较多,首先列出最 $navie$ 的一种,即多值伯努利事件模型($Multi-variate$ $Bernoulli$ $Event$ $Model$):
\[P(X_i=x_i|Y=y_k) = \frac{I_{y_k \wedge x_i}+a}{I_{y_k}+aI_{x_i}}\]
这里的 $a \in [0-1]$ 可以去到一个平滑作用,防止有些特征的某个取值没有出现的情况下 $P(X_i=x_i|Y=y_k)$ 取值为 $0$ 的问题, $a$ 的通常取值为 $1$ ,这便是常见的拉普拉斯平滑。 $I_{y_k \wedge x_i}$ 代表特征 $x_i$ 与类别 $y_k$ 的共现次数(多次出现只记做一次), $I_{y_k}$ 代表训练集中 $y_k$ 类别数据的出现次数,$I_{x_i}$ 代表特征 $x_i$ 可能取值的总数, 加上平滑前后均明显可得 $\sum_i P(X_i=x_i|Y=y_k)=1$。对于训练数据,得到所有条件概率 $P(X_i=x_i|Y=y_k)$ 后,然后对于新的观测数据 $X_{new}$ ,按照以下公式求解即可:
\[ y = \max_{y_k}P(Y=y_k) \prod_iP(X_i = x_i|Y=y_k) \] 这便是最常见的多类贝叶斯分类器,书上也大多是这种形式,但还有一些变形,分割线一下是朴素贝叶斯的一些变形形式。
因为数据的特性不一样,所以 $X$ 的分布也不一样,这里列举几种其他形式的朴素贝叶斯,分别为高斯贝叶斯与专门适用于文本分类的多项式贝叶斯,不同分布 $P(X_i = x_i|Y=y_k)$ 的计算方式也不同。
2.1 高斯贝叶斯
高斯朴素贝叶斯是用来解决特征值是连续的情况下的参数估计问题,其假设对于每个类别下的每个特征的数据均服从高斯分布,比如说对于类别为男女情况下人的身高、体重作为特征,就可以用高斯朴素贝叶斯来估计参数。一维情况下,高斯分布式的形式这样的:
\[N(x|\mu,\sigma) = \frac{1}{ (2\pi\sigma^2)^{1/2}}exp\left \{ -\frac{1}{ 2\sigma^2}(x- \mu)^2 \right \}\]
其中 $\mu$ 为均值, $\sigma$ 为标准差。高斯朴素贝叶斯假设对于每个类别下的每个特征的数据均服从高斯分布。对于不同的类别,要分别求出 $n$ 个高斯分布即可,$n$ 代表为特征维度,有了 $\mu_{y_k,i}$ 与 $\sigma_{y_k,i}$ ,即可求得模型参数:
\[P(X_i = x_i|Y=y_k) = \frac{1}{ (2\pi\sigma_{y_k,i}^2)^{1/2}}exp\left \{ -\frac{1}{ 2\sigma_{y_k,i}^2}(x- \mu_{y_k,i})^2 \right \}\]
高斯朴素贝叶斯用的还不是很多,因为样本足够的情况下可以对连续样本进行离散化,离散后按照多值伯努利的方式来处理即可。
2.2多项式分布
多项式贝叶斯是专门用来处理文本分类问题(Ng. 讲义 note3)的,在文本分类领域其表现一般会优于伯努利贝叶斯,因为其不但考虑了特征的出现与否,还考虑了特征出现的次数,可用来处理离散的情况下的参数估计问题,多项式贝叶斯假设每个类别下的所有特征服从一个不考虑次序多项式分布。在多项式贝叶斯文本分类中,首先定义一个词表,大小为 $|V|$,$N_{y_k \wedge x_i}$ 表示 特征 $x_i$ 在类别 $y_k$ 下出现的次数,$N_{y_k}$ 代表了类别 $y_k$ 下词语总数:
\[P(X_i=x_i|Y=y_k) = \frac{N_{y_k \wedge x_i}+a}{N_{y_k}+a|V|}\]
注意他与伯努利贝叶斯的区别,即这里考虑了次数信息。所以其在文本分类的表现一般由于伯努利贝叶斯,下边给出一个例子,例子里的伯努利为 $2$ 值伯努利,多值情况下类似(参考《统计学习方法》例题).

最后给出两种不同分布情况下的参数估计的结果,均是加上平滑之后的结果。

最后给出分类计算的结果:

参考:
http://nlp.stanford.edu/IR-book/html/htmledition/the-bernoulli-model-1.html
https://github.com/endymecy/spark-ml-source-analysis/blob/master/分类和回归/朴素贝叶斯/nb.md
http://scikit-learn.org/stable/modules/naive_bayes.html
http://blog.csdn.net/u012162613/article/details/48323777
统计学习方法 && Ng 讲义 note 3
朴素贝叶斯(Naive Bayes)的更多相关文章
- 朴素贝叶斯 Naive Bayes
2017-12-15 19:08:50 朴素贝叶斯分类器是一种典型的监督学习的算法,其英文是Naive Bayes.所谓Naive,就是天真的意思,当然这里翻译为朴素显得更学术化. 其核心思想就是利用 ...
- 机器学习算法实践:朴素贝叶斯 (Naive Bayes)(转载)
前言 上一篇<机器学习算法实践:决策树 (Decision Tree)>总结了决策树的实现,本文中我将一步步实现一个朴素贝叶斯分类器,并采用SMS垃圾短信语料库中的数据进行模型训练,对垃圾 ...
- 朴素贝叶斯(Naive Bayesian)
简介 Naive Bayesian算法 也叫朴素贝叶斯算法(或者称为傻瓜式贝叶斯分类) 朴素(傻瓜):特征条件独立假设 贝叶斯:基于贝叶斯定理 这个算法确实十分朴素(傻瓜),属于监督学习,它是一个常用 ...
- 【机器学习速成宝典】模型篇05朴素贝叶斯【Naive Bayes】(Python版)
目录 先验概率与后验概率 条件概率公式.全概率公式.贝叶斯公式 什么是朴素贝叶斯(Naive Bayes) 拉普拉斯平滑(Laplace Smoothing) 应用:遇到连续变量怎么办?(多项式分布, ...
- NLP系列(2)_用朴素贝叶斯进行文本分类(上)
作者:龙心尘 && 寒小阳 时间:2016年1月. 出处: http://blog.csdn.net/longxinchen_ml/article/details/50597149 h ...
- 【Udacity】朴素贝叶斯
机器学习就像酿制葡萄酒--好的葡萄(数据)+好的酿酒方法(机器学习算法) 监督分类 supervised classification Features -->Labels 保留10%的数据作为 ...
- [Machine Learning & Algorithm] 朴素贝叶斯算法(Naive Bayes)
生活中很多场合需要用到分类,比如新闻分类.病人分类等等. 本文介绍朴素贝叶斯分类器(Naive Bayes classifier),它是一种简单有效的常用分类算法. 一.病人分类的例子 让我从一个例子 ...
- 朴素贝叶斯方法(Naive Bayes Method)
朴素贝叶斯是一种很简单的分类方法,之所以称之为朴素,是因为它有着非常强的前提条件-其所有特征都是相互独立的,是一种典型的生成学习算法.所谓生成学习算法,是指由训练数据学习联合概率分布P(X,Y ...
- Naive Bayes(朴素贝叶斯算法)[分类算法]
Naïve Bayes(朴素贝叶斯)分类算法的实现 (1) 简介: (2) 算法描述: (3) <?php /* *Naive Bayes朴素贝叶斯算法(分类算法的实现) */ /* *把. ...
- 朴素贝叶斯算法(Naive Bayes)
朴素贝叶斯算法(Naive Bayes) 阅读目录 一.病人分类的例子 二.朴素贝叶斯分类器的公式 三.账号分类的例子 四.性别分类的例子 生活中很多场合需要用到分类,比如新闻分类.病人分类等等. 本 ...
随机推荐
- iOS16进制设置颜色
UIColor+Hex.h // // UIColor+Hex.h // 16进制颜色类别 // // Created by apple on 15-4-3. // Copyright (c) 201 ...
- Unix安装BerkeleyDB
下载安装包Berkeley DB 5.3.21.tar.gz http://www.oracle.com/technetwork/products/berkeleydb/downloads/index ...
- 单选项框RadioGroup的综合应用
大家好,我们今天这一节要介绍的是RadioGroup 的组事件.RadioGroup 可将各自不同的RadioButton ,设限于同一个Radio 按钮组,同一个RadioGroup 组里的按钮,只 ...
- procedure can't return a result set in the given context
调用存储过程失败!出现如下错误:PROCEDURE ipbx.qu_ery can't return a result set in the given context, ipbx是数据库, qu_e ...
- MCU晶体旁边电容的作用及振荡电路的分析
绝大多数的MCU爱好者对MCU晶体两边要接一个22pF附近的电容不理解,因为这个电容有些时候是可以不要的.参考很多书籍,讲解的很少,往往提到最多的是起稳定作用,负载电容之类的话,都不是很深入理论的分析 ...
- PageLayoutControl的基本操作
整理了下对PageLayoutControl的基本功能操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2 ...
- Java数组排序
Java数组排序Arrays.sort,以及Comparator接口的用法 有的时候需要对数组里的element进行排序.当然可以自己编写合适的排序方法,但既然java包里有自带的Arrays.sor ...
- 网页爬虫的设计与实现(Java版)
网页爬虫的设计与实现(Java版) 最近为了练手而且对网页爬虫也挺感兴趣,决定自己写一个网页爬虫程序. 首先看看爬虫都应该有哪些功能. 内容来自(http://www.ibm.com/deve ...
- Bootstrap学习笔记之整体架构
之前有粗略地看过一下Bootstrap的内容,不过那只是走马观花式地看下是怎么用的,以及里面有什么控件,所以就没想着记笔记.现在由于要给部门做分享,所以不得不深入地去学习下,不然仅是简单地说下怎么用, ...
- 原生javascript-常用的函数
[一]添加监听事件 addHandler:function(node,type,fn){if(node.addEventListener){ node.addEventListener(type,fn ...