贝叶斯分类器的分类

根据实际处理的数据类型, 可以分为离散型贝叶斯分类器和连续型贝叶斯分类器, 这两种类型的分类器, 使用的计算方式是不一样的.

贝叶斯公式

首先看一下贝叶斯公式

$ P\left ( y|x \right ) = \frac{P\left ( x|y \right ) * P\left ( y \right )}{\sum_{i=1}^{n}P\left ( x|y_{i} \right )*P\left ( y_{i} \right )} $

其推导很简单, 因为 P(yx) = P(xy), 可得 P(y|x) * P(x) = P(x|y) * P(y), 可得 P(y|x) = P(x|y) * P(y) / P(x), 将P(x)分解就得到了上面的公式.

在实际应用中, 可以用于计算一些检测项目的可靠性. 例如某机构对雇员是否吸毒的检测. 假定吸毒人员比例很低, 为0.5%, 而检测存在误差, 吸毒者检出阳性率为99%, 非吸毒者检出阳性率1%, 那么仅作一轮检测, 检出阳性的结果中实际是吸毒者的比例有多高呢? 用式子描述就是

P(吸毒|阳性)
= P(阳性|吸毒) * P(吸毒) / P(阳性)
= P(阳性|吸毒) * P(吸毒) / (P(阳性|吸毒)*P(吸毒) + P(阳性|未吸毒)*P(未吸毒))
= 0.99 * 0.005 / (0.99 * 0.005 + 0.01 * 0.995) = 0.00495 / (0.00495 + 0.00995) = 0.00495 / 0.0149 = 0.3322

对检测为阳性的雇员, 再做第二轮检测, 检出阳性的结果中实际是吸毒者的比例还可以按上式计算, 但是P(吸毒)从0.005变成了0.3322, 于是

P(吸毒|阳性) = 0.99 * 0.3322 / (0.99 * 0.3322 + 0.01 * 0.6678) = 0.98

这样经过二次检测后呈阳性的结果误判率就仅有2%了.

另外, 对于检测结果为阴性的雇员, 其吸毒的概率计算如下, 误判的概率很低

P(吸毒|阴性)
= P(阴性|吸毒) * P(吸毒) / P(阴性)
= P(阴性|吸毒) * P(吸毒) / (P(阴性|吸毒)*P(吸毒) + P(阴性|未吸毒)*P(未吸毒))
= 0.01 * 0.005 / (0.01 * 0.005 + 0.99 * 0.995)
= 0.00005 / (0.00005 + 0.98505) = 0.005%

高斯分布公式

高斯分布(Gaussian distribution) 又名正态分布(Normal distribution)/常态分布. 是一个在数学物理及工程等领域都非常重要的概率分布, 在统计学的许多方面有着重大的影响力, 正态曲线呈钟型, 若随机变量X服从一个数学期望为μ, 方差为σ^2的正态分布, 记为N(μ,σ^2). 其概率密度函数为正态分布的期望值μ决定了其位置, 其标准差σ决定了分布的幅度. 当μ = 0, σ = 1时正态分布就是标准正态分布.

高斯函数标准型:

$ f(x)=\frac{1}{\sqrt{2\pi }}e^{-\frac{x^{2}}{2}}, -\infty < x < +\infty $

这个函数描述了变量 x 的一种分布特性,变量x的分布有如下特点:

  • 均值 = 0
  • 方差为1
  • 概率密度和为1

一元高斯函数一般形式

$ f(x)=\frac{1}{\sqrt{2\pi \sigma }}e^{-\frac{(x - \mu )^{2}}{2\sigma ^{2}}}, -\infty < x < +\infty $

其中μ, σ(σ > 0)为常数, 一般使用均值作为μ, 标准差(Standard Deviation [ˌdi:viˈeɪʃn] )作为σ

高斯分布重要量的性质

  • 密度函数关于平均值对称
  • 平均值是它的众数(statistical mode)以及中位数(median)
  • 68.268949%的面积在平均值左右一个标准差σ范围内
  • 95.449974%的面积在平均值左右两个标准差2σ范围内
  • 99.730020%的面积在平均值左右三个标准差3σ范围

