处女文献给我最喜欢的算法了 ⊙▽⊙

---------------------------------------------------我是机智的分割线----------------------------------------------------

[important]

  阅读之前你需要了解:1、概率论与数理统计基础

            2、基本的模式识别概念

[begin]

  贝叶斯决策论是模式分类问题最基础的概念,其中朴素贝叶斯更是由于其简洁成为学习模式分类问题的基础。

  

  朴素贝叶斯的理论基础:源于概率论中的贝叶斯公式:\(P(w_j|x)=\frac{p(x|w_j)P(w_j)}{p(x)}\),其中\(w_j\)代表类别\(j\),\(x\)代表特征。

我们将\(P(w_j)\)称为先验概率,\(p(x|w_j)\)称为条件概率。

  目的:对于一系列事物我们已知他们的特征向量\(X(x_1,x_2,x_3.....)\),以及他们一定属于类别集\(W=\{w_1,w_2,w_3.....\}\)中的某

一类,根据以上知识给出一个确定取值的特征向量\(X\)的事物,判断它的类别。

  /*如:给定几个学生的特征及类别:

身高(cm) 体重(kg) 性别

      根据以上知识,现在有一身高为169cm,体重49kg的学生,判断性别。

  */

  思路:当前我们的知识只有有限个已知的特征及类别(我们称之为训练集),根据他们来判断给定特征集合的类别(我

们称之为测试集)

      step1:假设我们已知学生中的男女比例为2:1,那么当我们遇到一个学生是男生的概率是2/3,女生的概率

    是1/3。这是我们唯一可以利用的信息,当新来一个同学时,在观察之前需要我们立即给出判断,那么我们似乎可

    以遵循这样的判别规则:若\(P(w|_{w=男})>P(w|_{w=女})\),则判定为男,否则判定为女。在一次判断中,

    这种规则是合理的,但当我们进行多次判断时,会发现会一直得到相同的结果。显然,单一的判断条件并不能给我

    们有效的解决问题的方法。

      step2:在实际的判断过程中我们并不会只利用单一的信息,我们再引入学生的身高信息,来提高我们判断的

    准确性。假定身高x是一个连续的随机变量,其分布取决于性别的状态,表示成\(p(x|w)\),这就是条件概率密度函数。

    表示类别为w时x的概率密度函数。因此,\(p(x|w_{w=男})\)与\(p(x|w_{w=女})\)的区别就表示了男生与女

    生在身高上的区别。

      step3:现在,假设我们已经知道了先验概率\(p(w1)\),\(p(w2)\)/*\(w_1\)代表男生类别,\(w_2\)代表女

      生类别*/,也知道了条件概率密度\(p(x|w_j)(j=1,2)\)。那么处于类别\(w_j\),并具有特征值x的模式的联合概率

    密度我们可以写成以下形式\(p(w_j,x)=P(w_j|x)p(x)=p(x|w_j)P(w_j)\),整理上式,我们就可以得到贝叶斯公

    式\(P(w_j|x)=\frac{p(x|w_j)P(w_j)}{p(x)}\)。在两类问题中\(p(x)=\sum_{j=1}^{2}{p(x|w_j)P(w_j)}\),

    这就是贝叶斯公式在分类问题中的解释。

      step4:观察贝叶斯公式我们可以发现 ,通过观测x的值我们可以将先验概率\(P(w_j)\)转化为后验概率的形式\(P(w_j|x)\)

    即假设特征值x已知的条件下类别属于\(w_j\)的概率。我们又称\(p(x|w_j)\)为\(w_j\)关于\(x\)的似然函数,即

    在其他条件都相等的情况下,使得\(p(x|w_j)\)取值较大的\(w_j\)更有可能是真是类别。

   /*重点理解\(p(x|w_j)\)与\(p(w_j|x)\)的含义:

      \(p(x|w_j)\)表示已知类别为\(w_j\)的前提下,特征为\(X\)的概率。是分类之前的已知知识,成为条件概率。

      \(p(w_j|x)\)表示已知特征向量为\(X\),求其属于类别\(w_j\)的概率。是分类的判断条件,成为后验概率。

   */

  解决方法:

    有了上面的铺垫,我们现在可以尝试解决分类的问题。

      step1:要根据输入的对象特征向量\(X\)来判断其类别,假设我们已经建立了一个判别函数\(g_i(x)\)/*表示

    特征向量为类别\(i\)的可能性*/,那么显然我们可以令\(g_i(x)=p(w_i|x)=\frac{p(x|w_j)P(w_j)}{p(x)}\)

    对每一个类别\(w_j\)我们可以分别计算其\(g(x)\)的取值。还可以得出判别规则为:若\(g_i(x)>g_j(x)\),则判为

    \(w_i\),否则判为\(w_j\)。

      step2:由概率论知识我们还可以将\(g_i(x)\)简化为\(g_i(x)=p(x|w_j)P(w_j)\)的形式/*或者用其对数式表

    示\(g_i(x)=lnp(x|w_j)+lnP(w_j)\),效果相同*/。然后根据判断条件找出最符合的类别。

      到这里就结束了吗?nonononono,上面的理论只能称之为贝叶斯理论,他还不够“朴素”。

      step3:概率论中我们有这样的结论:对于\(p(a,b,c)\),若a,b,c互相独立,则有\(p(a,b,c)=p(a)p(b)p(c)\)。

    那么,在我们的\(g_i(x)\)中我们也假设特征向量\(X\)中的每一个\(x_j\)也互相独立,那么就有\(g_i(x)=P(w_j)\prod_{j=1}^{n}p(x_j|w_i)\)

    这便是朴素贝叶斯的表达式。

  /*

    下面我们可以解决学生的性别判断问题了:

      设身高用\(x_1\)表示,体重用\(x_2\)表示

      那么根据训练集知识,我们可以分别求出\(p(x_1|w_j)\)和\(p(x_2|w_j)\)在所有类别下的概率分布,然后对

    于任意给定的特征向量\(X=(x_1,x_2)\),求出\(max\{P(w_i)\prod_{j=1}^{n}p(x_i|w_j)\}\)对应的最大类别\(i\),即

    就是特征向量\(X\)的朴素贝叶斯预测类别。

  */

  意义:

      "模式识别中的贝叶斯理论由于其权威性、一致性和典雅性而被列为最优美的科学公式之一。"

      在模式分类,数据挖掘等领域中,贝叶斯理论占据着重要地位,而朴素贝叶斯理论更是在实践中有着重要应用。作为一个

    理论,从统计学的观点出发,讨论出了具有指导意义的方法。其背后的哲学意义也发人深省(感兴趣的同学可以深入探讨)。

  不足:

      贝叶斯理论比较依赖于先验知识,对于先验知识模糊或缺失的情况还需要其他理论作补充(可以想想为什么)。

      朴素贝叶斯理论的条件独立假设在实际中会影响判断结果,尤其是特征之间相关度较高的时候。(有没有解决的方法)。

