相关文章推荐
霸气的蛋挞  ·  “当左翼,不容易”——纪念英国左翼作家乔治· ...·  4 月前    · 
烦恼的上铺  ·  台灣帆軟有限公司·  9 月前    · 
很酷的脆皮肠  ·  德国汉堡大学田海教授为我院师生讲解“民间故事 ...·  1 年前    · 
成熟的柠檬  ·  腾讯云短信布局django项目_django ...·  1 年前    · 
爱吹牛的台灯  ·  “错抱孩子28年”案一审宣判:医院共赔偿76 ...·  2 年前    · 
Code  ›  机器学习中的朴素贝叶斯算法开发者社区
机器学习 贝叶斯 贝叶斯定理 条件概率
https://cloud.tencent.com/developer/article/1035907
好帅的砖头
2 年前
作者头像
人工智能资讯小编
0 篇文章

机器学习中的朴素贝叶斯算法

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 人工智能 > 机器学习中的朴素贝叶斯算法

机器学习中的朴素贝叶斯算法

作者头像
人工智能资讯小编
发布 于 2018-02-05 10:14:26
750 0
发布 于 2018-02-05 10:14:26
举报

在处理预测相关的建模问题时你会发现朴素贝叶斯是一个简单而又强大的算法。

在本文中,我们会讨论分类问题中的朴素贝叶斯算法。本文主要介绍了:

  • 朴素贝叶斯所使用的表示方法,将模型写入文件所需的参数。
  • 如何使用训练集上学习得到的贝叶斯模型进行预测。
  • 如何从训练数据中学习得到朴素贝叶斯模型。
  • 如何更好地为朴素贝叶斯算法准备数据。
  • 朴素贝叶斯相关的书籍文章。

这篇文章的主要受众是没有统计概率基础的开发者,当然有些统计概率基础会更好。

让我们开始吧。

贝叶斯定理简介

在机器学习中,我们通常感兴趣的是给定的数据(d)以及在给定数据上建立的建设(p)。

在分类问题中,我们的假设(h)通常是为新的数据实例(d)分配的类别标签。

选择最合理假设的最简单的方法之一就是利用我们从之前的数据中获得的先验知识。而贝叶斯定理就为我们提供了一种利用先验知识计算假设成立的概率的方法。

贝叶斯定理可以表述为以下形式:

P(h | d)=(P(d | h)* P(h))/ P(d)

上述公式中:

  • P(h | d) 是给定数据d时假设h成立的概率。这被称为后验概率。
  • P(d | h) 是假设h成立时给定数据为d的概率。
  • P(h) 是假设h为真(不考虑给定的数据是什么)的概率。这被称为h的先验概率。
  • P(d) 是给定数据为d的概率(与假设无关)。

此时,我们上面感兴趣的问题就可以转化为利用P(d),P(d|h)和先验概率p(h)计算后验概率P(h|d)。

在计算了多种假设的后验概率之后,通常选取概率最大的假设作为最终的假设。概率最大的假设又被称为 最大后验 (MAP)假设。

上述内容可以写成数学形式:

MAP(h)= max(P(h | d))

等价于

MAP(h)= max((P(d | h)* P(h))/ P(d))

P(d)为常数,有

MAP(h)= max(P(d | h)* P(h))

P(d)从数学上来看是为了计算得到的概率和为1而施加的归一化系数。给定数据情况下,当我们只对最大后验假设感兴趣时可以暂时忽略归一化常数P(d)的计算。

回到分类问题上,假设我们的训练数据集中每个类下的实例数目是相同的,即不知道给定数据的情况下该数据属于任何一个类的概率是相同的。此时P(h)也为常数,上式从而可以进一步变换为:

MAP(h)= max(P(d | h))

这几个等价形式在我们下面的教程中都会得到体现。

朴素贝叶斯分类器

朴素贝叶斯是适用于二分类和多分类问题的很经典的分类算法。当输入值类型为二进制输入或者标签输入时,从上面的数学表达式可以轻松地理解这个算法的分类原理。