离散型的贝叶斯分类器

离散型的贝叶斯分类器, 训练数据为Xin和 Yin,
Xin是离散的特征值, 例如英文句子 I like sun shine, I am so happy, It is a good day, 和 I hate rainy, I don't like cloudy day,
Yin是对应的分类, 例如前面的句子, 对应的Yin分别是positive, positive, positive, negative, negative

训练时, 将句子拆成单词, 以单词作为特征值, 累计到以下key的count
ytotal, ypositive, ynegative,
xsun&ypositive, xshine&ypositive, xhappy&ypositive, ... , xI&ypositive, xam&ypositive, xI&ynegative, ... xday&ynegative,

计算以下数值:

P(ypositive) = ypositive / ytotal
P(ynegative) = ynegative / ytotal

对于测试的句子, 将句子拆分为单词数组, 分别计算各个单词对于yi的条件概率: 
P(yi|xword) = P(xword|yi) * P(yi) / Σ (P(xword|yj) * P(yj)) 
对每个单词得到的值累加, 将累加的结果进行排序, 最高的yi就是分类的结果.

对于Σ P(xword|yj) * P(yj) 的值为0的情况, 可以给每一个count(xwordi&yj)预设一个初始值, 例如count(xwordi&yj) = 1, 避免除数为0

连续型贝叶斯分类器(高斯贝叶斯分类器)

连续型的贝叶斯分类器, 训练数据为Xin和 Yin,

Xin是带多维向量的特征值, 例如一个人的身高体重(H, W):  (175, 68.5), (181.5, 75.3), (132, 31.5), (170, 71.5), (60, 15.0)
Yin是对应的分类, 例如前面的Xin值, 对应的Yin分别是A, A, K, A, K (A:adult, K:kid)

训练时, 需要计算以下值:

P(A) = YA / Ytotal
P(K) = YK / Ytotal
A的身高均值和标准差: μAH, σAH, A的体重均值和标准差: μAW, σAW
K的身高均值和标准差: μKH, σKH, B的体重均值和标准差: μKW, σKW
假定身高和体重这两个是相互独立的维度. 这样就确定了这两个分类, 在各维度上的高斯分布函数

对于输入的测试数据 x:(h, w), 先对A计算各个维度上的高斯分布概率, 再将结果乘起来(假定各维度相互独立):
P(x|A) = P(Hx|A) * P(Wx|A) = GAH(x) * GAW(x), 再计算得到 P(A|x) = P(x|A) * P(A) / (P(x|A) * P(A) + P(x|K) * P(K))
同理计算得到P(K|x), 比较P(A|x)和 P(K|x)大小, 大者就是选中的结果分类.

...
public static HashMap<Integer, HashMap<Integer, Double>> meanMatrix = new HashMap<>(); //Matrix to hold the mean values
public static HashMap<Integer, HashMap<Integer, Double>> derivationMatrix = new HashMap<>(); //Matrix to hold standard devirations
... /**
* Get gaussian parameters by lable & feature, then calculate with input x
*/
public static double gaussian(double x, int label, int feature) {
double conditionalMean = meanMatrix.get(label).get(feature);
double conditionalDerivation = derivationMatrix.get(label).get(feature);
return (Math.exp(-1 * (Math.pow(x - conditionalMean, 2) / (2 * conditionalDerivation)))) / (Math.sqrt(2 * Math.PI * conditionalDerivation));
}

.

