一、引言

  在开始算法介绍之前,让我们先来思考一个问题,假设今天你准备出去登山,但起床后发现今天早晨的天气是多云,那么你今天是否应该选择出去呢? 你有最近这一个月的天气情况数据如下,请做出判断。

  • 这个月下雨的天数占10%
  • 这个月早晨是多云的天数占40%
  • 在下雨的天数中早晨是多云的占50%

  如果有普通本科的概率论知识,这个问题就不难解决,计算一下今天会下雨的概率,然后根据概率决定即可。解决方式如下:

    

  可以发现,今天下雨的概率只有12.5%,还是可以出去玩的(当然如果怕万一,那还是呆在家里)。

二、Bayes’s theorem

  没错,上面的计算公式就是贝叶斯定理,这个定理的数学表示如下:

  这个定理在日常生活中的应用非常广泛,比如:

    • If dangerous fires are rare (1%) but smoke is fairly common (10%) due to barbecues, and 90% of dangerous fires make smoke. 如果烟雾报警器检测到有烟,请问发生火灾的可能为多少?

    • Suppose that a test for using a particular drug is 99% sensitive and 99% specific. That is, the test will produce 99% true positive results for drug users and 99% true negative results for non-drug users. Suppose that 0.5% of people are users of the drug. What is the probability that a randomly selected individual with a positive test is a drug user?
    • ....

  对上述公式做一个变形如下:

  在对其进行扩展则如下:

三、Naive Bayes Classifier

  上面说了这么多,好像与机器学习分类器没啥关系啊!但是不是,是有关系的, Naive Bayes Classifier就是一种基于概率的分类器。

  首先,我们假设一组向量 ,这组向量的各个值表示某个数据的特征值,那么它属于某个类别  的概率就可用这个形式表示: 。

  根据上面的 Bayes’s theorem,这个概率的计算方法就如下:

  (1)

  对于条件概率的定义如下:

  

  则,

  =

  可将上式写成如下形式:

  (2)

  然后,我们假设xi与xj(j不等于i)独立(即特征之间没有关系),则:

  

  则,对于(2)式(即(1)式右半部分的分母),就可以写成如下形式:

  

  

  假设,则(1)式可以写成如下形式:

  (3)

  通过(3)式,我们就可以计算一个数据属于某个类别的概率,分类结果也就是概率最大的那一个类别,所以Naive Bayes Classifier的完整表达形式如下:

  

  注意:由于在最后的结果比较中,每一个结果的计算都含有,即它不影响比较结果,可以直接忽略。

四、说明

  关于Naive Bayes Classifier,我们假设了特征之间不存在任何关系,然而现实是特征之间是不可能没有关系的。比如对于水果的类别,它们的颜色,大小,重量之间比如存在某种联系;再比如对于人类的性别,身高与体重等特征也是存在联系的。但是,Naive Bayes Classifier往往会取得比较好的结果,如果对数据和样本能做一些合适的预处理,它取得的结果是非常好的。

  Naive Bayes Classifier在现实生活中的应用:垃圾邮件的分类,拼写检查与自动纠正,银行关于信用卡欺诈的检测等等。

五、参考与扩展链接

  关于本篇文章的参考链接:https://www.mathsisfun.com/data/bayes-theorem.html

              https://www.wikiwand.com/en/Bayes%27_theorem# 

              https://www.wikiwand.com/en/Naive_Bayes_classifier

  这些链接中的很多知识本篇文章中还没有讲到,推荐大家去阅读学习。

