贝叶斯分类器的分类

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

贝叶斯公式

首先看一下贝叶斯公式

$ 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. 【UOJ Round #5】

    构造+贪心/数论 为什么只有两个标题呢……因为第二题我不会…… 怎样提高智商 构造题……然而一开始半天我都yy不出来…… 后来我想:这题应该不会特别麻烦,而且既然样例只给了1,可能再给大一点就让人发现 ...

  2. OpenCV教程(47) sift特征和surf特征

         在前面三篇教程中的几种角检测方法,比如harris角检测,都是旋转无关的,即使我们转动图像,依然能检测出角的位置,但是图像缩放后,harris角检测可能会失效,比如下面的图像,图像放大之前可 ...

  3. Visual Studio 2008 安装失败(“Web 创作组件”无法安装)(转)

    今天安装VS2008时出现了问题,怎么都无法安装成功.装了好几次都在“Visual Studio Web 创作组件(Visual Studio Authoring Component)”的安装的时候失 ...

  4. Openfire XMPP Smack RTC IM 即时通讯 聊天 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. 在springboot项目中使用mybatis 集成 Sharding-JDBC

    前段时间写了篇如何使用Sharding-JDBC进行分库分表的例子,相信能够感受到Sharding-JDBC的强大了,而且使用配置都非常干净.官方支持的功能还包括读写分离.分布式主键.强制路由等.这里 ...

  6. JS弹出层遮罩,隐藏背景页面滚动条细节优化

    做过弹层组件的童鞋应该都考虑过特殊情况下取消页面滚动条,让其不能滚动,这样用户体验会好很多,当弹层内容超出屏幕展现范围的时候在弹层上面增加滚动条来查看全部内容. 一.去除滚动条方法给body添加ove ...

  7. android 巧用动画使您app风骚起来

    巧用Android的自定义动画,使你更加的有动感,是大多数Android开发人员的目标,那怎么做到这点.请听下文分解: 3.0以前,android支持两种动画模式,tween animation(幅间 ...

  8. 使用tensorflow的lstm网络进行时间序列预测

    https://blog.csdn.net/flying_sfeng/article/details/78852816 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog. ...

  9. 理解MySQL数据库覆盖索引 (转)

    http://www.cnblogs.com/zl0372/articles/mysql_32.html 话说有这么一个表: CREATE TABLE `user_group` ( `id` int( ...

  10. 无脑抢标——算了吧

    第一版时,我对拍拍贷是恐惧的,缓解我的恐惧的方法,就是寻找尽可能安全的方案.然后,我就发现了这个策略:超过信用等级普通利率的标的.A标一般16,B一般18--那我就寻找大于16的A,大于18的B,C我 ...