Naive Bayes Classifier 朴素贝叶斯分类器的更多相关文章

  1. [机器学习] 分类 --- Naive Bayes(朴素贝叶斯)

    Naive Bayes-朴素贝叶斯 Bayes' theorem(贝叶斯法则) 在概率论和统计学中,Bayes' theorem(贝叶斯法则)根据事件的先验知识描述事件的概率.贝叶斯法则表达式如下所示 ...

  2. 【十大算法实现之naive bayes】朴素贝叶斯算法之文本分类算法的理解与实现

    关于bayes的基础知识,请参考: 基于朴素贝叶斯分类器的文本聚类算法 (上) http://www.cnblogs.com/phinecos/archive/2008/10/21/1315948.h ...

  3. 朴素贝叶斯分类器Naive Bayes

    优点Naive Bayes classifiers tend to perform especially well in one of the following situations: When t ...

  4. sklearn.naive_bayes中几种朴素贝叶斯分类器

    区别: 几种朴素贝叶斯分类器的区别在于对于分布的假设,即假设满足的形式. 一.高斯NB 导入 from sklearn.naive_bayes import GaussianNB 假设特征的似然函数满 ...

  5. sklearn-MultinomialNB朴素贝叶斯分类器

    原型 class sklearn.naive_bayes.MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None) 参数 Parameter ...

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

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

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

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

  8. PGM:贝叶斯网表示之朴素贝叶斯模型naive Bayes

    http://blog.csdn.net/pipisorry/article/details/52469064 独立性质的利用 条件参数化和条件独立性假设被结合在一起,目的是对高维概率分布产生非常紧凑 ...

  9. 朴素贝叶斯 Naive Bayes

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

随机推荐

  1. HTTPS那些事(三)攻击实例与防御

    在<HTTPS那些事(二)SSL证书>我描述了使用SSL证书时一些需要注意的安全问题,在这一篇文章里面我再演示一下针对HTTPS攻击的一些实例,通过这些实例能更安全的使用HTTPS.知己知 ...

  2. 使用C++/libCurl/Jsoncpp读取arcgis wmts 服务(restful模式)

    前言: 最近工作需要将arcgis的wmts服务接入我们的3DGis系统平台,要求用户只输入一个rest模式的wmts服务地址,系统即可自动获取并解析其元数据信息,生成wmts图层,并渲染显示.经过多 ...

  3. AS 阿里巴巴Java开发规约 CheckStyle-IDEA

    Alibaba Java Coding Guidelines 简介 github地址:https://github.com/alibaba/p3c  官方文档    阿里巴巴Java开发手册(纪念版) ...

  4. ul里不能直接嵌套div(在ie7以前版本)

    平时为了写某个js效果,从而忽略了标签的嵌套 从而导致了IE6-7混乱,在ul下,直接嵌套div,在ie7以前版本,会出现的状况是:div会被离它最近的li包裹住. 请看dome <ul cla ...

  5. Java去掉Html标签的方法

    content = content.replaceAll("\\&[a-zA-Z]{1,10};", "").replaceAll("< ...

  6. 原生JS实现Promise

    ES6中Promise可以说很大情况下改善了异步回调的嵌套问题,那么如果我们自己去写一个类似Promise的库应该怎么去写? 我们先看一下Promise的特点: 第一:Promise构造函数接受一个函 ...

  7. UML图中聚合、组合、关联、依赖、泛化的强弱关系

    一.泛化 1.说明 泛化是一种继承关系,如果一个类A的所有属性和操作能被另一个类B所继承,则类B不仅可以包含自己独有的属性,而且可以包含类A的属性和操作.继承是类与类或者类与接口之间最常见的关系. 2 ...

  8. Android Studio中实现AIDL

    AIDL 先来两个传送门: http://www.cnblogs.com/yydcdut/p/3961545.html Android面试,与Service交互方式 http://www.cnblog ...

  9. 教育单元测试mock框架优化之路(下)

    转载:https://sq.163yun.com/blog/article/169563599967031296 四.循环依赖的解决 果然! 当我将@SpyBean应用到存在有循环依赖的Bean上时, ...

  10. 解决CentOS下无法发送邮件的问题

    最近有个项目从虚拟主机迁到云主机上,换了个环境,原来用于找回密码的发送邮件功能竟然用不了了!反应极慢,导致tenginx报504网关超时错误. 5.5 or 7.0, sockets 初次百度,看了别 ...