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)的更多相关文章

  1. 朴素贝叶斯 Naive Bayes

    2017-12-15 19:08:50 朴素贝叶斯分类器是一种典型的监督学习的算法,其英文是Naive Bayes.所谓Naive,就是天真的意思,当然这里翻译为朴素显得更学术化. 其核心思想就是利用 ...

  2. 机器学习算法实践:朴素贝叶斯 (Naive Bayes)(转载)

    前言 上一篇<机器学习算法实践:决策树 (Decision Tree)>总结了决策树的实现,本文中我将一步步实现一个朴素贝叶斯分类器,并采用SMS垃圾短信语料库中的数据进行模型训练,对垃圾 ...

  3. 朴素贝叶斯(Naive Bayesian)

    简介 Naive Bayesian算法 也叫朴素贝叶斯算法(或者称为傻瓜式贝叶斯分类) 朴素(傻瓜):特征条件独立假设 贝叶斯:基于贝叶斯定理 这个算法确实十分朴素(傻瓜),属于监督学习,它是一个常用 ...

  4. 【机器学习速成宝典】模型篇05朴素贝叶斯【Naive Bayes】(Python版)

    目录 先验概率与后验概率 条件概率公式.全概率公式.贝叶斯公式 什么是朴素贝叶斯(Naive Bayes) 拉普拉斯平滑(Laplace Smoothing) 应用:遇到连续变量怎么办?(多项式分布, ...

  5. NLP系列(2)_用朴素贝叶斯进行文本分类(上)

    作者:龙心尘 && 寒小阳 时间:2016年1月. 出处: http://blog.csdn.net/longxinchen_ml/article/details/50597149 h ...

  6. 【Udacity】朴素贝叶斯

    机器学习就像酿制葡萄酒--好的葡萄(数据)+好的酿酒方法(机器学习算法) 监督分类 supervised classification Features -->Labels 保留10%的数据作为 ...

  7. [Machine Learning & Algorithm] 朴素贝叶斯算法(Naive Bayes)

    生活中很多场合需要用到分类,比如新闻分类.病人分类等等. 本文介绍朴素贝叶斯分类器(Naive Bayes classifier),它是一种简单有效的常用分类算法. 一.病人分类的例子 让我从一个例子 ...

  8. 朴素贝叶斯方法(Naive Bayes Method)

        朴素贝叶斯是一种很简单的分类方法,之所以称之为朴素,是因为它有着非常强的前提条件-其所有特征都是相互独立的,是一种典型的生成学习算法.所谓生成学习算法,是指由训练数据学习联合概率分布P(X,Y ...

  9. Naive Bayes(朴素贝叶斯算法)[分类算法]

    Naïve Bayes(朴素贝叶斯)分类算法的实现 (1) 简介: (2)   算法描述: (3) <?php /* *Naive Bayes朴素贝叶斯算法(分类算法的实现) */ /* *把. ...

  10. 朴素贝叶斯算法(Naive Bayes)

    朴素贝叶斯算法(Naive Bayes) 阅读目录 一.病人分类的例子 二.朴素贝叶斯分类器的公式 三.账号分类的例子 四.性别分类的例子 生活中很多场合需要用到分类,比如新闻分类.病人分类等等. 本 ...

随机推荐

  1. POJ 2181

    #include <iostream> #include <cstdio> #include <cmath> #define MAXN 150005 #includ ...

  2. jQuery年月日(生日)选择器

    我们在编辑用户资料时经常会遇到选择生日选项的问题,今天我给大家介绍如何使用js来实现年月日(生日)选择器,能够准确计算闰年的年月日,方便表单处理. 文章:http://www.helloweba.co ...

  3. 如何向AcmeAir注入问题代码

    为什么要注入问题代码? AcmeAir的常规代码是为了压测测试准备的,所以绝大部分的操作都是可以在几十毫秒中就可以正常返回的.为了向用户展示我们APM工具可以在源代码级别发现系统潜在问题,我们需要在A ...

  4. ARM菜鸟:JLINK与JTAG的区别

    调试ARM,要遵循ARM的调试接口协议,JTAG就是其中的一种.当仿真时,IAR.KEIL.ADS等都有一个公共的调试接口,RDI就是其中的一种,那么我们如何完成RDI-->ARM调试协议(JT ...

  5. Android百度地图开发05之公交信息检索 + 路线规划

    在上一篇blog中介绍过POI检索的使用,本篇blog主要介绍公交信息检索和线路规划的内容. 公交信息检索 实际上,公交信息检索与POI检索.在线建议检索非常相似,也是把你需要检索的信息发送给百度地图 ...

  6. mysql代码里面有中文注释导致语法错误

    一个简单的创建表的代码 DROP database IF exists reg_login; CREATE database reg_login; use reg_login --用户表 create ...

  7. Ubuntu 14.04快速搭建SVN服务器及日常使用【转】

    转自:http://www.linuxidc.com/Linux/2015-05/117735.htm 1.介绍  Subversion是一个自由,开源的版本控制系统,这个版本库就像一个普通的文件服务 ...

  8. Linux守护进程详解(init.d和xinetd) [转]

    一 Linux守护进程 Linux 服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台 的守护进程来执行的 ...

  9. spring mvc 导出 excel

    // js 触发导出 excel 方法 导出当前页的数据 含有条件查询的结果 // js 框架使用的 是 easyui function doExport(){ var optins = $(&quo ...

  10. iReport —— 使用 JavaBean 作为数据源

    在制作报表时,想直接使用Java代码提供数据. 网上找了一些文章,很多都是用Servlet做的.我不是想通过浏览器来观察它的输出.我想使用iReport的动态连接直接预览. 结合一些资料,加上自己的摸 ...