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

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

数学准备


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

条件概率: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

相关文章
|
29天前
|
人工智能 JSON 算法
Qwen2.5-Coder 系列模型在 PAI-QuickStart 的训练、评测、压缩及部署实践
阿里云的人工智能平台 PAI,作为一站式、 AI Native 的大模型与 AIGC 工程平台,为开发者和企业客户提供了 Qwen2.5-Coder 系列模型的全链路最佳实践。本文以Qwen2.5-Coder-32B为例,详细介绍在 PAI-QuickStart 完成 Qwen2.5-Coder 的训练、评测和快速部署。
Qwen2.5-Coder 系列模型在 PAI-QuickStart 的训练、评测、压缩及部署实践
|
14天前
|
编解码 机器人 测试技术
技术实践 | 使用 PAI+LLaMA Factory 微调 Qwen2-VL 模型快速搭建专业领域知识问答机器人
Qwen2-VL是一款具备高级图像和视频理解能力的多模态模型,支持多种语言,适用于多模态应用开发。通过PAI和LLaMA Factory框架,用户可以轻松微调Qwen2-VL模型,快速构建文旅领域的知识问答机器人。本教程详细介绍了从模型部署、微调到对话测试的全过程,帮助开发者高效实现定制化多模态应用。
|
1月前
|
机器学习/深度学习 PyTorch API
优化注意力层提升 Transformer 模型效率:通过改进注意力机制降低机器学习成本
Transformer架构自2017年被Vaswani等人提出以来,凭借其核心的注意力机制,已成为AI领域的重大突破。该机制允许模型根据任务需求灵活聚焦于输入的不同部分,极大地增强了对复杂语言和结构的理解能力。起初主要应用于自然语言处理,Transformer迅速扩展至语音识别、计算机视觉等多领域,展现出强大的跨学科应用潜力。然而,随着模型规模的增长,注意力层的高计算复杂度成为发展瓶颈。为此,本文探讨了在PyTorch生态系统中优化注意力层的各种技术,
65 6
优化注意力层提升 Transformer 模型效率:通过改进注意力机制降低机器学习成本
|
22天前
|
机器学习/深度学习 人工智能 算法
人工智能浪潮下的编程实践:构建你的第一个机器学习模型
在人工智能的巨浪中,每个人都有机会成为弄潮儿。本文将带你一探究竟,从零基础开始,用最易懂的语言和步骤,教你如何构建属于自己的第一个机器学习模型。不需要复杂的数学公式,也不必担心编程难题,只需跟随我们的步伐,一起探索这个充满魔力的AI世界。
41 12
|
29天前
|
机器学习/深度学习 Python
机器学习中评估模型性能的重要工具——混淆矩阵和ROC曲线。混淆矩阵通过真正例、假正例等指标展示模型预测情况
本文介绍了机器学习中评估模型性能的重要工具——混淆矩阵和ROC曲线。混淆矩阵通过真正例、假正例等指标展示模型预测情况,而ROC曲线则通过假正率和真正率评估二分类模型性能。文章还提供了Python中的具体实现示例,展示了如何计算和使用这两种工具来评估模型。
51 8
|
29天前
|
机器学习/深度学习 Python
机器学习中模型选择和优化的关键技术——交叉验证与网格搜索
本文深入探讨了机器学习中模型选择和优化的关键技术——交叉验证与网格搜索。介绍了K折交叉验证、留一交叉验证等方法,以及网格搜索的原理和步骤,展示了如何结合两者在Python中实现模型参数的优化,并强调了使用时需注意的计算成本、过拟合风险等问题。
51 6
|
1月前
|
机器学习/深度学习 数据采集 算法
从零到一:构建高效机器学习模型的旅程####
在探索技术深度与广度的征途中,我深刻体会到技术创新既在于理论的飞跃,更在于实践的积累。本文将通过一个具体案例,分享我在构建高效机器学习模型过程中的实战经验,包括数据预处理、特征工程、模型选择与优化等关键环节,旨在为读者提供一个从零开始构建并优化机器学习模型的实用指南。 ####
|
1月前
|
人工智能 边缘计算 JSON
DistilQwen2 蒸馏小模型在 PAI-QuickStart 的训练、评测、压缩及部署实践
本文详细介绍在 PAI 平台使用 DistilQwen2 蒸馏小模型的全链路最佳实践。
|
1月前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的线性回归模型
本文深入探讨了机器学习中广泛使用的线性回归模型,从其基本概念和数学原理出发,逐步引导读者理解模型的构建、训练及评估过程。通过实例分析与代码演示,本文旨在为初学者提供一个清晰的学习路径,帮助他们在实践中更好地应用线性回归模型解决实际问题。
|
1月前
|
机器学习/深度学习 数据采集 监控
如何使用机器学习模型来自动化评估数据质量?
如何使用机器学习模型来自动化评估数据质量?

热门文章

最新文章