基于贝叶斯推断的分类模型& 机器学习你会遇到的“坑”

简介: 本文讲解了在学习基于贝叶斯推断的分类模型中,我们需要的准备和方法。

数学准备


概率:事件不确定性程度的量化,概率越大,表示事件发生的可能性越大。

条件概率:P(A|B),在条件B下,发生A的概率。

联合概率:P(A,B),A事件与B事件同时发生的概率。如果因子相互独立,联合概率等于因子概率乘积,即P(A,B)=P(A)P(B)。如果因子独立性不可知,那么有更普遍的形式:P(A,B)=P(B)P(A|B)。

边缘概率:∑AP(A,B)或∫AP(A,B),对联合分布其中一个因子的求和(积分),就得到了另一个因子的边缘概率。

独立同分布:随机变量中每个变量的概率分布相同,且变量之间互相独立。

贝叶斯定理

曾经有一个笑话:有个人坐飞机,带了个炸弹。问他为什么,他说,飞机上有1个炸弹的几率(假设)是万分之一,根据概率论,同时有两个炸弹的概率就是亿分之一,所以我自己带一个炸弹来降低该飞机上有炸弹的概率。

这个笑话之所以好笑,就是因为这个人混淆了联合概率和条件概率,联合概率是指两件事情同时发生的概率,假如说飞机上有一个炸弹的概率是万分之一,那么有两个炸弹的概率就是亿分之一。而条件概率则是指在一件事情在另外一件事情的约束下发生的概率,此人已经携带了一个炸弹,那么飞机上出现第二个炸弹的概率就是条件概率,仍然为万分之一(假设携带炸弹相互独立)。

如果A,B两件事情相互独立,联合概率可以表示为P(AB)=P(A)P(B),我们用P(A|B)来表示给定B条件下A的发生概率,事实上,如果A,B不相互独立,则P(A|B)≠P(A),联合概率就表示为P(AB)=P(B)P(A|B)。

相应的,我们用P(B|A)来表示给定A条件下B的发生概率,联合概率就变成了P(AB)=P(A)P(B|A)。如果我们连接起这两个等式,再分别除以P(B)就会得到一个非常诱人且强大的公式,我们把他叫做贝叶斯定理:

image

我们会把等式左边的P(A|B)叫做后验概率,等式右边的P(A)叫做先验概率,P(B|A)叫做似然,但后验概率和似然函数在本质上仍然是条件概率。这样的叫法是为了强调贝叶斯定理从结果推原因的过程,也可以理解为一种事件发生之后的概率的修正。

Example:

假设我们现在有两个碗,一个碗里有30个蓝色的小球,10个红色的小球,另一个碗里蓝色小球和红色小球分别有20个,现在的问题并不是你随机挑一个碗从里面拿球,拿到蓝色的概率是多少(因为这太简单了)。我要问的问题是,我拿到了一个蓝球,它更可能来自我随机挑选的第几个碗?

我们把挑选碗的过程叫做事件A1,A2,挑选小球的过程叫做事件B1,B2,分别对应蓝色和红色,我们先求P(A1|B1),将其带入贝叶斯公式,就可以求出后验概率为0.6,我们再求P(A2|B1),代入得后验概率为0.4,说明我们如果选出一个蓝球,这个蓝球更可能来自于第一个碗。

贝叶斯引入的动机

我们在本系列课程的第一篇《过拟合问题》中提到将数据分为训练集和测试集,以及我们做交叉验证的意义。简单来说,分集的目的是为了评估模型的泛化能力,而交叉验证的目的是为了将整个评估过程变得准确。

模型的泛化能力为什么如此重要?因为无论在实验室还是在工业界,真实的数据量太过庞大,而且数据的增长速度越来越快,我们所利用的数据只能被认为是从现实采样而来,我们的模型势必要接触那些从来没在训练集出现过的数据。我们希望模型面对未知数据会有好的预测效果,也就是说,模型势必要对观测上的不确定性做出推断。

我们通常用概率来表示变量的不确定性程度,并且将真实的变量取值当作一个概率分布,机器学习会有视角的转变:

从贝叶斯的框架讨论机器学习,那么问题的目标就变成了:从现有的数据中估计后验概率P(l|x)。比如分类问题,我们对于每一个x,选择能使后验概率最大的类别。

