前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >统计学习方法:朴素贝叶斯方法

统计学习方法:朴素贝叶斯方法

作者头像
统计学家
发布2019-04-10 10:04:28
6210
发布2019-04-10 10:04:28
举报
文章被收录于专栏:机器学习与统计学

贝叶斯法则

贝叶斯法则是统计学的一个基础法则,它奠定了贝叶斯估计的理论基础,为统计估计提供了一条更客观科学的新思路。在当前的机器学习的概率模型中,有很多方法都是基于贝叶斯这个框架建立的。具体的,贝叶斯法则有如下推导:

P(A,B)=P(B,A)

P(A)P(B|A)=P(B)P(A|B)

P(A|B)=P(A)P(B|A)P(B)

其中第三个式子就是我们熟悉的贝叶斯公式。它揭示了P(A|B)和P(B|A)的潜在关系。 通常我们将P(A),P(B)称为先验概率。先验概率是包含了先验知识的因子。它的引入是将人对研究对象的认知引入到模型中。值得注意的是,当样本量足够大时,先验知识对估计的影响会变得非常小。 我们将P(A|B)和P(B|A)称为后验概率,它表达的是客观事实,是对数据的观察。 贝叶斯公式为利用搜集到的信息对原有判断进行修正提供了有效手段,也为人们对概率信息的认知加工过程与规律、指导人们进行有效的学习和判断决策都具有十分重要的理论意义和实践意义。

朴素贝叶斯

朴素贝叶斯是基于贝叶斯定理而提出的一种分类方法,与决策树一样是最为广泛使用的分类模型之一。贝叶斯系列的分类器都基于贝叶斯定理,而朴素贝叶斯在它假定给定的数据集特征之间互相条件独立,因此得名,同时它也是最简单的贝叶斯分类器。尽管因为给定条件独立假设会导致分类准确度的降低,但是在很多情况下,数据特征维数非常高,若不通过假设条件独立,会造成训练计算量成指数级上升。朴素贝叶斯通过牺牲少量的准确度来获得较大的性能提升,使得其实用程度大大增加。朴素贝叶斯属于生成模型,因为它学习到的是生成数据的机制。

模型

对问题的建模思路显而易见:对于输入每个样本x以及其类别y,我们利用它们的先验概率,和观察到的条件概率,利用贝叶斯定理所给定的关系求得所需要的后验概率。可以简单的将这个思路理解为:根据在类别为y时输入为x的概率,估计输入为x时输出为y的概率。

通过简单的计算可以知道,条件概率的假设空间规模为一个指数级的值。在实际情景下我们知道光输入x就有可能是一个高维的向量,更别说每一维的取值了,所以这个规模是非常大的。这还是只在朴素贝叶斯的背景下——各个特征之间不考虑其关联即假设特征之间条件独立,当在更复杂的贝叶斯网络的情况下,这个规模还要大得多(当然那时候模型也变了)。因此在实现的时候需要特别考虑一下概率表的设计——如果你的特征空间比较大的话。 回到模型,从上文我们知道,朴素贝叶斯的一大特点就是特征之间的条件独立,这一约束在模型中表现为各个特征的条件概率的乘积。 (不清楚的话请复习一下概率论里的知识,关于联合概率分布和全概率公式的地方。此处公式因为mathjax解析一直有问题就删掉了,只好直接附上Latex代码了)

代码语言:javascript
复制
# 此处为Latex代码,展示的是naive的条件概率
$$
P(X=x_i|Y=c_k)=\prod_{j=1}^n P(x^j|c_k)
$$

把这个条件概率的表述代入到贝叶斯公式得:

P(Y=ck|X=x)=P(y=ck)∏jP(X(j)=x(j)|Y=ck)∑P(Y=ck)∏P(X(j)=x(j)|Y=ck)

由于每个式子的分母都相同,我们可以将所求的概率写为:

f(x,ck)=P(y=ck)∏jP(X(j)=x(j)|Y=ck)

策略

得到模型后,我们仍然像之前的方法一样来确定朴素贝叶斯方法的策略。 我们知道,我们把这个方法应用于一个分类问题,因此我们应该给定输入后然后能够得到一个最优化的输出,这个输出即表示对于给定的样本我们对其所属类别的预测。从我们的模型中看,我们对于给定的输入,生成的是这个输入在所有可能的类别取值下的条件概率。我们简单的将值最大的条件概率作为我们的预测结果。很显然这个优化策略也是一个naive的决定,但是它行之有效且等价于后验概率期望风险最小化(选择0-1损失函数,这个非常容易证明)。 因此我们最终得到优化目标:

y=argmaxckP(y=ck)∏jP(X(j)=x(j)|Y=ck)

###算法 从上述优化目标可知:并不需要如何玄乎的算法来求解这个优化问题。 那么是不是没有关注点了呢?不,还是有的。 如之前所说,在实现时,概率表是一个需要关注的地方(从我个人的经验而言)。 还有一直被忽视的一点:如何计算公式中所需的先验概率和后验概率呢? 当我们对数据、特征有确信度比较高的先验概率时,我们可以为这样的特征设置先验概率(虽然我从没这么做过),否则可以通过对样本数据集中每个特征进行统计,将其值作为我们的估计。这里采用的思想就是简单的极大似然估计——观察到的就是最合理的。 此时,你也注意到这个方法也是一个虽然naive但是行之有效的办法。不过我们还是有需要改进的地方。

从这样的方法我们可以看到,数据的估计变得非常依赖数据集(当然了…统计学习方法本身就是非常依赖于数据集的)。一个显而易见的事实就是当数据集越大,我们估计到的概率就越准确。且在数据集越大的时候,先验概率对概率的影响也会变得越来越小,这样可以避免主观的先验概率对客观事实造成的误差。但是事实上我们所用的数据集通常都是不够大的(想起我的毕设用的数据集,一把辛酸泪),那么在估计某些概率值的时候可能会出现值为0的情况。我们知道我们的条件概率估计实际上各个维度的特征的条件概率值的乘积。若其中出现一个值为0,则整个值为0(听上去好像构造了一个稀疏的表呢,然而这并不是什么好事)。这样的情况会掩盖其它特征的作用——无论其它特征对信息的描述是多么的准确。可能恰巧这个特征是个没什么用的特征。可能每条数据都会出现几次这样的情况,且概率值为0的特征不是同一个(这时候可不是特征工程能解决的问题了)。更多的可能是对于同一个样本,其在多个分类下概率值都因为出现这样的状况从而导致值为0,使得我们的优化策略直接失效。为此需要采用贝叶斯估计来减弱这个分类偏差,对先验概率和条件概率都引入一个常数。(具体形式只能靠大家自己查阅了,还是mathjax解析有问题…难道是因为公式太长了?)

代码语言:javascript
复制
# 此处为Latex代码,展示的是贝叶斯估计的公式
$$
P_{\lambda}(X^{(j)}=a_jl|Y=c_k)=\frac{\sum_{i+1}^N I(x_i^{(j)}=a_jl,y_i=c_k)+\lambda}{\sum_{i=1}^N I(y_i=c_k)+S_j \lambda}
$$

式中引入的常数lambda为一个大于等于0的常数。当其值为0时,做的就是极大似然估计,当值为1时,我们称其做了拉普拉斯平滑。当其值大于0时,我们可以看到概率值大于0,这样可以避免出现直接为0的情况。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-12-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习与统计学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 贝叶斯法则
  • 朴素贝叶斯
  • 模型
  • 策略
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档