09 机器学习 | 大道至简:朴素贝叶斯方法
下载APP
关闭
渠道合作
推荐作者
09 机器学习 | 大道至简:朴素贝叶斯方法
2017-12-28 王天一 来自北京
《人工智能基础课》
课程介绍
讲述:王天一
时长11:27大小5.24M
周二我和你分享了机器学习中的线性回归算法,这一算法解决的是从连续取值的输入映射为连续取值的输出的回归问题。今天我分享的算法则用于解决分类问题,即将连续取值的输入映射为离散取值的输出,算法的名字叫作“朴素贝叶斯方法”。
解决分类问题的依据是数据的属性。朴素贝叶斯分类器假定样本的不同属性满足条件独立性假设,并在此基础上应用贝叶斯定理执行分类任务。其基本思想在于分析待分类样本出现在每个输出类别中的后验概率,并以取得最大后验概率的类别作为分类的输出。
假设训练数据的属性由 n 维随机向量 表示,其分类结果用随机变量 y 表示,那么 x 和 y 的统计规律就可以用联合概率分布 描述,每一个具体的样本 都可以通过 独立同分布地产生。
朴素贝叶斯分类器的出发点就是这个联合概率分布,根据条件概率的性质可以得到
在上式中,P(Y) 代表着每个类别出现的概率,也就是类先验概率;P(X|Y) 代表着在给定的类别下不同属性出现的概率,也就是类似然概率。
先验概率容易根据训练数据计算出来,只需要统计不同类别样本的数目即可。而似然概率受属性取值数目的影响,其估计较为困难。
如果每个样本包含 100 个属性,每个属性的取值都可能有 100 种,那么对分类的每个结果,要计算的条件概率数目就是 。在这么多参数的情况下,对似然概率的精确估计就需要庞大的数据量。
要解决似然概率难以估计的问题,就需要“条件独立性假设”登台亮相。条件独立性假设保证了所有属性相互独立,互不影响,每个属性独立地对分类结果发生作用。这样类条件概率就变成了属性条件概率的乘积,在数学公式上可以体现为
这正是朴素贝叶斯方法的“朴素”之处,通过必要的假设来简化计算,并回归问题的本质。
条件独立性假设对似然概率的估计无疑是个天大的好消息。没有这一假设时,每个样本的分类结果 y 只能刻画其所有属性 形成的整体,只有具有相同 的样本才能放在一起进行评价。当属性数目较多且数据量较少时,要让 n 个属性同时取到相同的特征就需要些运气了。
有了条件独立性假设后,分类结果 y 就相当于实现了 n 重复用。每一个样本既可以用于刻画 ,又可以用于刻画 ,这无形中将训练样本的数量扩大为原来的 n 倍,分析属性的每个取值对分类结果的影响时,也有更多数据作为支撑。
但需要说明的是,属性的条件独立性假设是个相当强的假设。
一个例子是银行在发放房贷时,需要对贷款申请人的情况进行调研,以确定是否发放贷款。本质上这就是个分类问题,分类的结果是“是”与“否”。分类时则需要考虑申请人的年龄、工作岗位、婚姻状况、收入水平、负债情况等因素。这些因素显然不是相互独立的。中年人的收入通常会高于青年人的收入,已婚者的负债水平通常也会高于未婚者的负债水平。
因而在实际应用中,属性条件独立性假设会导致数据的过度简化,因而会给分类性能带来些许影响。但它带来的数学上的便利却能极大简化分类问题的计算复杂度,性能上的部分折中也就并非不可接受。
有了训练数据集,先验概率 P(Y) 和似然概率 P(X|Y) 就可以视为已知条件,用来求解后验概率 P(Y|X)。对于给定的输入 ,朴素贝叶斯分类器利用贝叶斯定理求解后验概率,并将后验概率最大的类作为输出。
由于在所有后验概率的求解中,边界概率 P(X) 都是相同的,因而其影响可以忽略。将属性条件独立性假设应用于后验概率求解中,就可以得到朴素贝叶斯分类器的数学表达式
应用朴素贝叶斯分类器处理连续型属性数据时,通常假定属性数据满足正态分布,再根据每个类别下的训练数据计算出正态分布的均值和方差。
从模型最优化的角度观察,朴素贝叶斯分类器是平均意义上预测能力最优的模型,也就是使期望风险最小化。期望风险是风险函数的数学期望,度量的是平均意义下模型预测的误差特性,可以视为单次预测误差在联合概率分布 P(X, Y) 上的数学期望。
朴素贝叶斯分类器通过将实例分配到后验概率最大的类中,也就同时让 1 - P(Y|X) 取得最小值。在以分类错误的实例数作为误差时,期望风险就等于 1 - P(Y|X)。这样一来,后验概率最大化就等效于期望风险最小化。
受训练数据集规模的限制,某些属性的取值在训练集中可能从未与某个类同时出现,这就可能导致属性条件概率为 0,此时直接使用朴素贝叶斯分类就会导致错误的结论。
还是以贷款申请为例,如果在训练集中没有样本同时具有“年龄大于 60”的属性和“发放贷款”的标签,那么当一个退休人员申请贷款时,即使他是坐拥百亿身家的李嘉诚,朴素贝叶斯分类器也会因为后验概率等于零而将他无情拒绝。
因为训练集样本的不充分导致分类错误,显然不是理想的结果。为了避免属性携带的信息被训练集中未曾出现过的属性值所干扰,在计算属性条件概率时需要添加一个称为“拉普拉斯平滑”的步骤。
所谓拉普拉斯平滑就是在计算类先验概率和属性条件概率时,在分子上添加一个较小的修正量,在分母上则添加这个修正量与分类数目的乘积。这就可以保证在满足概率基本性质的条件下,避免了零概率对分类结果的影响。当训练集的数据量较大时,修正量对先验概率的影响也就可以忽略不计了。
事实上,朴素贝叶斯是一种非常高效的方法。当以分类的正确与否作为误差指标时,只要朴素贝叶斯分类器能够把最大的后验概率找到,就意味着它能实现正确的分类。至于找到的最大后验概率的估计值是否精确,反而没那么重要了。
如果一个实例在两个类别上的后验概率分别是 0.9 和 0.1,朴素贝叶斯分类器估计出的后验概率就可能是 0.6 和 0.4。虽然数值的精度相差较大,但大小的相对关系并未改变。依据这个粗糙估计的后验概率进行分类,得到的依然是正确的结果。
上面的说法固然言之成理,却不能解释另外一个疑问。虽然属性条件独立性看起来像是空中楼阁,却给朴素贝叶斯分类器带来了实实在在的优良性能,这其中的奥秘何在?为什么在基础假设几乎永远不成立的情况下,朴素贝叶斯依然能够在绝大部分分类任务中体现出优良性能呢?
一种可能的解释是:在给定的训练数据集上,两个属性之间可能具有相关性,但这种相关性在每个类别上都以同样的程度体现。 这种情况显然违背了条件独立性假设,却不会破坏朴素贝叶斯分类器的最优性。
即使相关性在不同类别上的分布不是均匀的也没关系,只看两个单独的属性,它们之间可能存在强烈的依赖关系,会影响分类的结果。但当所有属性之间的依赖关系一起发挥作用时,它们就可能相互抵消,不再影响分类。
简而言之,决定性的因素是所有属性之间的依赖关系的组合。影响朴素贝叶斯的分类的是所有属性之间的依赖关系在不同类别上的分布,而不仅仅是依赖关系本身。可即便如此,属性条件独立性假设依然会影响分类性能。为了放宽这一假设,研究人员又提出了“半朴素贝叶斯分类器”的学习方法。
半朴素贝叶斯分类器考虑了部分属性之间的依赖关系,既保留了属性之间较强的相关性,又不需要完全计算复杂的联合概率分布。常用的方法是建立独依赖关系:假设每个属性除了类别之外,最多只依赖一个其他属性。由此,根据属性间依赖关系确定方式的不同,便衍生出了多种独依赖分类器。
朴素贝叶斯分类器的应用场景非常广泛。它可以根据关键词执行对一封邮件是否是垃圾邮件的二元分类,也可以用来判断社交网络上的账号到底是活跃用户还是僵尸粉。在信息检索领域,这种分类方法尤为实用。总结起来,以朴素贝叶斯分类器为代表的贝叶斯分类方法的策略是:根据训练数据计算后验概率,基于后验概率选择最佳决策。
今天我和你分享了机器学习基本算法之一的朴素贝叶斯方法的基本原理,其要点如下:
朴素贝叶斯方法利用后验概率选择最佳分类,后验概率可以通过贝叶斯定理求解;
朴素贝叶斯方法假定所有属性相互独立,基于这一假设将类条件概率转化为属性条件概率的乘积;
朴素贝叶斯方法可以使期望风险最小化;
影响朴素贝叶斯分类的是所有属性之间的依赖关系在不同类别上的分布。
在使用高维数据集时,每个样本都会包含大量的属性,这时属性条件概率连乘的结果会非常接近于零,导致下溢的发生。如何防止因概率过小造成的下溢呢?
欢迎发表你的观点。
分享给需要的人,Ta购买本课程,你将得18元
生成海报并分享
赞 6
提建议
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
上一篇
08 机器学习 | 简约而不简单:线性回归
下一篇
10 机器学习 | 衍化至繁:逻辑回归
精选留言(17)
- 2017-12-29大佬,能有简单的项目或习题,让我们实践下不?11
- 王杰2018-01-30讲的简洁易懂,回家途中看完了!一个问题:如果样本先降维去除属性相关性再用朴素贝叶斯分类,效果是不是就很好?
作者回复: 原则上是会取得良好效果,但应用在实际问题中还要看真实表现。
共 2 条评论9 - 杜浩2018-02-28朴素贝叶斯为什么是期望风险最小化的 这点还是不太理解
作者回复: 后验概率最大化意味着把实例划分到最可能的类中,使分类的错误概率最小,也就是期望风险最小。
7 - 杨家荣2019-12-25打卡第七天(7/21): <<人工智能基础课09>>朴素贝叶斯方法 回答老师问题: 在使用高维数据集时,每个样本都会包含大量的属性,这时属性条件概率连乘的结果会非常接近于零,导致下溢的发生。如何防止因概率过小造成的下溢呢? 这样想到,得到<<吴军数学课>>42讲中古德-图灵折扣估计,预防黑天鹅事件.吴军老师讲古德用每一次的概率加一除总数,这样的结果不至于出现为0的情况,但最后估值肯定不准确,用朴素贝叶斯方法做分类应该没问题,我特意重读了吴军老师的课,老师还讲了吴军老师导师创的差值法,这个更接近,更精确,最后还提到备用法;等这些方法,都能最大程度防止因概率过小造成的下溢;我个人看法; 今日所学:朴素贝叶斯方法,将连续取值的输入映射为离散取值的输出,算法的名字叫作“朴素贝叶斯方法”。 其基本思想在于分析待分类样本出现在每个输出类别中的后验概率,并以取得最大后验概率的类别作为分类的输出. 名词:类先验概率,类似然概率(条件独立性假设保证了所有属性相互独立,互不影响,每个属性独立地对分类结果发生作用),这正是朴素贝叶斯方法的“朴素”之处,通过必要的假设来简化计算,并回归问题的本质; 1,从模型最优化的角度观察,朴素贝叶斯分类器是平均意义上预测能力最优的模型,也就是使期望风险最小化; 2,影响朴素贝叶斯的分类的是所有属性之间的依赖关系在不同类别上的分布,而不仅仅是依赖关系本身; 3,半朴素贝叶斯分类器考虑了部分属性之间的依赖关系,既保留了属性之间较强的相关性,又不需要完全计算复杂的联合概率分布。常用的方法是建立独依赖关系:假设每个属性除了类别之外,最多只依赖一个其他属性。由此,根据属性间依赖关系确定方式的不同,便衍生出了多种独依赖分类器。 4,朴素贝叶斯分类器的应用场景非常广泛。它可以根据关键词执行对一封邮件是否是垃圾邮件的二元分类,也可以用来判断社交网络上的账号到底是活跃用户还是僵尸粉。在信息检索领域,这种分类方法尤为实用。总结起来,以朴素贝叶斯分类器为代表的贝叶斯分类方法的策略是:根据训练数据计算后验概率,基于后验概率选择最佳决策。 总结: 1,朴素贝叶斯方法利用后验概率选择最佳分类,后验概率可以通过贝叶斯定理求解; 2,朴素贝叶斯方法假定所有属性相互独立,基于这一假设将类条件概率转化为属性条件概率的乘积; 3,朴素贝叶斯方法可以使期望风险最小化; 4,影响朴素贝叶斯分类的是所有属性之间的依赖关系在不同类别上的分布。展开共 1 条评论3
- 宋不肥2019-07-04概率取对数,把连乘变成连加3
- 七月2017-12-30可以用对数吗3
- 吴文敏2018-02-22如果每个样本包含 100 个属性,每个属性的取值都可能有 100 种,那么对分类的每个结果,要计算的条件概率数目就是 100^2=10000 感觉这里应该是100^100
作者回复: 没错,应该是每个属性的取值都有2种。
共 2 条评论2 - 秦龙君2017-12-29学习了。我想问老师一个问题,所有文章更新完了,有集结出书的计划吗?我感觉平时看完后,再用书重新看一遍,效果更好。
池建强回复: 会出的
共 2 条评论2 - 冯思鸣2022-08-21 来自广东音量有时会很小…
- IT蜗壳-Tango2020-11-07太棒了,如果有py代码就更棒啦。学习到了。
- oci2020-03-25谢谢。理论很好,我还得多多实践
- 上善若水2019-10-30条件独立性,本身就是思维模式的问题,可能常识并不正确共 1 条评论
- 隔壁老任2018-11-08老师你好,请教俩问题,1.第一段有句话有点懵,朴素贝叶斯是 将连续输入转化为离散输出么?我目前简单的,感觉都是离散输入到离散输出,属性的取值也多是离散的,如果是连续的,数量就太大了 2.同最后一个问题,因为朴素贝叶斯是用的后验概率相乘,貌似训练一次后,参数就不会变了?后续的的参数更新一般用什么方法呢? 谢谢展开
作者回复: 1. 这句话的本义是将输入数据转化成分类结果,和回归问题形成对比。连续属性也是可以处理的,但需要离散化的过程,也能直接计算。 2. 这些传统方法不像深度学习,需要一轮一轮地训练。一波数据过来,参数就确定了,要更新就得用新的数据。
共 2 条评论 - wdf2018-09-22老师如果朴素贝叶斯算法,只在乎分类是否正确。是否他给出的概率值就参考意义不大?如果给出是正立的,赵军,只有一个是0.9,一个是0.6是不是很难说,是有区别的。
作者回复: 后验概率归一化之后和应该为1,那么0.9和0.6就应该是0.6和0.4。即使不归一化,更大的0.9也说明这个样本更像正例。
共 2 条评论 - 夏震华(围巾)2018-03-26在使用高维数据集时,每个样本都会包含大量的属性,这时属性条件概率连乘的结果会非常接近于零,导致下溢的发生。如何防止因概率过小造成的下溢呢? 都乘个100,放大了,然后到了后面在统一除去?如何
作者回复: 这可以看成取概率对数的特例
- 啊哈哈2018-03-02根据训练数据计算后验概率,基于后验概率选择最佳决策。
- Andy2018-01-16王老师您好,感觉朴素贝叶斯不像逻辑回归那样有个loss func 可以做权重的学习,那么朴素贝叶斯训练好的模型怎么才能持久化呢?
作者回复: 其实朴素贝叶斯也是有损失函数的,它的损失函数就是分类错误数的数学期望,让这个函数最小化和后验概率最大化是等价的,因而算法本身就暗含了最优化的过程。