实现:(第一次写文章,没想到断断续续写了好久,看来还是太年轻=_=,实现后面再补吧)

[end]

收获:梳理了一遍朴素贝叶斯的知识,写文章时顺遍学习了LaTex语法编辑公式。

  欢迎交流指正讨论,随意转载,请注明作者及出处。

朴素贝叶斯(naive bayes)算法及实现的更多相关文章

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

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

  2. 朴素贝叶斯 Naive Bayes

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

  3. 朴素贝叶斯(Naive Bayesian)

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

  4. 机器学习集成算法--- 朴素贝叶斯,k-近邻算法,决策树,支持向量机(SVM),Logistic回归

    朴素贝叶斯: 是使用概率论来分类的算法.其中朴素:各特征条件独立:贝叶斯:根据贝叶斯定理.这里,只要分别估计出,特征 Χi 在每一类的条件概率就可以了.类别 y 的先验概率可以通过训练集算出 k-近邻 ...

  5. 3.朴素贝叶斯和KNN算法的推导和python实现

    前面一个博客我们用Scikit-Learn实现了中文文本分类的全过程,这篇博客,着重分析项目最核心的部分分类算法:朴素贝叶斯算法以及KNN算法的基本原理和简单python实现. 3.1 贝叶斯公式的推 ...

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

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

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

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

  8. 【Udacity】朴素贝叶斯

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

  9. Python机器学习笔记:朴素贝叶斯算法

    朴素贝叶斯是经典的机器学习算法之一,也是为数不多的基于概率论的分类算法.对于大多数的分类算法,在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同.比如决策树,KNN,逻辑回归,支持向 ...

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

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