机器学习算法 --- Naive Bayes classifier的更多相关文章

  1. 学习笔记之Naive Bayes Classifier

    Naive Bayes classifier - Wikipedia https://en.wikipedia.org/wiki/Naive_Bayes_classifier In machine l ...

  2. 朴素贝叶斯分类器的应用 Naive Bayes classifier

    一.病人分类的例子 让我从一个例子开始讲起,你会看到贝叶斯分类器很好懂,一点都不难. 某个医院早上收了六个门诊病人,如下表. 症状 职业 疾病 打喷嚏 护士 感冒  打喷嚏 农夫 过敏  头痛 建筑工 ...

  3. 机器学习---朴素贝叶斯分类器(Machine Learning Naive Bayes Classifier)

    朴素贝叶斯分类器是一组简单快速的分类算法.网上已经有很多文章介绍,比如这篇写得比较好:https://blog.csdn.net/sinat_36246371/article/details/6014 ...

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

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

  5. PGM学习之三 朴素贝叶斯分类器(Naive Bayes Classifier)

    介绍朴素贝叶斯分类器的文章已经很多了.本文的目的是通过基本概念和微小实例的复述,巩固对于朴素贝叶斯分类器的理解. 一 朴素贝叶斯分类器基础回顾 朴素贝叶斯分类器基于贝叶斯定义,特别适用于输入数据维数较 ...

  6. Naive Bayes Classifier 朴素贝叶斯分类器

    贝叶斯分类器的分类 根据实际处理的数据类型, 可以分为离散型贝叶斯分类器和连续型贝叶斯分类器, 这两种类型的分类器, 使用的计算方式是不一样的. 贝叶斯公式 首先看一下贝叶斯公式 $ P\left ( ...

  7. 【机器学习算法】cascade classifier级联分类器

    前言 参考 1.级联分类器: 完

  8. naive bayes classifier in data mining

    https://www-users.cs.umn.edu/~kumar001/dmbook/slides/chap4_naive_bayes.pdf  -- textbook https://www. ...

  9. Python机器学习算法 — 朴素贝叶斯算法(Naive Bayes)

    朴素贝叶斯算法 -- 简介 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法.最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Baye ...

随机推荐

  1. 【转】 Android应用内多进程分析和研究

    正常情况下,一个apk启动后只会运行在一个进程中,其进程名为AndroidManifest.xml文件中指定的应用包名,所有的基本组件都会在这个进程中运行.但是如果需要将某些组件(如Service.A ...

  2. 统计Azure存储的HBase各表数据量

    场景:HBase存储在Azure上,现在通过访问Azure Storage的接口,获取HBase中各个表的数据量. 注意: 1.Azure存储,默认的副本数为2,即共存3份,但只收1份的费用,取到的s ...

  3. ddt 测试用例UI运用

    import xlrd from selenium import webdriver import ddt import time import unittest class Excel(object ...

  4. PAT乙级1007

    1007 素数对猜想 (20 分) 让我们定义d​n​​为:d​n​​=p​n+1​​−p​n​​,其中p​i​​是第i个素数.显然有d​1​​=1,且对于n>1有d​n​​是偶数.“素数对猜想 ...

  5. Jmeter之post上传文件

    上周五东西都收拾好了,然后被叫住加班,直接搞到凌晨一两点,原因是另一个项目的性能出了点问题.为此我抓包写了一下主业务流的接口,涉及到文件上传,记录一下吧. 一.创建线程组,添加各类组件 这个就不用说了 ...

  6. Centos7安装elasticsearch、logstash、kibana、elasticsearch head

    环境:Centos7, jdk1.8 安装logstash 1.下载logstash 地址:https://artifacts.elastic.co/downloads/logstash/logsta ...

  7. 断言NSAssert的使用

    1. NSAssert 断言(NSAssert)是一个宏,在开发过程中使用NSAssert可以及时发现程序中的问题. NSAssert声明如下: #define NSAssert(condition, ...

  8. CentOS如何配置yum源

    参考:http://blog.csdn.net/qingfenggege/article/details/80394564 1. yum 前端软件包管理器2. 基于RMP包管理,能够从指定的服务器自动 ...

  9. Disruptor时序调用

    接下来,我会对disruptor的设计和源码上进行讲解,先来一篇时序图,简单理解下disruptor的工作过程

  10. PHP通过_call实现多继承

    原文地址:http://small.aiweimeng.top/index.php/archives/53.html 上一篇讲到php可以通过接口是实现代码的复用. 那么这篇文章简单介绍下使用_cal ...