之所以它被称为朴素贝叶斯(naive Bayes,idiot Bayes)是因为它可以将复杂的假设对应的概率的计算简化为多个简单假设概率的组合结果。举例来说,如果你要计算 P(d1,d2,d3,...|h) 的值,在各个条件相互独立时,你可以通过上面的数学表达式将 P(d1,d2,d3,...|h) 简化为类似 A*P(d1|h)\*P(d2|h)\*... 的形式。

上面提到的各个条件相互独立其实是一个很强的条件约束,意味着数据中的各个属性不存在相互作用或者相互作用对属性值没有影响,而真实的数据中往往是不满足这样的强约束的。不过在应用的时候发现在数据不满足相互独立的条件时贝叶斯算法也有着很出色的性能。

朴素贝叶斯模型的表示方法

朴素贝叶斯模型就是一系列的条件概率的组合。

所以,如果要将训练得到的朴素贝叶斯模型存储到文件中只需要把一系列的概率值有序存储起来即可,这些概率值可以划分为两类:

  • 类概率 :训练数据集中每个类的概率。
  • 条件概率 :当给定每个类别时,每个输入值对应的条件概率。

从数据中学习朴素贝叶斯模型

从训练集中训练得到一个朴素贝叶斯模型时很便捷快速的。

朴素贝叶斯模型训练的速度得益于模型只需要各个类别的概率和给定类别时各个输入值的条件概率即可,不需要任何需要手动或者编码优化的模型参数。

计算类概率

将每个类实例各自出现的频率除以实例的总数就可以得到类概率。

在最简单的分类问题即二分类问题中,可以将两个类别分别编码为0和1,此时类别编码为1的概率为:

P(class = 1)= count(class = 1)/(count(class = 0)+ count(class = 1))

假设测试训练集中两个类别中的实例数相同,那么两个类的概率均为0.5。

计算条件概率

将给定类别下各个属性值的出现实例数/频率除以该类别下的所有实例数/频率即可得到条件概率值。

拿一个生活中的例子来说明这个概念:假设训练数据集中“天气”属性有两种,为“晴天”和“雨天”,每个实例还有着你当天的活动(类标签),有“出门”和“宅在家”两种,这个例子中在给定类别(出门/宅在家)的情况下,每个类别的条件概率为:

  • P(天气=晴天|活动=出门)= count(天气=晴天,活动=出门)/ count(活动=出门)
  • P(天气=晴天|活动=宅在家)= count(天气=晴天,活动=宅在家)/ count(活动=宅在家)
  • P(天气=雨天|活动=出门)= count(天气=雨天,活动=出门)/ count(活动=出门)
  • P(天气=雨天|活动=宅在家)= count(天气=雨天,活动=宅在家)/ count(活动=宅在家)

用朴素贝叶斯模型进行预测

在得到贝叶斯模型之后,就可以利用模型中包含的类概率和条件概率结合贝叶斯定理预测新样本更可能对应哪一个类标签。

MAP(h)= max(P(d | h)* P(h))

继续用上面的例子讨论,如果我们得到了一个新的样本,样本中天气的属性值为“晴天”,我们可以预测你当天的出门和宅在家里的概率:

出门的类标签得分 = P(天气=晴天|活动=出门) * P(活动=出门)

宅在家的类标签得分 = P(天气=晴天|活动=宅在家)* P(活动=宅在家)

如果至需要预测这一天的活动而不需要输出概率,那么我们只需要选取标签得分最高的类别即可,上面两个等式中的条件概率可以通过上一节的计算方法得到:

P(出门|天气=晴天)= 出门次数 /(出门次数 + 宅在家次数),天气=晴天

P(宅在家|天气=晴天)= 宅在家次数 /(出门次数 + 宅在家次数),天气=晴天

如果我们的数据集中每个实例中的属性值有更多,那么我们可以进一步扩展现在的模型,假设每个实例中还有一个“汽车限号情况”,可能的属性值为“被限号”和“未被限号”两种,此时我们可以在上面的等式上再乘上一个条件概率来扩展我们的贝叶斯模型。