随机推荐

  1. Cocos2dx边学边总结——开篇(一)

    Cocos2dx是一个很好的开源跨平台2d游戏引擎,我们都知道他底层是基于OpenGl ES的,OpenGl 是跨平台的. 正是得益于这点 Cocos2dx的显示部分可以很好的跨平台运作,笔者认为 未 ...

  2. 对装饰模式(Decorator)的解读

    看过好多对装饰模式的讲解,他们几乎都有一句相同的话:对现有类功能的扩展.不知道大家怎么理解这句话的,之前我把”对功能的扩展“理解成”加功能=加方法“,比如Person类本来有两个功能:Eat 和 Ru ...

  3. gpload的简单实用

    准备工作: 1.因为gpload是对gpfdist的封装,因此使用gpload之前必须开启gpfdist的服务,不然无法使用. gpfdist -d /home/admin -p 8181 -l /t ...

  4. JVM学习笔记-运行时数据区

    不同于C,C++程序,Java程序的内存管理工作由Java虚拟机(JVM)接管,这减低了java程序员的负担,但如果出现内存泄露与溢出问题如报OutOfMemory,StackOverFlow异常错误 ...

  5. 自己使用Jquery封装各种功能分享

    自己使用Jquery封装各种功能分享: 左右滚动图片 瀑布流 流动显示列表 广告切换 头像切换And广告切换 获取搜索引擎的来源关键字 上面列表中展示的功能都是使用jquery进行封装实现的,希望大家 ...

  6. oracle创建第三方数据接口表,指定特定用户访问某张表

    /*****创建用户并指定操作哪张表开始******/ --1.创建用户并设置默认表空间 CREATE USER CHENGDWY IDENTIFIED BY CHENGDWY DEFAULT TAB ...

  7. 【小结】有关mysql扩展库和mysqli扩展库的crud操作封装

    现阶段php如果要操作mysql数据库 php给我们提供了3套库 1.mysql扩展库   面向过程操作 2.mysqli扩展库  面向对象操作和面向过程操作并存  安全性和效率高于mysql扩展库 ...

  8. C# 数据结构 栈 Stack

    栈和队列是非常重要的两种数据结构,栈和队列也是线性结构,线性表.栈和队列这三种数据结构的数据元素和元素的逻辑关系也相同 差别在于:线性表的操作不受限制,栈和队列操作受限制(遵循一定的原则),因此栈和队 ...

  9. python第一次上机遇到的困难

      正确 10 58 27412 2-1019 长度转换程序(10分) 完善下面的程序,能够: (1) 将用户输入的公制长度单位(米.千米)转换成英制长度单位(英寸.英里): (2) 将用户输入的英制 ...

  10. [译]36 Days of Web Testing(五)

    Day 23 禁用CSS  Disable CSS 为什么 ? CSS,层叠样式表,是用来定义web页面布局和显示的机制.通过修改CSS样式,可以改变整个页面的外观. 但是有一些人,因为之前的选择或者 ...