专栏首页算法channel机器学习:半朴素贝叶斯分类器

机器学习:半朴素贝叶斯分类器

主要推送关于对算法的思考以及应用的消息。培养思维能力,注重过程,挖掘背后的原理,刨根问底。本着严谨和准确的态度,目标是撰写实用和启发性的文章,欢迎您的关注。

01

回顾

最近,阐述了朴素贝叶斯的2个例子引出了朴素贝叶斯的分类原理,给出了苹果的三个特征通过朴素贝叶斯分类器预测了第11个苹果是好果Or不好果,预测时发现某个分类中某个属性值恰好在数据集中没有出现,此时直接会抹去其他属性值,这个是不合理的,因此又论述了如何用拉普拉斯修正来解决这个问题,具体参考:

机器学习:说说贝叶斯分类

朴素贝叶斯分类器:例子解释

朴素贝叶斯分类:拉普拉斯修正

昨天,建立在以上对朴素贝叶斯分类器理解和消化的基础上,在Jupyter Notebook中亲自实践和实现了《自动单词拼写纠正器》,里面带有详细的原理说明和实现 python源码,有需要的可以@我,这个还是非常有趣的,最近距离的体会机器学习带给我们的快乐和兴趣,欢迎阅读和交流: 机器学习:单词拼写纠正器python实现

02

放松:属性独立假设

朴素贝叶斯分类器的一个重要假定:分类对应的各个属性间是相互独立的,然而在现实应用中,这个往往难以做到,那怎么办呢?

很简单,适当考虑一部分属性间的相互依赖关系,这种放松后的分类称为半朴素贝叶斯分类,其中最常用的策略:假定每个属性仅依赖于其他最多一个属性,称其依赖的这个属性为其超父属性,这种关系称为:独依赖估计(ODE)。

因此,对某个样本x 的预测朴素贝叶斯公式就由如下:

修正为如下的半朴素贝叶斯分类器公式:

从上式中,可以看到类条件概率 P(xi | c) 修改为了 xi 依赖于分类c 和 一个依赖属性pai 。

03

半朴素贝叶斯例子解释

在阐述朴素贝叶斯分类器用到的数据集还是用到此处,数据集如下:

#

大小

颜色

形状

标签

1

青色

非规则

2

红色

非规则

3

红色

圆形

4

青色

圆形

5

青色

非规则

6

红色

圆形

7

青色

非规则

8

红色

非规则

9

青色

圆形

10

红色

圆形

测试集上要预测的某个样本如下:

#

大小

颜色

形状

标签

11

青色

圆形

?

采用拉普拉斯修正后的先验概率P(c)的计算公式:

基于类c和类外的依赖属性pai的条件概率计算公式如下:

属性的依赖关系定义如下:

  • 大小的依赖属性为:形状,且属性取值为大时依赖形状为圆形;
  • 颜色不存在依赖属性;
  • 形状的依赖属性为大小,且属性取值为圆形时依赖大小为大;

则先验概率 P(c) ,

P(c = 好果)= (4+1) / (10+2) = 5/12

P(c = 一般) = (6+1) / (10+2) = 7/12

带有依赖属性的类条件概率:

P(大小=大 | c=好果,形状=圆形) = (2+1)/(3+2) = 3/5

P(颜色=青色 | c=好果) = (0+1)/(4+2) = 1/6

P(形状=圆形 | c=好果,大小=大) = (2+1) / (3+2) = 3/5

P(大小=大 | c=一般,形状=圆形) = (1+1) /( 2+2) = 2/4

P(颜色=青色 | c=一般) = (5+1)/(6+2) = 6/8

P(形状=圆形 | c=一般,大小=大) = (1+1)/(3+2) = 2/5

因此:

P(c=好果) * P(大小=大 | c=好果,形状=圆形) * P(颜色=青色 | c=好果) * P(形状=圆形 | c=好果,大小=大)

= 5/12 * 3/5 * 1/6 * 3/5

= 0.025

P(c=一般) * P(大小=大 | c=一般,形状=圆形) * P(颜色=红色 | c=一般) * P(形状=圆形 | c=一般,大小=大)

= 7/12 * 2/4 * 6/8 * 2/5

= 0.0875