如果我们选取的模型存在有限个参数,可以利用最大似然估计或最大后验估计来给出我们的优化函数。

现在我们主要集中于第一个视角,探讨基于贝叶斯推断的模型。从贝叶斯定理可以看出,我们对后验概率的计算要通过似然和先验概率,这样的模型叫做生成式模型。而譬如logistic regression,是直接对后验概率进行估计,没有用到贝叶斯定理,这样的模型叫做判别式模型。

基于贝叶斯推断的分类方法

我们现在考虑典型的机器学习的二分类问题,我们每一个训练样本都有若干的特征(feature)和确定的标签(label),我们的测试样本只有特征,没有标签。所以从贝叶斯推断的角度来看,我们需要寻找的是一个最大化的条件概率(后验概率)P(l|X),我们可以将其理解为,在已知样本X的前提下,最大化它来自类别l的概率。也可以理解为:对于每一个样本X,我们选择能够使后验概率最大的类别l。

假如我们面临的问题是,根据天气、温度、湿度和风力4个特征来预测要不要去打网球,我们训练样本如下图所示:

image

可以看出,类别l只有Yes和No两种情况。如果我们的测试样本X为(天气=Sunny,温度=Cool,湿度=high,风力=Strong),我们要分别计算出P(l=Yes|X)和P(l=No|X),然后比较大小,然后将概率大的那一方所选择的类别当作我们预测的结果。

我们接下来的问题是,如何计算后验概率P(l=Yes|X)和P(l=No|X)。我们将其带入贝叶斯公式:

image

其中,P(l=Yes)很好理解,就是标记为Yes的样本占全部样本的比例,我们也把它叫做类先验(prior)概率,根据大数定律,我们可以根据出现的频率来估计概率,这也是我们要从训练样本中获取的信息。

P(X)则是用于归一化的证据(evidence)因子,也是X出现的概率。我们可以考虑,对于类别为No的后验概率:

image

可以看出,P(X)是相同的,所以当我们比较两者大小时,这一项与计算无关。

P(X|l=Yes)是条件概率,是指在标记Yes的样本中具有特征X的样本所占的比例,我们也把它叫做似然(likelihood),这也是我们要从训练样本中获取的信息.真正的问题在于,如果我们真的将X本身作为一个事件,那么很有可能我们的测试样本概率为零,而未被观测到并不等于概率为零。

朴素贝叶斯(Naive Bayes)

我们注意到X是个向量,它包含了每个特征的取值,于是我们可以将P(X|l=Yes)视为各个特征取值的条件概率下的联合概率,如果我们继续假设特征之间互相独立,那么联合概率就变得非常容易计算:

image

朴素贝叶斯中,朴素(naive)的含义正是如此,它采用了属性条件独立性假设(attribute conditional independence assumption),让似然变得简单可计算。

让我们先来总结一下上面那幅图,分别计算各个属性的条件概率:

image

image

image

image

所以,就有:

image

image

计算结果发现,将这个样本归结于Yes的后验概率大约为0.0053,归结于No的后验概率大约为0.0206,No的后验概率远远大于Yes的后验概率,也就是说,对于这样一个样本,我们的预测结果会是——不要去打网球。

除了朴素贝叶斯这样一种基于贝叶斯推断的分类模型,面对机器学习的回归问题,我们是否也有基于贝叶斯推断的模型?甚至我们还可以问,贝叶斯只是应用于模型之中吗?那么,我们的下一篇将会为大家介绍贝叶斯推断的回归模型。

课堂TIPS

广义来看,贝叶斯分类器是生成式模型的一种(generative models)。朴素贝叶斯是贝叶斯分类最简单的形式,因为它假设了属性的条件概率互相独立,使得计算后验概率简单可行。

我们文中所举的例子是离散属性,所以概率的形式均为概率质量函数(PMF),我们可以将其推广到连续属性,只需要将概率的形式换为概率密度函数(PDF),但本质并不会发生改变。

我们在用朴素贝叶斯方法时,需要计算多个属性的条件概率下的联合概率。但如果我们的样本多样性不够丰富,很可能会出现我们的测试样本中的某些属性值并未在训练样本的某个类中出现,如果直接求解,则会造成概率为零的后果。面对这样的情形,我们会在计算先验概率的时候,引入拉普拉斯修正,强行使未出现的属性条件概率不为零。

