0 - 算法

  给定如下数据集

$$T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\},$$

假设$X$有$J$维特征,且各维特征是独立分布的,$Y$有$K$种取值。则对于输入$x$,朴素贝叶斯算法的输出为

$$y=arg\max_{c_k}P(Y=c_k)\prod_j P(X^{(j)}=x^{(j)}|Y=c_k),j=1,\cdots,J,k=1,\cdots,K,$$

其中先验概率$P(Y=c_k)$和条件概率$P(X^{(j)}=x^{(j)}|Y=c_k)$的极大似然估计在下一节给出。

1 - 推导

  朴素贝叶斯的基本公式为

$$P(B|A)=\frac{P(A|B)P(B)}{P(A)},$$

  因此,对于输入数据$x$,预测类别$c_k$的概率可以表示为

$$\begin{align}P(Y=c_k|X=x)=\frac{P(X=x|Y=c_k)P(Y=c_k)}{P(X=x)}\end{align}$$

  且有,

$$\begin{align}P(X=x)=P(Y=c_k)\sum_{k}P(X=x|Y=c_k)\end{align}$$

  根据特征之间独立分布,又有

$$\begin{align}P(X=x|Y=c_k)=P(X^{(1)}=x^{(1)},\cdots,X^{(J)}=x^{(J)}|Y=c_k)=\prod_{j=1}^JP(X^{(j)}=x^{(j)}|Y=c_k)\end{align}$$

  将式$(3)$代入式$(2)$可得

$$\begin{align}P(X=x)=\sum_{k}P(Y=c_k)\prod_{j=1}^JP(X^{(j)}=x^{(j)}|Y=c_k)\end{align}$$

  将式$(3)(4)$代入式$(1)$可得

$$\begin{align}P(Y=c_k|X=x)=\frac{P(Y=c_k)\prod_{j=1}^JP(X^{(j)}=x^{(j)}|Y=c_k)}{\sum_{k}P(Y=c_k)\prod_{j=1}^JP(X^{(j)}=x^{(j)}|Y=c_k)}\end{align}$$

  注意到,对于所有类别$Y=c_k$,其分母均是一样的,因此最终算法可以将分母去掉而不影响预测概率的相对大小。朴素贝叶斯算法可写成如下形式

$$y=arg\max_{c_k}P(Y=c_k|X=x)=arg\max_{c_k}P(Y=c_k)\prod_{j=1}^JP(X^{(j)}=x^{(j)}|Y=c_k),$$

由上式可知,朴素贝叶斯算法只需要对$P(Y=c_k)$和$P(X^{(j)}=x^{(j)}|Y=c_k)$进行参数估计(极大似然估计)即可。

  先验概率$P(Y=c_k)$的极大似然估计可以表示为

$$P(Y=c_k)=\frac{\sum_{j=1}^N I(y_i=c_k)}{N},\ k=1,2,\cdots,K,$$

  条件概率$P(X^{(j)}=x^{(j)}|Y=c_k)$的极大似然估计,假设第$j$个特征$x^{(j)}$的取值集合为$\{a_{j1},a_{j2},\cdots,a_{jS_j}\}$,则有

$$P(X^{(j)}=a_{jl}|Y=c_k)=\frac{\sum_{i=1}^N I(x_i^{(j)}=a_{jl},y_i=c_k)}{\sum_{i=1}^N I(y_i=c_k)},\ j=1,2,\cdots,J;l=1,2,\cdots,S_j;k=1,2,\cdots,K.$$

2 - 参考资料

《统计学习方法》,李航

【分类算法】朴素贝叶斯(Naive Bayes)的更多相关文章

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

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

  2. 朴素贝叶斯 Naive Bayes

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

  3. python机器学习(三)分类算法-朴素贝叶斯

    一.概率基础 概率定义:概率定义为一件事情发生的可能性,例如,随机抛硬币,正面朝上的概率. 联合概率:包含多个条件,且所有条件同时成立的概率,记作:

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

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

  5. 分类算法之贝叶斯(Bayes)分类器

    摘要:旁听了清华大学王建勇老师的 数据挖掘:理论与算法 的课,讲的还是挺细的,好记性不如烂笔头,在此记录自己的学习内容,方便以后复习.   一:贝叶斯分类器简介 1)贝叶斯分类器是一种基于统计的分类器 ...

  6. 朴素贝叶斯(Naive Bayesian)

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

  7. (ZT)算法杂货铺——分类算法之贝叶斯网络(Bayesian networks)

    https://www.cnblogs.com/leoo2sk/archive/2010/09/18/bayes-network.html 2.1.摘要 在上一篇文章中我们讨论了朴素贝叶斯分类.朴素贝 ...

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

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

  9. 机器学习理论基础学习3.5--- Linear classification 线性分类之朴素贝叶斯

    一.什么是朴素贝叶斯? (1)思想:朴素贝叶斯假设    条件独立性假设:假设在给定label y的条件下,特征之间是独立的    最简单的概率图模型 解释: (2)重点注意:朴素贝叶斯 拉普拉斯平滑 ...

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

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

随机推荐

  1. maya pymel cmds ls 列出未知节点 unknown nodes

    maya pymel cmds ls 列出未知节点 unknown nodes cmds.ls(type = 'unknown',fl = 1)

  2. 能ping通Linux但是ssh连不上问题解决方法

    问题:能ping通Linux服务器 但是ssh连不上  <Linux redhat AS4 版本> 解决方法这个问题花了我20分钟去查资料,网上写的解决方法也是五花八门,不过,总算解决了, ...

  3. Linux中drwxr-xr-x.的意思和权限

    转载:https://blog.csdn.net/weixin_39209728/article/details/79729885 读(read),写(write),执行r(recute)简写即为(r ...

  4. Selenium常用API的使用java语言之1-环境安装之Java

    (一)环境安装之Java 1.安装java 点击 JDK8下载,根据自己的平台,选择相应的版本进行下载. 小知识: Java环境分JDK和JRE ,JDK就是Java Development Kit. ...

  5. 使用jQuery快速高效制作网页交互特效-----JavaScript操作DOM对象

    一.DOM操作分类 使用JavaScript操作DOM时通常分为三类:DOM    Core.HTMl--DOM和CSS-DOM 二.访问节点 节点属性 三.节点信息 四.操作节点的属性 语法: ge ...

  6. LeetCode刷题分类-解题模式

    模式1:如果是已经排好序的序列(数组,链表,或是矩阵),我们就可以用二分的变种或是双指针策略 模式2: 如果我们需要处理n个元素中:顶部/最大/最小/最接近的k个元素时,我们就可以用堆来解决了. 模式 ...

  7. 基础 | BIO、NIO与AIO

    本文链接:https://blog.csdn.net/bingbeichen/article/details/83617163 Java中的IO部分比较复杂,具体可参看书籍<Java NIO&g ...

  8. Greenplum 查看表的分区键与分区类型

    方法一 查看表的分区键 select d.nspname||'.'||a.relname as table_name,string_agg(b.attname,',') as column_namef ...

  9. js中 0.1+0.2 !== 0.3

    1. 存储原理: 在计算机中数字无论是定点数还是浮点数都是以多位二进制的方式进行存储的.事实上不仅仅是 Javascript,在很多语言中 0.1 + 0.2 都会得到 0.3000000000000 ...

  10. 一个milller_rabin模板

    #include <iostream> #include <cstdlib> #include <stdio.h> #include <algorithm&g ...