下面列出天气为“晴天”且汽车“未被限号”时“出门”的类标签得分:

出门的类标签得分 = P(天气=晴天|活动=出门) P(汽车限号情况=未被限号|活动=出门) P(活动=出门)

朴素贝叶斯(高斯模型)

朴素贝叶斯也可以应用于连续实值的属性上,对连续值分布的属性最常见的假设为高斯分布。

基于这个假设的贝叶斯模型的扩展模型被称为Gaussian Naive Bayes。当然也可以用其他的函数来代表数据的分布(比如说多项式分布,伯努利分布等),但是高斯分布(正态分布)是最容易使用的,因为高斯分布的特征参数只有两个:均值和标准差。

基于高斯分布的朴素贝叶斯模型的表示方法

在二值属性的朴素贝叶斯模型中,我们利用训练数据集中样本的出现频次计算得到了各个类别下的条件概率。在连续值的情况下,我们需要使用连续输入属性x的均值和标准差来代表其分布。

这意味着在存储模型数据的时候,除了类概率之外,我们还需要存储每个类实例中输入变量的平均值和标准差。

从数据中学习基于高斯分布的朴素贝叶斯模型

要计算模型所需的高斯分布,只需要计算每个类下样本属性的 均值 和 标准差 即可。

mean(x)= 1 / n * sum(x)

n为实例的数量,x为训练数据中输入变量的值。

我们可以用下面的公式计算标准偏差:

standard deviation(x) = sqrt(1 / n * sum(xi-mean(x)^ 2))

这是所有实例属性值与均值的偏差的平方和的平方根,n为实例的数量,sqrt()为平方根函数,sum()为求和函数,xi为第i个实例的属性值,mean(x)为均值,^2代表平方符号。

用基于高斯分布的朴素贝叶斯模型进行预测

新的x值对各个的类别的概率可以通过 高斯概率密度分布函数(PDF) 计算得到。

在进行预测时,可以将变量对应的高斯分布的特征参数和输入变量一并作为高斯概率密度分布函数的输入,而高斯密度分布函数的输出则提供了当前输入下实例属于各个类别的概率。

pdf(x,mean,sd)=(1/(sqrt(2 * PI)* sd)) exp(-((x-mean^ 2) / (2 sd ^ 2)))

pdf代表高斯概率密度分布函数,sqrt()为平方根,mean和sd分别代表高斯分布的均值和方差, PI 为常数,exp()为自然数e为底的指数函数。

根据这个公式,我们就可以对实值输入属性进行类别预测。

还以上面举的天气,限号和出行关系的例子来进行计算(天气和限号属性改为对应的实值属性):

出门的类标签得分 = P(pdf(天气指数)|活动=出门) P(pdf(限号)|活动=出门) P(活动=出门)

朴素贝叶斯模型数据准备的最佳实践

  • 分配类别标签 :在模型中假定的标签属性:如二值标签,类标签等。
  • 指定高斯分布 :如果你的输入属性的单变量分布为高斯分布或近似高斯分布(移除少数远离均值很远的样本),基于高斯分布的贝叶斯模型可以达到很好的预测性能。
  • 分类问题 :朴素贝叶斯分类器适用于二值分类和多分类。
  • 对数概率 :计算概率的过程中可能用到了很多个很小的数的乘积,这很容易导致计算精度的下降,而使用概率的对数进行计算可以很好地保持结果的精确度。
  • 核函数 :除了高斯分布以外,一些更复杂的数值分布也可以通过核密度(核技巧)函数的变化来适配。
  • 更新概率 :当有新的数据可用时,你可以直接更新模型的参数(相应的条件分布,概率分布),当数据频繁变动时,这一功能有很大的帮助。

延伸阅读

这里还有两篇与朴素贝叶斯相关的文章供读者参考:

  • 用Python中从零开始实现朴素贝叶斯算法
  • 更好地使用朴素贝叶斯:朴素贝叶斯算法中最实用的12个技巧