我们在使用贝叶斯分类器做训练时,实际上是在训练先验概率P(l)和似然P(X|l)。我们可以为了预测准确度,不断地将新增样本的属性所涉及的概率估计进行修正;我们也可以为了预测速度,将所有的P(X|l)和P(l)预先计算好,遇到测试样本时直接查表判别。

朴素贝叶斯所依赖的属性条件独立性不一定成立,所以还有半朴素贝叶斯分类器(semi-naive),它假设每个属性存在一定的依赖,适当考虑一部分的属性依赖。

原文发布时间为:2018-07-28
本文作者:唐僧不用海飞丝
本文来自云栖社区合作伙伴“数据派THU”,了解相关信息可以关注“数据派THU

相关文章
|
16天前
|
机器学习/深度学习 数据采集 人工智能
构建高效机器学习模型的五大技巧
【4月更文挑战第7天】 在数据科学迅猛发展的今天,机器学习已成为解决复杂问题的重要工具。然而,构建一个既精确又高效的机器学习模型并非易事。本文将分享五种提升机器学习模型性能的有效技巧,包括数据预处理、特征工程、模型选择、超参数调优以及交叉验证。这些方法不仅能帮助初学者快速提高模型准确度,也为经验丰富的数据科学家提供了进一步提升模型性能的思路。
|
20天前
|
机器学习/深度学习 数据采集 人工智能
Machine Learning机器学习之贝叶斯网络(BayesianNetwork)
Machine Learning机器学习之贝叶斯网络(BayesianNetwork)
|
20天前
|
机器学习/深度学习 人工智能 自然语言处理
机器学习之线性回归与逻辑回归【完整房价预测和鸢尾花分类代码解释】
机器学习之线性回归与逻辑回归【完整房价预测和鸢尾花分类代码解释】
|
21天前
|
机器学习/深度学习 数据采集 算法
构建高效机器学习模型的最佳实践
【4月更文挑战第3天】在数据驱动的时代,构建高效的机器学习模型已成为解决复杂问题的关键。本文将探讨一系列实用的技术策略,旨在提高模型的性能和泛化能力。我们将从数据预处理、特征工程、模型选择、超参数调优到集成学习等方面进行详细讨论,并通过实例分析展示如何在实践中应用这些策略。
16 1
|
13天前
|
机器学习/深度学习 自然语言处理 算法
|
1天前
|
机器学习/深度学习 数据采集 人工智能
构建高效机器学习模型的最佳实践
【4月更文挑战第23天】在数据驱动的时代,机器学习已成为创新的核心动力。本文深入探讨了构建高效机器学习模型的关键步骤,包括数据预处理、特征工程、模型选择、训练技巧以及性能评估。通过实例分析与经验总结,旨在为从业者提供一套实用的技术指南,帮助他们在复杂数据环境中提升模型的准确性和泛化能力。
|
6天前
|
机器学习/深度学习 存储 算法
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
26 7
|
7天前
|
机器学习/深度学习 算法 数据处理
构建自定义机器学习模型:Scikit-learn的高级应用
【4月更文挑战第17天】本文探讨了如何利用Scikit-learn构建自定义机器学习模型,包括创建自定义估计器、使用管道集成数据处理和模型、深化特征工程以及调优与评估模型。通过继承`BaseEstimator`和相关Mixin类,用户可实现自定义算法。管道允许串联多个步骤,而特征工程涉及多项式特征和自定义变换。模型调优可借助交叉验证和参数搜索工具。掌握这些高级技巧能提升机器学习项目的效果和效率。
|
8天前
|
机器学习/深度学习 数据采集 算法
构建高效机器学习模型:从特征工程到模型调优
【4月更文挑战第16天】 在数据驱动的时代,机器学习已成为解决复杂问题的关键工具。本文旨在分享一套实用的技术流程,帮助读者构建高效的机器学习模型。我们将重点讨论特征工程的重要性、选择合适算法的策略,以及通过交叉验证和网格搜索进行模型调优的方法。文章的目标是为初学者提供一个清晰的指南,同时为有经验的实践者提供一些高级技巧。
|
8天前
|
机器学习/深度学习 人工智能 分布式计算
R和Python机器学习:广义线性回归glm,样条glm,梯度增强,随机森林和深度学习模型分析
R和Python机器学习:广义线性回归glm,样条glm,梯度增强,随机森林和深度学习模型分析
13 0