因此,测试集上要预测的这个样本和朴素贝叶斯分类器要预测的结果是相同的,都为一般的果子。

这种依赖属性选取算法称为超父ODE算法:SPODE。显然,这个算法是每个属性值只与其他唯一 一个有依赖关系。基于它之上,又提出另一种基于集成学习机制,更为强大的独依赖分类器,AODE,它的算法思想是怎么样的呢?

04

AODE算法

这个算法思路很简单,就是在SPODE算法的基础上在外面包一个循环吧,说的好听点就是尝试将每个属性作为超父属性来构建SPODE吧,请看下面的公式,是不是在SPODE外面包了一个循环,然后求它们的和作为当前预测样本的得分值啊:

上面的求和符号实质兑换为代码不就是一个for循环吗。

05

总结和展望

以上介绍了考虑属性间有依赖关系时的半朴素贝叶斯分类器。结合近几天的阐述,这些(半)朴素贝叶斯分类器,都有一个共同特点:假设训练样本所有属性变量的值都已被观测到,训练样本是完整的。

然后,现实生活中,有时候拿到的数据集缺少某个属性的观测值(这种变量称为隐变量),在这种存在“未观测”变量的情形下,是否仍能对模型参数进行估计呢?

比如,两箱苹果,其中从A箱中取到一个好苹果的概率大于从B箱中取得,如果有一堆苹果来自于A箱和B箱,但是不知道某个苹果来自于A箱还是B箱,进行了5组实验,每组抽取10个苹果,每组抽到的好苹果和一般苹果都记录到纸上,通过这些观测数据,能得出从A或B箱中取到一个好苹果的概率吗?

这个预测,无形中增加了一个隐变量:苹果出处这属性吧(取值:A箱或B箱)。在这种情况下,介绍一种常用的估计类似参数隐变量的利器:Expectation-Maximization 算法(期望最大算法)。EM算法正如它的名字那样每轮迭代经过两步:E步和M步,迭代,直至收敛。

本文分享自微信公众号 - 算法channel(alg-channel),作者:alg-flody

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-11-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • TensoFlow 实战 3层网络求解嵌入词向量,附代码详解

    已经介绍了Word2Vec中的Skip-Gram模型的基本原理,以及训练过程的3个策略,详细请参考:

    double
  • Python|获取对象的类型,方法,setattr()添加属性

    01 基本类型 基本类型都可以用type()判断: >>> type(123) <class 'int'> >>> type('str') <class 's...

    double
  • 17个Python骚操作,你都Ok吗?

    很多读者都知道 Python 是一种高级编程语言,其设计的核心理念是代码的易读性,以及允许编程者通过若干行代码轻松表达想法创意。

    double
  • 贝叶斯分类器

    贝叶斯决策论是一种基于概率的决策理论。当所有相关的概率都已知的理想情况下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记。

    不知雨
  • Python 私有属性和私有方法

    其中__secret这个私有方法只能在类中调用,所以外部对象实例想要获取私有方法或者私有属性,那么就需要定义一个公有的方法来传递数值。

    Devops海洋的渔夫
  • CVPR 2019 | STGAN: 人脸高精度属性编辑模型

    classification也要训练的,和auto-encoder一起训练,介样练:

    马上科普尚尚
  • 朴素贝叶斯实战篇之新浪新闻分类

    Python版本: Python3.x 作者:崔家华 运行平台: Windows 编辑:黄俊嘉...

    机器学习算法工程师
  • JavaScript | 获取数组中的单词并统计出现次数

    HTML5学堂(码匠):如何通过JavaScrip实现数组元素的查找?在一个数组当中,找到所有的单词,并统计每个单词出现的次数。 功能需求 在一个自定义数组...

    HTML5学堂
  • SRM常见用例和架构

    Streams Replication Manager(SRM)是一种企业级复制解决方案,可实现容错、可扩展且健壮的跨集群Kafka主题复制。SRM提供了动态更...

    大数据杂货铺
  • Solidity教程系列2 - 地址类型介绍

    Solidity是以太坊智能合约编程语言,阅读本文前,你应该对以太坊、智能合约有所了解,如果你还不了解,建议你先看以太坊是什么

    Tiny熊

扫码关注云+社区

领取腾讯云代金券