http://blog.csdn.net/pipisorry/article/details/52469064

独立性质的利用

条件参数化和条件独立性假设被结合在一起,目的是对高维概率分布产生非常紧凑的表示。

随机变量的独立性

[PGM:概率论基础知识:独立性性质的利用]

条件参数化方法

Note: P(I), P(S | i0), P(S | i1)都是二项式分布,都只需要一个参数。

皮皮blog

朴素贝叶斯模型naive Bayes

朴素贝叶斯模型的学生示例

{这个示例很好的阐述了什么是朴素贝叶斯网络模型,后面将讲到其一般化模型和分类的应用实例}

问题描述

模型的因子表示

符号表示:I表示智商;S(AT)代表SAT成绩;G(rade)代表某些课程成绩。

如果我们知道一个学生是高智商的,那么他在SAT考试中获得的高分并不能为我们带来任何有关他课程成绩的信息。

Note: 这种表示中在3个二项式表示和2个三项式表示。

因子表示的优点

[概率图模型  原理与技术[(美)科勒,(以)弗里德曼著]

皮皮blog

朴素贝叶斯一般模型

朴素贝叶斯模型的一般化定义

给定类时特征条件独立

Note:对应上面的学生示例,就是说,当类变量C(示例中就是智商I)确定时,类的feature(示例中的Grade和SAT)之间就是独立的(其实就是贝叶斯网的tail-to-tail结构形式)。

朴素贝叶斯模型的贝叶斯网络:

朴素贝叶斯模型的因子分解及参数

共2n+1个二项分布,需要2n+1个独立参数。

朴素贝叶斯参数个数与变量个数呈线性关系,而不像联合分布的显式表示中那样呈指数关系。

使用朴素贝叶斯模型进行分类

也就是说朴素贝叶斯分类器主要是训练参数p(c){每个独立的p(ci)}和p(x|c){每个独立的p(xi|ci)=num(xi=i, ci=i)/num(ci=i)}(这些参数可以通过训练数据是直接通过频率计算出来的(MLE方法)),通过取最大的p(c|new_x)来预测new_x的类别。

构建这种模型的强假设降低了模型诊断的准确性,尤其是过度计算某些特定的证据,该模型倾向于过高估计其影响。例如高血压和肥胖症是心脏疾病的两个硬指标,不过这两个症状相互之间高度相关。引发疾病证据被重复计算。

朴素贝叶斯分类算法的优缺点

优点:在数据较少的情况下依然有效,可以处理多类别问题

缺点:对输入数据的准备方式敏感

适用数据类型:标称型数据

朴素贝叶斯方法不需要进行结构学习,建立网络结构非常简单,实验结果和实践证明,它的分类效果比较好。

但在实际的应用领域中,朴素贝叶斯网络分类器具有较强的限定条件即各个属性相互独立的假设很难成立。我们应该广义地理解这种独立性,即属性变量之间的条件独立性是指:属性变量之间的依赖相对于属性变量与类变量之间的依赖是可以忽略的,这就是为什么朴素贝叶斯网络分类器应用的最优范围比想象的要大得多的一个主要原因。朴素贝叶斯分类器以简单的结构和良好的性能受到人们的关注,它是最优秀的分类器之一。在理论上它在满足其限定条件下是最优的,但它有较强的限定条件,可以尝试减弱它的限定条件以扩大最优范围,产生更好的分类器。朴素贝叫斯分类器可以进行扩展为广义朴素贝叶斯分类器。

皮皮blog

朴素贝叶斯分类算法的实现

朴素贝叶斯分类算法的python实现

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
__title__ = '朴素贝叶斯算法(亦适用于多类分类)'
__author__ = 'pika'
__mtime__ = '16-5-23'
__email__ = 'pipisorry@126.com'
# code is far away from bugs with the god animal protecting
    I love animals. They taste delicious.
"""
import numpy as np

TRAIN_FILE = r'./trainingData.txt'
TEST_FILE = r'./testingData.txt'

def train_naive_bayes(x, y):
    '''
    训练参数:p(c){包含每个独立的p(ci)}和p(x|c){包含每个独立的p(xi|ci)}
    '''
    p_c = {}  # p(c) = {ci : p(ci)}
    p_x_cond_c = {}  # p(x|c) = {ci : [p(xi|ci)]}
    for l in np.unique(y):
        # label l下, x=1 [xi = 1]时的概率array[p(xi=1|c=l)]; 则1-array[p(xi=1|c=l)]就是array[p(xi=0|c=l)]
        p_x_cond_c[l] = x[y == l].sum(0) / (y == l).sum()
        p_c[l] = (y == l).sum() / len(y)  # p(c=l)的概率
    print("θC: {}\n".format(p_c))
    print("θA1=0|C: {}\n".format({a[0]: 1 - a[1][0] for a in p_x_cond_c.items()}))
    print("θA1=1|C: {}\n".format({a[0]: a[1][0] for a in p_x_cond_c.items()}))
    return p_c, p_x_cond_c

def predict_naive_bayes(p_c, p_x_cond_c, new_x):
    '''
    预测每个新来单个的x的label,返回一个label单值
    '''
    # new_x在类别l下的概率array
    p_l = [(l, p_c[l] * (np.multiply.reduce(p_x_cond_c[l] * new_x + (1 - p_x_cond_c[l]) * (1 - new_x)))) for l in
           p_c.keys()]
    p_l.sort(key=lambda x: x[1], reverse=True)  # new_x在类别l下的概率array按照概率大小排序
    return p_l[0][0]  # 返回概率最大对应的label

if __name__ == '__main__':
    tdata = np.loadtxt(TRAIN_FILE, dtype=int)
    x, y = tdata[:, 1:], tdata[:, 0]
    p_c, p_x_cond_c = train_naive_bayes(x, y)

    tdata = np.loadtxt(TEST_FILE, dtype=int)
    x, y = tdata[:, 1:], tdata[:, 0]
    predict = [predict_naive_bayes(p_c, p_x_cond_c, xi) for xi, yi in zip(x, y)]
    error = (y != predict).sum() / len(y)
    print("test error: {}\n".format(error))

[机器学习经典算法详解及Python实现---朴素贝叶斯分类及其在文本分类、垃圾邮件检测中的应用]

from: http://blog.csdn.net/pipisorry/article/details/52469064

ref: [概率图模型  原理与技术[(美)科勒,(以)弗里德曼著]*

PGM:贝叶斯网表示之朴素贝叶斯模型naive Bayes的更多相关文章

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

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

  2. 朴素贝叶斯分类器(Naive Bayes)

    1. 贝叶斯定理 如果有两个事件,事件A和事件B.已知事件A发生的概率为p(A),事件B发生的概率为P(B),事件A发生的前提下.事件B发生的概率为p(B|A),事件B发生的前提下.事件A发生的概率为 ...

  3. 概率图模型(PGM):贝叶斯网(Bayesian network)初探

    1. 从贝叶斯方法(思想)说起 - 我对世界的看法随世界变化而随时变化 用一句话概括贝叶斯方法创始人Thomas Bayes的观点就是:任何时候,我对世界总有一个主观的先验判断,但是这个判断会随着世界 ...

  4. 贝叶斯网引论 by 张连文

    贝叶斯网(Bayesian networks)是一种描述随机变量之间关系的语言,构造贝叶斯网是为了概率推理,理论上概率推理基于联合概率分布就行了,但是联合概率分布(基于表)的复杂度会呈指数增长,贝叶斯 ...

  5. AI学习---分类算法[K-近邻 + 朴素贝叶斯 + 决策树 + 随机森林 ]

    分类算法:对目标值进行分类的算法    1.sklearn转换器(特征工程)和预估器(机器学习)    2.KNN算法(根据邻居确定类别 + 欧氏距离 + k的确定),时间复杂度高,适合小数据    ...

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

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

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

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

  8. Stanford大学机器学习公开课(五):生成学习算法、高斯判别、朴素贝叶斯

    (一)生成学习算法 在线性回归和Logistic回归这种类型的学习算法中我们探讨的模型都是p(y|x;θ),即给定x的情况探讨y的条件概率分布.如二分类问题,不管是感知器算法还是逻辑回归算法,都是在解 ...

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

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

随机推荐

  1. spring copy中的一个很气人的问题(初学者渣渣的一些感受)

    把别人的工程直接导入使用,出现了各种bug......(细节决定成败,得到以下教训) 1.工程的第一步是检查版本和插件版本兼容问题.很重要 2.然后导入包,看依赖包是否版本太低,(前期做好这些,能让你 ...

  2. 手写简单的jq雪花飘落

    闲来无事,准备写个雪花飘落的效果,没有写太牛逼的特效,极大的简化了代码量,这样容易读取代码,用起来也很简单,对于那些小白简直是福利啊,简单易读易学.先直接上代码吧,然后再一一讲解,直接复制粘贴就可以拿 ...

  3. [HNOI 2008]玩具装箱

    Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压 缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1.. ...

  4. [JSOI2007]祖码Zuma

    题目描述 这是一个流行在Jsoi的游戏,名称为祖玛. 精致细腻的背景,外加神秘的印加音乐衬托,彷佛置身在古老的国度里面,进行一个神秘的游戏——这就是著名的祖玛游戏.祖玛游戏的主角是一只石青蛙,石青蛙会 ...

  5. hdu 5266 pog loves szh III(lca + 线段树)

    I - pog loves szh III Time Limit:6000MS     Memory Limit:131072KB     64bit IO Format:%I64d & %I ...

  6. C语言程序设计预报作业

    1. 阅读邹欣老师的博客--师生关系,针对文中的几种师生关系谈谈你的看法,你期望的师生关系是什么样的? 答:万物都是变化的,师生关系也一样.小学中学把老师看作春蚕,蜡烛的的比喻到了大学显然行不通了.大 ...

  7. YOLO2:实时目标检测视频教程,视频演示, Android Demo ,开源教学项目,论文。

    实时目标检测和分类 GIF 图: 视频截图: 论文: https://arxiv.org/pdf/1506.02640.pdf https://arxiv.org/pdf/1612.08242.pdf ...

  8. 百度ML/DL方向面经

    最近败人品败得有些厉害,很多事都处理得不好--感觉有必要做点好事攒一攒. 虽然可能面试经过不是很有代表性,不过参考价值大概还是有的-- 由于当时人在国外,三轮都是电面-- 一面 当地时间早上5点半爬起 ...

  9. JQuery when() done() then()

    jQuery.when(deferreds) 参数deferreds,一个或多个延时对象或JS对象,我们初略的认为它就是一个或多个异步请求. 例如:$.when($.ajax("page1. ...

  10. jquery easyui datagrid数据自动换行 panel用法

    nowrap:false 初始化panel $('#txtLeftPercent').panel({ title: '剩余权重:' + percent, height: 10, width: 180, ...