下面是一些涉及到朴素贝叶斯的面向开发者的机器学习参考书:

  • Data Mining: Practical Machine Learning Tools and Techniques ,第88页
  • Applied Predictive Modeling ,第353页
  • Artificial Intelligence: A Modern Approach ,第808页
  • Machine Learning ,第6章

概要

在这篇文章中,我们探究了朴素贝叶斯在分类问题上的原理和应用。读完本文,你应当掌握了以下知识:

  • 贝叶斯定理,贝叶斯定理的数学形式以及应用。
  • 朴素贝叶斯模型的表示方法,如何利用贝叶斯模型进行预测,如何从数据中学习得到贝叶斯模型。
  • 适用于实值输入的基于高斯分布的朴素贝叶斯。
  • 朴素贝叶斯模型所需的数据。
机器学习
编程算法
机器学习
编程算法
评论
登录 后参与评论
0 条评论
热度
最新
登录 后参与评论
关于作者
人工智能资讯小编
腾讯社区运营
0
文章
0
累计阅读量
0
获赞
前往专栏
目录
  • 贝叶斯定理简介
  • 朴素贝叶斯分类器
    • 朴素贝叶斯模型的表示方法
      • 从数据中学习朴素贝叶斯模型
        • 计算类概率
        • 计算条件概率
      • 用朴素贝叶斯模型进行预测
      • 朴素贝叶斯(高斯模型)
        • 基于高斯分布的朴素贝叶斯模型的表示方法
          • 从数据中学习基于高斯分布的朴素贝叶斯模型
            • 用基于高斯分布的朴素贝叶斯模型进行预测
            • 朴素贝叶斯模型数据准备的最佳实践
            • 延伸阅读
            • 概要
  • 社区

    • 专栏文章
    • 阅读清单
    • 互动问答
    • 技术沙龙
    • 技术视频
    • 团队主页
    • 腾讯云TI平台
  • 活动

    • 自媒体分享计划
    • 邀请作者入驻
    • 自荐上首页
    • 技术竞赛
  • 资源

    • 技术周刊
    • 社区标签
    • 开发者手册
    • 开发者实验室
  • 关于

    • 社区规范
    • 免责声明
    • 联系我们
    • 友情链接

腾讯云开发者

扫码关注腾讯云开发者

扫码关注腾讯云开发者

领取腾讯云代金券

热门产品

  • 域名注册
  • 云服务器
  • 区块链服务
  • 消息队列
  • 网络加速
  • 云数据库
  • 域名解析
  • 云存储
  • 视频直播

热门推荐

  • 人脸识别
  • 腾讯会议
  • 企业云
  • CDN加速
  • 视频通话
  • 图像分析
  • MySQL 数据库
  • SSL 证书
  • 语音识别

更多推荐

  • 数据安全
  • 负载均衡
  • 短信
  • 文字识别
  • 云点播
  • 商标注册
  • 小程序开发
  • 网站监控
  • 数据迁移

Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有

深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569

腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287

问题归档 专栏文章 快讯文章归档 关键词归档 开发者手册归档 开发者手册 Section 归档

Copyright © 2013 - 2023 Tencent Cloud.

All Rights Reserved. 腾讯云 版权所有

登录 后参与评论
 
推荐文章
霸气的蛋挞  ·  “当左翼,不容易”——纪念英国左翼作家乔治·奥威尔逝世70周年 – 国际艺术新闻网
4 月前
烦恼的上铺  ·  台灣帆軟有限公司
9 月前
很酷的脆皮肠  ·  德国汉堡大学田海教授为我院师生讲解“民间故事与社会历史”-历史学院
1 年前
成熟的柠檬  ·  腾讯云短信布局django项目_django使用腾讯云短信服务-CSDN博客
1 年前
爱吹牛的台灯  ·  “错抱孩子28年”案一审宣判:医院共赔偿76万余元 |原告|法院|精神损害抚慰金_网易新闻
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号