机器学习中的数学(全集)

在当下,机器学习、人工智能领域吸引了许多同学投身其中,其中包含了大量非科班出身或者从其他行业切换赛道转行而来的朋友们,大家在学习的过程中发现学习曲线陡峭、难度较大,普遍的心声就是:机器学习难,首要就是数学知识需要的太多了

大学学过数学,为什么还是不会用、用不好?

其实在大学阶段,大家都学过概率论、线性代数和微积分的课程,为什么到了机器学习领域需要使用的时候,却难以支撑了呢?我感觉有以下几点原因,相信你也曾经感同身受。

第一,大学课程中的知识点并没有完全覆盖机器学习领域所需。 回想一下大学概率统计课程内容的内容,虽然很重要,但其实远远不够。事实上,我们还需要补充随机过程随机理论蒙特卡洛思想采样方法概率图等一些重要的基础知识,才能说知识结构相对完整。同样的,大学本科的线性代数中一般也不会介绍相似矩阵矩阵分解数据降维等重要内容,最优化的思想和应用在高等数学中也鲜有涉及。

第二,大学课程的学习重计算技巧,轻内在逻辑。 大家一定都有这种感觉,学习大学数学的时候,我们是不是一天到晚苦于去计算行列式、特征值;去求微分、求积分;去罗列很多种分布,然后算期望、算方差、算事件概率。这样的结果就是数学变成了算术,还是在不停的做程序一秒钟就能做的事儿。至于说知识背后的内在逻辑和应用方法,基本上是非常欠缺的,因此大家很容易考完就忘。

第三,大学学了数学,却不知道学了能干什么。几十年如一日的教学内容没能深刻挖掘学科与当下前沿技术的交汇点,使得同学们常常有这样的困惑:这门课学了之后有什么用?自然学完之后,很快也就还给老师了。同时大学开设的数学基础课目的是讲授基础理论,本来也不是为了给大家打牢机器学习的数学基础。

这个专栏和传统的数学教材有何不同?

首先,我们会集中力量紧紧围绕机器学习核心算法中所涉及到的数学知识展开介绍,做好精确打击。 我们的讲解会结合好数学的本质内涵,用浅显易懂的语言讲透深刻的数学思想,构建起整个专栏理论体系。

然后,我们还会加强基础知识与算法、应用案例之间的联系。 我们在讲解数学内容的时候会注重延伸到后续的算法应用场景,将其进行相互关联,形成学以致用的实践导向。

同时,我们会运用好 Python 工具,做好和工程应用的无缝对接。 整个专栏内容都以 Python 语言为工具进行教学内容的实践,利用numpy、scipy、matplotlib、pandas 等工具强化知识的理解、提升工作的效率。

此外,我们还十分重视专栏本身的写作技巧。作者深入浅出的讲解技巧和逻辑严密的写作文风也将助你在充满挑战的学习道路上不断前进。

专栏作者

avatar

专栏的设计思路

我们会按照概率统计、线性代数、微积分与最优化以及概率图与随机过程的顺序来安排专栏内容。

avatar

第一篇:概率统计

第 01 部分:概率思想。这一部分里,我们首先从条件概率和贝叶斯方法入手,阐明条件、独立、相关这些基本概念,掌握联合、边缘的计算方法,和大家一起构建起认知世界的概率思维体系。

第 02 部分:随机变量。这里,我们将重点介绍随机变量主干内容,从单一随机变量的分布过渡到多元随机变量的分析,最后重点围绕大数定理和中心极限定理,并初步接触蒙特卡洛方法,带领读者建立重要的极限思维。

第 03 部分:统计推断。这一部分我们关注的是如何从部分的样本集合中去推断出我们关心的总体特征,这在现实世界中的意义非常重要。在介绍参数估计的思想方法基础上,我们重点关注极大似然估计和贝叶斯估计这两种方法。

第 04 部分:随机过程。这一部分我们会关注由一组随机变量构成的集合,即:随机过程。股票的波动、语音信号、视频信号、布朗运动等都是随机过程在现实世界中的实例。我们在随机过程的基本概念之上,重点分析马尔科夫链,梳理由静到动的演变,探索变化的过程和不变的稳态。

第 05 部分:采样理论。这一部分重点关注如何获取服从目标分布的近似采样方法,从基本的接受-拒绝采样入手,逐渐深入到马尔科夫链-蒙特卡洛方法,在动态的过程中进一步深化对随机过程、随机理论与极限思想的理解。

第 06 部分:概率模型。这一部分介绍概率图模型中的一种典型模型:隐马尔科夫模型,熟悉状态序列的概率估计和状态解码的基本方法,为后续进一步拓展概率图模型的学习打好基础。

第二篇:线性代数

第 07 部分:构筑空间。这一部分我们将从空间坐标表示与线性变换入手,快速建立线性代数直观感受,理解向量和矩阵运算的几何意义;同时探索空间——这个线性代数的概念基石,理解空间中的映射和变换的本质,深入学习矩阵在其中的灵魂作用;

第 08 部分:空间投影。这一部分我们将从空间投影的现象入手,很好的将理论和工程进行紧密的结合,掌握线性代数在近似与拟合中的理论基础,学习最小二乘法的原理与实际应用,并实践线性拟合、无解方程组的近似解问题;

第 09 部分:矩阵特征。这一部分是矩阵分析的核心重点,我们需要深刻领会矩阵相似性的几何意义以及特征值、特征向量的提取方法,用以打好数据降维的理论基础;

第 10 部分:数据降维。这一部分是整个线性代数知识脉络的交汇点,可以说是矩阵分析中最为精彩的地方,利用前三部分打下的良好概念基础,我们应该去深入的学习特征值分解和奇异值分解的方法,并利用这些工具进行数据的压缩和降维,实现对样本数据的主成分分析。

第三篇:微积分与最优化

第 11 部分:微分基础。这一部分从一元函数的导数和微分入手,迅速理清连续与可微、切线与导数等重要概念,巩固好核心基础,同时从切线的几何意义出发顺势引出微分的数值求法。在此基础上进一步讨论一元函数的泰勒近似,引导读者利用高阶导数基于有限的级数项在指定点对函数进行近似处理;

第 12 部分:多元分析。这一部分由一元过渡到多元函数,导数与微分的概念得以进一步全面和深化,引出了多元函数的极限、连续以及偏导数,并在多元微分的几何意义的基础上,讨论了多元函数的泰勒近似。同时从偏导数的几何意义出发,引出了这一部分最为重要的概念:多元函数的梯度向量和黑塞矩阵,探究梯度与函数值变化的重要关系,为优化方法的介绍打好基础。

第 13 部分:优化基础。这一部分讨论了最优化的概念基础,首先我们分析最优化问题的由来和背景,然后重点讨论函数极值存在的条件以及探索函数极值过程中常用的迭代法。

第 14 部分:多元极值。这一部分面向几个典型的实际算法,分别举了多元函数极值求取的一阶方法和二阶方法的典型例子,对许多材料当中耳熟能详、反复出现的梯度法、最速下降法以及牛顿法都进行了深入的介绍和完整的实现,综合了整个四部分内容,形成了微分与优化的完整知识闭环。

第四篇:概率图与随机过程

第 15 部分:模型中的单点——入手高斯分布:勾画概率模型核心概念:从最基础的单中心高斯分布入手展开,通过一维及多维高斯分布的形态、性质、由来及应用串联起随机变量、分布特征、参数估计、极大似然等核心概念,并分门别类的梳理典型的判别模型和生成模型。

第 16 部分:模型中的多点——混合模型与隐变量:EM的迭代探索:接着进入到概率模型中的“多点”,即以多中心高斯混合模型为例,由复杂模型中的隐变量所带来的参数估计困境,牵引出EM算法以及迭代探索的重要思想;

第 17 部分:模型中的线——剖析随机过程:一组变量观测:然后由点到线,介绍随机过程---即一组随机变量的呈现形式,主要介绍马尔科夫过程和高斯过程,并基于马尔科夫链的性质重点介绍统计推断中的随机近似方法;

第 18 部分:模型中的面——详解概率图模型:解构复杂概率关系:最后进入到概率模型中的面:反映随机变量复杂关联关系的概率图模型,深刻剖析概率图模型背后的概率原理,重点介绍四类典型概率图模型以及推断、学习与滤波等问题。

适宜人群

  • 对人工智能感兴趣的开发者
  • 想入门机器学习的初学者
  • 想加强数学基本功的读者

订阅须知

  • 本专栏为图文内容,共计 71 篇。
  • 本专栏为虚拟产品,一经付费概不退款,敬请谅解。
  • 本专栏可在 GitChat 服务号、App 及网页端 gitbook.cn 上购买,一端购买,多端阅读。

订阅福利

课程内容

数学——你与机器学习之间的距离

机器学习里,数学为什么很重要?

做机器学习数学基础系列专栏和大家一起共同交流学习,是我们准备了很久的一个计划。因为在当下,机器学习、人工智能领域吸引了许多同学投身其中,其中包含了大量非科班出身或者从其他行业切换赛道转行而来的朋友们,大家在学习的过程中发现学习曲线陡峭、难度较大,普遍的心声就是:机器学习难,首要就是数学知识需要的太多了

的确如此,机器学习是一个综合性强、知识栈长的学科,需要大量的前序知识作为铺垫,最核心、最基础的就是他的绝大多数算法模型和实际应用都依赖于以概率统计线性代数微积分为代表的数学理论和思想方法。

比方说吧:

  • 面对一个统计样本,你想估计出你感兴趣的参数,极大似然估计以及有偏性无偏性你能不掌握?如果不巧碰上包含隐变量的场景,EM迭代的思想你可是躲都躲不开;

  • 想进行语音识别?隐马尔可夫模型你不可不会;想对一句话进行词性标注?条件随机场你敢不懂?

  • 在进行贝叶斯推断的时候,如果对马尔科夫链蒙特卡洛方法等近似推断一无所知,可能一个复杂的概率分布就让你举步维艰;

  • 对时间序列进行预测,或许卡尔曼滤波、粒子滤波对你来说是一个好的选择;

  • 进行样本分类、聚类这些常规操作时,逻辑回归、高斯判别、高斯混合等各种模型都应该如数家珍;

  • 对高维数据进行降维分析,提取和聚焦他的主成分,背后就是线性代数中空间的概念和矩阵分解的技巧;

  • 想将待处理的数据在不同维度的空间中进行变换处理,以寻找到最佳的观测角度,使得数据处理达到最好的效果,矩阵的相似变换是不是得好好理解?

  • 想在不太影响观察效果的前提下,利用很小的存储空间就能近似的达到原有图像的视觉效果,利用矩阵进行图像的数字表示和变换处理是基础之中的基础;

  • 想理解神经网络的训练过程,想获取复杂函数的最值,离不开梯度的概念以及多元微分和优化方法;

因此,可以看出,数学基础是机器学习绕不开的一块阵地

机器学习里,这几门数学课各自扮演的角色?

围绕概率统计线性代数微积分这三大核心内容,我们推出了一套系列专栏,一共包含以下四大部分:

在进入到专栏大纲之前,我们首先来看看这四门专栏在机器学习中各自都扮演了什么样的角色,细致的梳理一下学科的内在逻辑。

第一:概率统计是利用数据发现规律、推测未知的思想方法

其实这和机器学习的目标是高度一致的。机器学习中的思想方法和核心算法大多是构筑在统计思维方法之上的。核心的概率思想和基础概念将围绕着条件概率、随机变量、随机过程、统计推断、概率图等内容展开,体现了概率统计在机器学习中的灵魂作用。

第二:线性代数是利用空间投射和表征数据的基本工具

他可以方便的对数据进行各种变换,从而让我们更直观清晰的挖掘出数据的主要特征和不同维度的信息。整个线性代数的主干内容是沿着空间变换这条主线,从构筑空间、近似拟合、相似矩阵、数据降维这四大板块,环环相扣的展开并呈现出与机器学习算法紧密结合的最核心内容。

第三:微积分与最优化是机器学习模型中问题最终解决的落地手段

当我们建立好算法模型之后,问题的最终求解往往都会涉及到优化问题,需要我们去探寻数据空间中的极值,这一切如果没有微分理论和计算方法作为支撑,任何漂亮的模型都无法落地。因此夯实多元微分的基本概念,掌握最优化的实现方法是问题最终解决的必经之路。

第四:概率图与随机过程直面机器学习应用实战,是概率基本理论的升华和综合应用

同学们在机器学习的实战应用中,将大量应用模型进行问题的描述和求解,这需要我们重点剖析机器学习算法应用中的核心概率图模型与随机过程思想方法,弥合概率统计基本概念与人工智能应用之间的巨大鸿沟,使读者能够理清典型算法应用背后所蕴藏的核心模型与重要统计思想。

大学学过数学,为什么不会用、用不好?

其实在大学阶段,大家都学过概率论、线性代数和微积分的课程,为什么到了机器学习领域需要使用他的时候,却难以支撑了呢?我感觉有以下几点原因,相信你也曾经感同身受。

第一,大学课程中的知识点并没有完全覆盖机器学习领域所需。 机器学习数学基础萌发于高等数学、线性代数和概率统计,但绝不仅仅满足于本科的教学内容,回想一下大学概率统计专栏内容包含了什么?事件的概率、随机变量及其分布、数字特征、参数估计与假设检验。差不多就这些,很重要,很核心,但似乎是远远不够的吧。事实上,我们还需要补充随机过程随机理论蒙特卡洛思想采样方法概率图等一些重要的基础知识,才能说知识结构相对完整。同样的,大学本科的线性代数中一般也不会介绍相似矩阵矩阵分解数据降维等重要内容,最优化的一些思想和应用在高等数学中也鲜有涉及。

第二,大学课程的学习重计算技巧,轻内在逻辑。 大家一定都有这种感觉,学习大学数学的时候,我们是不是一天到晚苦于去计算行列式、特征值;去求微分、求积分;去罗列很多种分布,然后算期望、算方差、算事件概率。这样的结果就是数学变成了算术,还是在不停的做程序一秒钟就能做的事儿。至于说知识背后的内在逻辑和应用方法,基本上是非常欠缺的,因此大家很容易考完就忘。

第三,大学学了数学,却不知道学了能干什么。几十年如一日的教学内容没能深刻挖掘学科与当下前沿技术的交汇点,使得同学们常常有这样的困惑:这门课学了之后有什么用?自然学完之后,很快也就还给老师了。同时大学开设的数学基础课目的是讲授基础理论,本来也不是为了给大家打牢机器学习的数学基础。所以如果大家不专门针对性的分清重点,强化相关重点内容的学习,自然觉得平铺直叙没有针对性。

这么一来,想以此打好机器学习的数学基础,恐非易事。

专栏的亮点与特色

那么,我们这个专栏和传统的数学教材有何不同呢?这里我想我们有必要来介绍一下他的特色:

首先,我们会集中力量紧紧围绕机器学习核心算法中所涉及到的数学知识展开介绍,做好精确打击。我们的讲解会结合好数学的本质内涵,用浅显易懂的语言讲透深刻的数学思想,构建起整个专栏理论体系;

然后,我们还会加强基础知识与算法、应用案例之间的联系。 我们在讲解数学内容的时候会注重延伸到后续的算法应用场景,将其进行相互关联,形成学以致用的实践导向;

同时,我们会运用好python工具,做好和工程应用的无缝对接。 整个专栏内容都以python语言为工具进行教学内容的实践,利用numpy、scipy、matplotlib、pandas等工具强化知识的理解、提升工作的效率;

重要的是,我们还十分重视专栏本身的写作技巧。 作者深入浅出的讲解技巧和逻辑严密的写作文风也将助你在充满挑战的学习道路上不断前进。

专栏作者简介

专栏的设计思路

那么,在我们的专栏里,会按照怎样的学习路径和方法去学好这些重要的内容呢?接下来,我们会按照概率统计、线性代数、微积分与最优化以及概率图与随机过程的顺序来安排专栏内容。

第一篇:概率统计

第01部分:概率思想。这一部分里,我们首先从条件概率和贝叶斯方法入手,阐明条件、独立、相关这些基本概念,掌握联合、边缘的计算方法,和大家一起构建起认知世界的概率思维体系。

第02部分:随机变量。这里,我们将重点介绍随机变量主干内容,从单一随机变量的分布过渡到多元随机变量的分析,最后重点围绕大数定理和中心极限定理,并初步接触蒙特卡洛方法,带领读者建立重要的极限思维。

第03部分:统计推断。这一部分我们关注的是如何从部分的样本集合中去推断出我们关心的总体特征,这在现实世界中的意义非常重要。在介绍参数估计的思想方法基础上,我们重点关注极大似然估计和贝叶斯估计这两种方法。

第04部分:随机过程。这一部分我们会关注由一组随机变量构成的集合,即:随机过程。股票的波动、语音信号、视频信号、布朗运动等都是随机过程在现实世界中的实例。我们在随机过程的基本概念之上,重点分析马尔科夫链,梳理由静到动的演变,探索变化的过程和不变的稳态。

第05部分:采样理论。这一部分重点关注如何获取服从目标分布的近似采样方法,从基本的接受-拒绝采样入手,逐渐深入到马尔科夫链-蒙特卡洛方法,在动态的过程中进一步深化对随机过程、随机理论与极限思想的理解。

第06部分:概率模型。这一部分介绍概率图模型中的一种典型模型:隐马尔科夫模型,熟悉状态序列的概率估计和状态解码的基本方法,为后续进一步拓展概率图模型的学习打好基础。

第二篇:线性代数

第07部分:构筑空间。这一部分我们将从空间坐标表示与线性变换入手,快速建立线性代数直观感受,理解向量和矩阵运算的几何意义;同时探索空间——这个线性代数的概念基石,理解空间中的映射和变换的本质,深入学习矩阵在其中的灵魂作用;

第08部分:空间投影。这一部分我们将从空间投影的现象入手,很好的将理论和工程进行紧密的结合,掌握线性代数在近似与拟合中的理论基础,学习最小二乘法的原理与实际应用,并实践线性拟合、无解方程组的近似解问题;

第09部分:矩阵特征。这一部分是矩阵分析的核心重点,我们需要深刻领会矩阵相似性的几何意义以及特征值、特征向量的提取方法,用以打好数据降维的理论基础;

第10部分:数据降维。这一部分是整个线性代数知识脉络的交汇点,可以说是矩阵分析中最为精彩的地方,利用前三部分打下的良好概念基础,我们应该去深入的学习特征值分解和奇异值分解的方法,并利用这些工具进行数据的压缩和降维,实现对样本数据的主成分分析。

第三篇:微积分与最优化

第11部分:微分基础。这一部分从一元函数的导数和微分入手,迅速理清连续与可微、切线与导数等重要概念,巩固好核心基础,同时从切线的几何意义出发顺势引出微分的数值求法。在此基础上进一步讨论一元函数的泰勒近似,引导读者利用高阶导数基于有限的级数项在指定点对函数进行近似处理;

第12部分:多元分析。这一部分由一元过渡到多元函数,导数与微分的概念得以进一步全面和深化,引出了多元函数的极限、连续以及偏导数,并在多元微分的几何意义的基础上,讨论了多元函数的泰勒近似。同时从偏导数的几何意义出发,引出了这一部分最为重要的概念:多元函数的梯度向量和黑塞矩阵,探究梯度与函数值变化的重要关系,为优化方法的介绍打好基础。

第13部分:优化基础。这一部分讨论了最优化的概念基础,首先我们分析最优化问题的由来和背景,然后重点讨论函数极值存在的条件以及探索函数极值过程中常用的迭代法。

第14部分:多元极值。这一部分面向几个典型的实际算法,分别举了多元函数极值求取的一阶方法和二阶方法的典型例子,对许多材料当中耳熟能详、反复出现的梯度法、最速下降法以及牛顿法都进行了深入的介绍和完整的实现,综合了整个四部分内容,形成了微分与优化的完整知识闭环。

第四篇:概率图与随机过程

第15部分:模型中的单点——入手高斯分布:勾画概率模型核心概念:从最基础的单中心高斯分布入手展开,通过一维及多维高斯分布的形态、性质、由来及应用串联起随机变量、分布特征、参数估计、极大似然等核心概念,并分门别类的梳理典型的判别模型和生成模型。

第16部分:模型中的多点——混合模型与隐变量:EM的迭代探索:接着进入到概率模型中的“多点”,即以多中心高斯混合模型为例,由复杂模型中的隐变量所带来的参数估计困境,牵引出EM算法以及迭代探索的重要思想;

第17部分:模型中的线——剖析随机过程:一组变量观测:然后由点到线,介绍随机过程---即一组随机变量的呈现形式,主要介绍马尔科夫过程和高斯过程,并基于马尔科夫链的性质重点介绍统计推断中的随机近似方法;

第18部分:模型中的面——详解概率图模型:解构复杂概率关系:最后进入到概率模型中的面:反映随机变量复杂关联关系的概率图模型,深刻剖析概率图模型背后的概率原理,重点介绍四类典型概率图模型以及推断、学习与滤波等问题;

专栏大纲

最后,朋友们可以快速的浏览一下专栏大纲,了解一下专栏的主干内容。

avatar

让我们一起开始这段学习旅程

万丈高楼平地起,希望这个专栏能够陪伴大家走好机器学习实践与学习的最初时光,帮助大家梳理清纷繁复杂的知识网络,构筑好算法模型的数学基础,更重要的是能和大家一起逐渐形成一种思维习惯:源于理论,我们条分缕析;面向实践,我们学以致用。有了扎实的数学理论和方法基础,相信同学们都能登高望远、一往无前。

理论基石:条件概率、独立性与贝叶斯

从概率到条件概率

条件概率的发生背景

从这一篇开始,我们就正式进入到概率统计的内容板块中了。

对于概率,相信大家都不会陌生,在各阶段的数学课上,它都是高频出现的常客,最简单的概率场景比如掷骰子:第一次掷出的点数为 $5$ 的概率为多大?你会毫不犹豫的说出答案:$\frac{1}{6}$。

这太简单了。接下来我增加一个限定条件:已知在抛出骰子是奇数的情况下,抛掷点数为 $5$ 的可能性有多大?

发现了没有,在第二个问题中我就没有直接的只问投掷出 $5$ 这个事件的概率,而是增加了一个前提条件:这次抛掷出的点数为奇数。

生活中这类场景更多,我们一般不会直接去推断一个事件发生的可能性,因为这样实际意义并不明显,而且也不容易推断出结果。比如我问你今天下雨的概率是多大?你可能是一头雾水,什么地点?什么月份?当日云层的厚度?这些条件都没有提供,这样是无法给出一个有意义、有价值的合理推断的。

而且在实际情况下,一个事件一般而言也不会是孤立的发生,它会伴随着其他事情一同出现,单独谈一个事件的概率,一般而言也是不存在的。

因此,在实际的应用中,我们更关心的是条件概率,也就是在给定部分信息的基础上对试验结果的推断。这些给定的信息就是我们附加的条件,是我们研究时关注的重点。

条件概率的具体描述

这里,我们来具体描述一下条件概率:

假设我们知道给定事件 $B$ 已经发生,在此基础上希望知道另一个事件 $A$ 发生的可能性,此时我们就需要构造出 条件概率,它需要先顾及事件 $B$ 已经发生的信息,然后再求出事件 $A$ 发生的概率。

这个条件概率描述的就是在给定事件 $B$ 发生的情况下,事件 $A$ 发生的概率,我们专门把它记作:$P(A|B)$。

那我们回到投掷骰子的问题中来,在投出奇数点数骰子的前提下,投出 $5$ 的概率有多大?奇数点数一共有 ${1,3,5 }$ 三种,其中出现 $5$ 的概率是 $\frac{1}{3}$。很明显,和单独问投出点数是 $5$ 的概率计算结果是不同的。

下面我们来抽象一下条件概率的场景。

我们再回到最简单、最容易理解的情景下来看,即在古典概率的模式下来分析:假定一个试验有 $N$ 个等可能的结果,事件 $A$ 和 $B$ 分别包含 $M1$ 个和 $M2$ 个结果,这其中有 $M_{12}$ 个结果是公共的,这就是同时发生事件 $A$ 和事件 $B$,即 $A\cap B$ 事件所包含的试验结果数。

形象的描述一下上述场景,如图所示:

图1.事件发生的描述

那我问你,单纯的发生事件 $A$ 和事件 $B$ 的概率是多少?你肯定会脱口而出,分别是 $\frac{M1}{N}$ 和 $\frac{M2}{N}$,那进一步到条件概率中来,已知在事件 $B$ 发生的前提条件下,事件 $A$ 发生的概率是多少?

此时,我们的整体考虑范围由最开始的 $N$ 个全部的可能结果局限到现在的 $M2$ 个结果,即 $B$ 事件发生的结果范围,而这其中只有 $M{12}$ 个结果对应事件 $A$ 的发生,那么我们不难计算出,条件概率 $P(A|B)=\frac{M{12}}{M2}$ 。

条件概率的表达式分析

为了更加深入地挖掘这里面的内涵,我们进一步对条件概率的表达式 $P(A|B)=\frac{M{12}}{M2}$ 进行展开:

$$P(A|B)=\frac{M{12}}{M2}=\frac{(M{12}/N)}{(M2/N)}=\frac{P(AB)}{P(B)}$$

由此,我们得到了条件概率的一般定义:$P(A|B)=\frac{P(AB)}{P(B)}$。

两个事件的独立性

我们在上面的例子中,进一步进行分析,我们发现事件 $A$ 的无条件概率 $P(A)$ 与其在给定事件 $B$ 发生下的条件概率 $P(A|B)$ 显然是不同的,即 $P(A|B)\neq P(A)$ ,而这也是非常普遍的一种情况,这两个概率值一般都存在着差异。

其实,这反映了两个事件之间存在着一些关联,假如满足 $P(A|B)>P(A)$,则可以说事件 $B$ 的发生使得事件 $A$ 的发生可能性增大了,即事件 $B$ 促进了事件 $A$ 的发生。

但是如果 $P(A)=P(A|B)$ 呢,这种情况也是存在的,而且这是一种非常重要的情况,它意味着事件 $B$ 的发生与否对事件 $A$ 发生的可能性毫无影响。这时,我们就称 $A$ , $B$ 这两个事件独立,并由条件概率的定义式进行转换可以得到:

$$P(A|B)=\frac{P(AB)}{P(B) } \Rightarrow $$$$P(AB)=P(A|B)P(B)=P(A)P(B)$$

实际上,我们拿这个式子来刻画独立性,比单纯使用表达式 $P(A)=P(A|B)$ 要更好一些,因为 $P(AB)=P(A)P(B)$ 这个表达式不受概率 $P(B)$ 是否为 $0$ 的因素制约。

由此我们说,如果 $A$ 和 $B$ 两个事件满足 $P(AB)=P(A)P(B)$,则称事件 $A$ 和事件 $B$ 独立。

从条件概率到全概率公式

首先我们假设 $B1,B2,B3,…,Bn$ 为有限个或无限可数个事件,它们之间两两互斥且在每次试验中至少发生其中一个,我们用图直观的表示如下:

图2.事件两两互斥且每次实验至少发生其中一个

我们用表达式描述上面这幅图的含义就是:

$BiBj=\phi$

$B1+B2+B3…+Bn=\Omega$

现在我们接着引入另一个事件 $A$,如下图所示:

图3.引入新的事件A

很明显,因为 $\Omega$ 是一个必然事件(换句话说就是事件全集),因此有 $P(A)=P(A \Omega )$,进一步进行推导有:

$P(A)=P(A\Omega)=P(AB1+AB2+AB3+…+ABn)$

因为事件 $Bi,Bj$ 两两互斥,显然 $AB1,AB2,AB3,…,ABn$ 也两两互斥,因此就有:

$$P(A)=P(AB1)+P(AB2)+P(AB3)+…+P(ABn)$$

再由条件概率公式 $P(ABi)=P(Bi)P(A|B_i)$ 进行代入,将上式转换得到:

$$P(A)=P(B1)P(A|B1)+P(B2)P(A|B2)$$$$+…+P(Bn)P(A|Bn)$$

这就是我们最终得到的全概率公式,“全”字的意义在于:全部的概率 $P(A)$ 被分解成了许多的部分概率之和。

我们再次回过头来看看全概率公式的表达式,我们从式子里可以非常直观的发现:事件 $A$ 的概率 $P(A)$ 应该处于最小的 $P(A|Bi)$ 和最大的 $P(A|Bj)$ 之间,它不是所有条件概率 $P(A|Bk)$ 的算术平均,因为它们各自被使用的机会(即 $P(Bi)$)各不相同。因此全概率 $P(A)$ 就是各 $P(A|Bk)$ 以 $P(Bk)$ 为权的加权平均值。

全概率公式的实际价值在于,很多时候,我们直接去计算事件 $A$ 的概率是比较困难的。但是如果条件概率 $P(A|B_k)$ 是已知的,或很容易被我们推导计算时,全概率公式就成了计算概率 $P(A)$ 的很好的途径。

聚焦贝叶斯公式

贝叶斯公式概述

了解了全概率公式之后,我们可以进一步的处理条件概率的表达式,得到下面这个式子:

$$P(Bi|A)=\frac{P(ABi)}{P(A)}=\frac{P(Bi)P(A|Bi)}{P(A)}$$

$$=\frac{P(Bi)P(A|Bi)}{P(B1)P(A|B1)+P(B2)P(A|B2)+…+P(Bn)P(A|Bn)}$$

这就是大名鼎鼎的贝叶斯公式。

这个式子你千万不要觉得它平淡无奇,觉得仅仅只是数学式子的推导和罗列。这一个公式里包含了全概率公式、条件概率、贝叶斯准则,我们来挖掘一下里面所蕴藏的最重要的内涵:

贝叶斯公式将条件概率 $P(A|B)$ 和条件概率 $P(B|A)$ 紧密的联系了起来,其最根本的数学基础就是因为 $P(A|B)P(B)=P(B|A)P(A)$,它们都等于 $P(AB)$。

那这里面具体的深刻内涵是什么呢?我们接着往下看。

本质内涵:由因到果,由果推因

现实中,我们可以把事件 $A$ 看成是结果,把事件 $B1,B2,…,B_n$ 看成是导致这个结果的各种可能的原因。

那么,我们所介绍的全概率公式

$P(A)=P(B1)P(A|B1)+$$P(B2)P(A|B2)+…+P(Bn)P(A|Bn)$

就是由各种原因推理出结果事件发生的概率,是由因到果

但是,更重要、更实际的应用场景是,我们在日常生活中常常是观察到某种现象,然后去反推造成这种现象的各种原因的概率。简单点说,就是由果推因

贝叶斯公式 $P(Bi|A)=\frac{P(ABi)}{P(A)}=\frac{P(Bi)P(A|Bi)}{\sum{j}{P(Bj)P(A|Bj)}}$,最终求得的就是条件概率 $P(Bi|A)$,就是在观察到结果事件 $A$ 已经发生的情况下,我们推断结果事件 $A$ 是由原因 $B_i$ 造成的概率的大小,以支撑我们后续的判断。

那么我们可以说,单纯的概率 $P(B_i)$ 我们叫做先验概率,指的是在没有别的前提信息情况下的概率值,这个值一般需要借助我们的经验估计得到。

而条件概率 $P(Bi|A)$,我们把它叫做是 后验概率,它代表了在获得了信息 $A$ 之后 $Bi$ 出现的概率,可以说后验概率是先验概率在获取了新信息之后的一种修正。

贝叶斯公式的应用举例

比如,贝叶斯公式应用的一个常见例子就是 $X$ 光片的病理推断案例,在某个病人的 $X$ 光片中,医生看到了一个阴影,这就是结果事件 $A$,我们希望对造成这个结果的三种可能原因(原因 1:恶性肿瘤;原因 2:良性肿瘤;原因 3:其他原因)进行分析判断,推断分属于各个原因的概率,如图所示:

图4.X光片阴影原因举例

例如,我们想求出原因是恶性肿瘤的概率,也就是求条件概率:$P(B_1|A)$ 的值。

我们只要知道在这三种原因下出现阴影的概率,也就是 $P(A|B1)$,$P(A|B2)$,$P(A|B3)$,以及三种原因的先验概率:$P(B1)$,$P(B2)$,$P(B3)$,就能通过贝叶斯公式

$P(B1|A)=$$\frac{P(B1)P(A|B1)}{P(B1)P(A|B1)+P(B2)P(A|B2)+P(B3)P(A|B_3)}$

求得,而上述这些需要我们知道的值,基本上都可以通过历史统计数据得到。

全文思路梳理

这一小节里,我们从概率到条件概率,再到全概率公式,最终聚焦到贝叶斯公式,从概念的层面一路梳理过来,目的是帮助大家迅速形成一套以条件概率为基石的认识世界的视角。理解条件概率的重要性不言而喻,这个概念将贯穿我们整个概率统计专栏体系。

[help me with MathJax]

事件的关系:深入理解独立性

重新梳理两个事件的独立性

在上一篇中,我们引入了条件概率 $P(A|B)$ 这个重要概念,何谓条件概率?条件概率的核心就是刻画了事件 $B$ 的发生给事件 $A$ 是否发生所带来的额外信息。

在所有的条件概率情况当中,我们注意到一个有趣且重要的特殊情况,那就是事件 $B$ 的发生并没有给事件 $A$ 的发生带来什么新的额外信息。换言之,事件 $B$ 的发生与否,并没有影响到事件 $A$ 发生的概率,换句话说就是 $P(A|B)=P(A)$ 所表达的意思。

此时,我们称事件 $A$ 是独立于事件 $B$ 的,并由条件概率公式 $P(A|B)=\frac{P(A\cap B)}{P(B)}$ 可以进一步推导出等价的表达式:$P(A\cap B)=P(A)P(B)$。

到这里,就是我们所回顾的上一篇中谈论到的两个事件相互独立的核心概念。

不相容与独立性

我们首先看看下面这幅图中所描述的情况:

图1.事件相容的示意图

在图中,表示事件 $A$ 和事件 $B$ 的两个圆圈互不相交,即意味着两个事件不相容,你会不会直观的感觉到,事件 $A$ 和事件 $B$ 二者看上去没啥关系,二者就是相互独立的?

这个说法看似很有道理,然而事实上却恰巧相反。若事件 $A$ 和事件 $B$ 互不相容,并且像图中所描述的,能够保证两个事件发生的概率:$P(A)>0$ 且 $P(B)>0$ 成立,则他们永远不会相互独立。

这是为什么呢?我们直接抠定义就好了。这是因为:首先有 $A\cap B=\phi$,那么显然有联合概率 $P(A\cap B)=0$,而由于 $P(A)$ 和 $P(B)$ 均大于 $0$,则有 $P(A)P(B)\neq0$ 。因此,从 $P(A\cap B) \neq P(A)P(B)$ 的结果来看,并不满足事件 $A$ 和事件 $B$ 相互独立的基本条件。

其实,这个结果从常理上来说我们也很好理解,由于事件 $A$ 和事件 $B$ 不相容,从图中可以看出,如果事件 $B$ 发生,则意味着事件 $A$ 一定不会发生,那么这就实际上说明了:事件 $B$ 的发生就给事件 $A$ 的发生引入了额外的信息。那么,二者显然就不是互相独立的了。

条件独立

条件独立的直观感受

我们在前面讨论了条件概率的内容,自然的直觉告诉我们,我们也应该在条件概率的框架之下来讨论事件之间的独立性,即探讨条件独立的概念。

条件独立的概念其实和独立的概念在本质上并没有太大的区别,无非是在进行事件 $A$ 和事件 $B$ 讨论的基础上,引入了另外一个前提条件:事件 $C$。即在给定事件 $C$ 发生的前提条件之下,若事件 $A$ 和事件 $B$ 满足等式:$P(A\cap B|C)=P(A|C)P(B|C)$ 成立,我们就说事件 $A$ 和事件 $B$ 在给定事件 $C$ 的前提之下条件独立。这是不是和独立性的定义基本上差不多呢?

条件独立的表达式

同样的,我们先对 $P(A\cap B|C)$ 这个式子进行简单的变形处理:

$$P(A\cap B|C)=\frac{P(A\cap B\cap C)}{P(C)}$$$$=\frac{P(C)P(B|C)P(A|B\cap C)}{P(C)}$$$$=P(B|C)P(A|B\cap C)$$

其实,在短短这几步的推导里面,涉及到了不少的知识内涵,我们下面来一一解析。

首先,我们依照条件概率的定义,可以得到第一步推导结果:

$$P(A\cap B|C)=\frac{P(A\cap B\cap C)}{P(C)}$$

而第二个推导的等式,则是在条件概率应用领域当中使用非常广泛的链式法则:

$$P(A\cap B\cap C)=P(B\cap C)P(A|B\cap C)$$$$=P(C)P(B|C)P(A|B\cap C)$$

最后,我们结合 $P(A\cap B|C)=P(B|C)P(A|B\cap C)$ 这个等式和条件独立的定义式 $P(A\cap B|C)=P(A|C)P(B|C)$,会发现他们拥有相同的等式左侧。因此将两个等式的右侧划上等号,就可以得到:$P(B|C)P(A|B\cap C)=P(A|C)P(B|C)$

最终我们就获得了这么一个等式:$P(A|B\cap C)=P(A|C)$

这个等式是条件独立的另一个等价定义,也是非常直观的一个等式。这个等式说明了在给定事件 $C$ 发生的前提条件下,进一步假定此时如果事件 $B$ 也发生,并不会影响事件 $A$ 的发生概率(当然这里是指在事件 $C$ 发生前提下,事件 $A$ 发生的条件概率)。

简单点说,就是在事件 $C$ 发生的总的前提条件下,事件 $B$ 是否发生,不影响事件 $A$ 发生的概率。其实这就又回到了条件概率定义的源头上去了。

独立与条件独立

这里,我们停下来仔细思考一个重要的概念问题,就是事件 $A$ 和事件 $B$ 相互独立和在事件 $C$ 发生的基础上条件独立是不是等价的呢?直观上看觉得似乎应该能,但是事实上呢?我们看看下面这个例子:

我们举一个非常简单的例子。

假设依次抛掷两枚均匀的硬币,事件 $A$ 表示第一枚硬币正面向上,事件 $B$ 表示第二枚硬币正面向上。

首先,事件 $A$ 和事件 $B$ 肯定是相互独立的。那我们此时引入一个条件事件 $C$,事件 $C$ 表示两次试验的结果不同。那么显然,概率 $P(A\cap B|C)=0$ 因为在两次试验结果不同的前提条件下,压根不可能发生两次都是正面的情况。

而另一方面呢?显然两个单独的条件概率 $P(A|C) \neq0$,$P(B|C)\neq0$,因此 $P(A\cap B|C)\neq P(A|C)P(B|C)$,也就是说事件 $A$ 和事件 $B$ 不满足事件 $C$ 发生下的条件独立的要求。

这个例子非常明确的说明了,独立和条件独立并不等价。

一组事件的独立性

最后,我们将两个事件相互独立的概念进一步推广到多个事件之间的相互独立性。为了方便我们直观理解,这里我们先将多个事件约定为 3 个,讨论清楚了 3 个事件独立的情况之后,其他的情况自然而然就迎刃而解了。

关于事件 $A1$、$A2$、$A_3$,这 3 个事件满足相互独立的条件归结为以下 4 条:

$P(A1\cap A2)=P(A1)P(A2)$

$P(A1\cap A3)=P(A1)P(A3)$

$P(A2\cap A3)=P(A2)P(A3)$

$P(A1\cap A2\cap A3)=P(A1)P(A2)P(A3)$

首先我们看到,前面的三个等式说明了任意两个事件之间是相互独立的,这种性质称之为两两独立。但是这并没有结束,第四个条件也是必要的,他并不是前面三个等式的推论,他无法仅仅通过前面三个条件成立就能得到。反过来,第四个条件成立也不能推导出前面三个条件的成立。

简单点说吧,就是上面这四个条件必须全部检验、全部满足,才能够说这三个事件之间满足独立性。

还是用上面那个抛硬币的那个例子,事件 $A$ 表示第一枚硬币正面向上,事件 $B$ 表示第二枚硬币正面向上,事件 $C$ 表示两次试验的结果不同。

首先事件 $A$ 和事件 $C$ 显然满足:$P(C)=P(C|A)=\frac{1}{2}$,即事件 $A$ 和事件 $C$ 独立,同理可知事件 $B$ 和事件 $C$ 独立,同时我们知道事件 $A$ 和事件 $B$ 也满足独立性。

但是到目前为止,即便前三个条件都满足了,此时第四个等式仍然不能满足:即 $P(A\cap B \cap C)=0$,$P(A)P(B)P(C)=\frac{1}{8}$,这两个等式并不相等。

最后由特殊到一般,我们来概况一下任意个数的一组事件之间相互独立应该满足的条件:

$P(\bigcap{i\in S}Ai)=\prod{i\in S}P(Ai)$ 对 ${1,2,…,n}$ 的任意子集 $S$ 都成立,则称 $A1,…,An$ 为相互独立的事件。

脱离开上面形式化的公式,实际上,我们可以更加直观的来理解一组事件的独立性。通过对比,其实不难发现他的背景与两个事件的独立性是一样的。一组事件满足独立性意味着下面一个事实:我们把一组事件任意的分成两个小组,一个小组中的任意个数事件的出现与不出现,都不会给另一个小组中事件的发生与否带来任何额外的信息。

独立重复试验

在介绍完了事件独立性的基础上,我们再来简单的提一下大家耳熟能详的独立重复试验

如果某一个试验由一系列独立并且相同的小试验组成,我们称这种试验为独立重复试验。当每个小试验只有两种可能结果的时候,就是我们最为常见的伯努利试验。

这里最简单的例子就是抛硬币。例如,连续 $n$ 次独立地抛掷硬币,每次抛掷的结果为正面的概率记作 $p$。这里的独立指得就是每次试验的事件 $A1,A2,…,An$ 都是独立的,其中 $Ai$ 表示第 $i$ 次抛掷的结果为正面。独立性就意味着不管前面的抛掷结果如何,每次抛掷得到正面的概率都是 $p$。

因此最终我们可以知道,在 $n$ 次试验中,有 $k$ 次试验结果为正面的概率为:

$$p(k)=\begin{pmatrix} n\ k \end{pmatrix}p^k(1-p)^{n-k}$$

当然这个例子本身非常简单,大家也都非常熟悉,这里只是为了再强调一下独立的含义,演示一个独立重复试验的过程。独立重复试验的概念和场景将在我们后面的课程内容中反复多次出现。

[help me with MathJax]

空间:从向量和基底谈起

向量基础概念回顾

向量的几何含义

向量对于大家而言一定不陌生,它的概念很简单,把数字排成一行或一列就是向量。它是描述空间的有力工具。

比如二维向量:$\begin{bmatrix} 4\5 \end{bmatrix}$,它有两个成分:第一个成分是 4,第二个成分是 5。一方面,我们可以把它理解成二维平面中 x 坐标为 4,y 坐标为 5 的一个点,也可以理解为以平面原点 (0,0) 为起点,到目标终点 (4,5) 的有向线段,如图 1 所示:

图1.二维向量的表示

由此可见,向量中成分的个数就是向量的维数。因此,我们进一步推广下去,还会有三维向量,如:$\begin{bmatrix} 3\2\4 \end{bmatrix}$,它用来表示三维空间中的一个点,或者在三维空间中以原点 (0,0,0) 为起点,到目标终点 (3,2,4) 的有向线段,如图 2 所示。当然,以此类推还有更高维的向量。

图2.三维向量的表示

充当数据的载体

当然,向量不仅仅局限于描述空间中的点坐标和有向线段,它也可以作为描述事物属性的数据载体。比如一次考试中你的成绩为:语文 85 分、数学 92 分、外语 89 分。由于这三门课分属于你的不同科目属性,因此我们可以使用一个三维向量对其进行表示:

$$score= \begin{bmatrix} 85\92\89 \end{bmatrix}$$

又如,在自然语言处理中,程序在进行文本阅读时,首先就会进行文本分词,然后使用向量进行表示。这是因为向量很适合在高维空间中进行表达和处理。在本书后续内容中将接触到的投影、降维等概念,都是在向量的基础上实现的。

注意:我们一般使用列向量

根据刚才我们所讲的,把数字排成一行或一列就是向量。因此向量拥有两种表达方式:像 $\begin{bmatrix} 4\5 \end{bmatrix}$、$\begin{bmatrix} -4\15\6.7 \end{bmatrix}$ 这种元素竖排的,称为列向量,对应的元素横排的称为行向量,比如:$\begin{bmatrix} 4&5&7 \end{bmatrix}$。

我们在实际使用向量工具进行描述和计算的时候,具体使用哪一种方式呢?在没有特殊说明的情况下,我们提到向量,都是默认为列向量。在文字排版的时候,由于列向量比较占空间,也可以将其写成行向量的转置:

$$\begin{bmatrix} -4&15&6.7 \end{bmatrix}^{T}$$

如果我们从直觉上来看,似乎行向量更为直观,这里为什么如此偏爱列向量呢?这么做主要是为了方便后续的向量坐标变换、映射等计算。这里只简单提一句,大家有个直观印象就好:

将一个矩阵 A 所表示的线性映射作用于某向量 x 时,我们习惯于将其写成矩阵乘以向量的形式——Ax,而这种写法的运算基础便是:x 是一个列向量。

这里一下子堆上来好几个概念,比如转置、矩阵、线性变换等等,都先不急着展开,后面会一一详细描述。这里就请先记住:一般我们都用列的形式来表示向量。

向量的 Python 表示

表示成行向量

对应地,我们如何用 Python 来表示行向量和列向量呢?这里我们需要使用 NumPy 工具包。

代码片段:

import numpy as npA = np.array([1,2,3,4])print(A)

运算结果:

[1 2 3 4]

Python 中用 NumPy 库来生成一个向量,默认生成的是行向量,但正如我们上面所说的,一般情况下我们通常使用的是列向量,因此还需要对其做一些处理。

你的第一感觉可能会想,用一用转置这个概念(后面会详细讲解)是不是就可以了,也就是把向量的行索引和列索引交换位置,但是 NumPy 中的转置方法在一维向量里是无效的。

代码片段:

import numpy as npA = np.array([1,2,3,4])print(A.transpose())

运行结果:

[1 2 3 4]

我们发现,确实没有起到效果。

如何表示列向量

那我们应该如何来表示一个列向量呢?

这里我们要事先用一点后面的知识,我们把向量看作是一维的数组,但是也可以看做是行为 1 或者列为 1 的二维数组,用后面的内容来描述,即向量可以看作是特殊的矩阵。行向量是 $1\times m$ 的矩阵,列向量是 $n\times 1$ 的矩阵,我们用这个视角重新生成一个新的行向量和列向量。

代码片段:

import numpy as npA = np.array([[1, 2, 3]])print(A)print(A.T)

运行结果:

[[1 2 3]][[1] [2] [3]]

在这段代码里,我们要注意:行向量初始化时,我们使用了 NumPy 库中的二维向量初始化方法,因此多嵌套了一层中括号,在这种情况下,我们就可以直接通过行向量转置的方法,来生成对应的列向量了。

运用向量进行运算

明确了向量的表示方法,那么接下来我们来梳理一下向量的基本运算,我们逐一介绍向量的加法、向量的数量积和向量间的乘法。

向量的加法

两个维数相同的向量才能进行加法运算,将相同位置上的元素相加即可,结果向量的维数保持不变:

$$\begin{bmatrix} u1&u2&u3 \end{bmatrix} ^{T} + \begin{bmatrix} v1&v2&v3 \end{bmatrix} ^{T} =$$$$\begin{bmatrix} u1+v1&u2+v2&u3+v3 \end{bmatrix} ^{T}$$

向量的加法运算很简单,我们具体来举个例子:

代码片段:

import numpy as npu = np.array([[1,2,3]]).Tv = np.array([[5,6,7]]).Tprint(u + v)

运行结果:

[[ 6] [ 8] [10]]

向量的数量乘法

向量的数量乘法就是将参与乘法运算的数和向量的每个元素分别相乘,结果向量保持维数不变,数量乘法就是将向量沿着所在直线的方向拉长到相应的倍数,方向和参与运算的数字的正负号相关:

$$c\begin{bmatrix} u1&u2&u3 \end{bmatrix} ^{T} =\begin{bmatrix} cu1&cu2&cu3 \end{bmatrix} ^{T}$$

代码片段:

import numpy as npu = np.array([[1, 2, 3]]).Tprint(3*u)

运行结果:

[[3] [6] [9]]

向量的内积

介绍完向量的加法和数量乘法,这里大家一定会问了,那向量和向量相乘呢?向量与向量的乘法分为所谓的点乘(内积)叉乘(外积),我们先说内积。

向量 u 和向量 v 的内积定义如下:

$$u\cdot v= \begin{bmatrix} u1&u2&u3 \end{bmatrix} ^{T}\cdot \begin{bmatrix} v1&v2&v3 \end{bmatrix} ^{T} $$$$= u1v1+u2v2+u3v3$$

这个定义看上去很简单,好像没什么特殊含义。但是,它的另一种表示方法所含的物理意义就十分清晰:$u\cdot v=\left| u \right|\left| v \right|cos\theta$,如图 3 所示:

图3.向量内积的几何表示

即:向量 u 在向量 v 方向上的投影长度乘上向量 v 的模长,换句话说,如果 v 是单位向量的话,就可以直接描述为 u 在 v 方向上的投影长度。

需要注意的是,我们在实际计算向量内积时,无论是行向量间的内积还是列向量间的内积,其运算结果都是一样的。

Python 中计算向量的内积非常方便。但是需要注意,如果我们直接使用 NumPy 函数库中的内积方法 dot,那么 Python 内积运算函数 dot 中的参数要求必须是一维行向量:

代码片段:

import numpy as npu = np.array([3, 5, 2])v = np.array([1, 4, 7])print(np.dot(u, v))

运行结果:

37

那么有人可能会问了,在上文中我们学习了表示行列向量的通用方法(即用行或列为 1 的二维数组表示向量),用在这里行不行?我们可以看看:

代码片段:

import numpy as npu = np.array([[3, 5, 2]])v = np.array([[1, 4, 7]])print(np.dot(u,v))

运行结果:

Traceback (most recent call last):  File "D:/code/test/test.py", line 5, in <module>    print(np.dot(u, v))ValueError: shapes (1,3) and (1,3) not aligned: 3 (dim 1) != 1 (dim 0)

代码片段:

import numpy as npu = np.array([[3, 5, 2]]).Tv = np.array([[1, 4, 7]]).Tprint(np.dot(u,v))

运行结果:

Traceback (most recent call last):  File "D:/code/test/test.py", line 5, in <module>    print(np.dot(u,v))ValueError: shapes (3,1) and (3,1) not aligned: 1 (dim 1) != 3 (dim 0)

看上去似乎有些问题,学完后面几篇内容大家就会知道,这种向量的表示方法本质上其实是矩阵,只不过是行数或者列数为 1 的特殊矩阵,将这种方法表示下的向量作为 dot 函数的参数,就需要依据矩阵的乘法法则来计算,依据矩阵乘法法则判定就会报错,至于为什么会出错,后面的小节会重点讲述,那么怎么样才能得到正确的结果呢,这里先提前预告一下:

代码片段:

import numpy as npu = np.array([[3, 5, 2]])v = np.array([[1, 4, 7]]).Tprint(np.dot(u,v))

运行结果:

[[37]]

看上去得到了一个正确的数值结果,至于为什么外面围着两层中括号,同样的,看完后面的内容就会明白。

向量的外积

我们只讨论二维平面和三维空间中的向量外积,在二维平面中:

$$u\times v= \begin{bmatrix} u1&u2 \end{bmatrix} ^{T}\times \begin{bmatrix} v1&v2 \end{bmatrix} ^{T} $$$$= u1v2-u2v1$$

同样地,还有另一种表达式,看起来物理意义会更直观一些:$u\cdot v=\left| u \right|\left| v \right|sin\theta$,如图 4 所示。这表示两个向量张成的平行四边形的面积,当然,这里的面积要打引号,因为如果两个向量的夹角大于 180°,则结果为负。

图4.向量外积的几何表示

代码片段:

import numpy as npu = np.array([3, 5])v = np.array([1, 4])print(np.cross(u, v))  

运行结果:

7

而在三维空间中,外积的计算要相对复杂一些,其计算的结果是一个向量而不是一个数值。

$u\times v= \begin{bmatrix} u1&u2&u3 \end{bmatrix} ^{T}\times \begin{bmatrix} v1&v2&v3 \end{bmatrix} ^{T} = $$\begin{bmatrix} u2v3-u3v2&u3v1-u1v3&u1v2-u2v1 \end{bmatrix} ^{T}$

这个向量也是有物理含义的,即两个向量所表示平面的法向量。

代码片段:

import numpy as npx = np.array([3, 3, 9])y = np.array([1, 4, 12])print(np.cross(x, y))

运行结果:

[  0 -27 9]

向量的线性组合

在向量加法和数量乘法的基础上,我们将其组合应用,就过渡到向量的线性组合相关内容。针对向量 u 和 v,我们先求数字 c 和向量 u 的数量积,再求数字 d 和向量 v 的数量积,最后将二者叠加,就得到了 u 和 v 的线性组合 cu+dv,这里 c 和 d 可以取任意值(包括 0 )。

我们再举一个三个三维向量线性组合的例子:

$$u=\begin{bmatrix} u1\u2\u3 \end{bmatrix},v=\begin{bmatrix} v1\v2\v3 \end{bmatrix},w=\begin{bmatrix} w1\w2\w_3 \end{bmatrix}:$$

$$cu+dv+ew = c\begin{bmatrix} u1\u2\u3 \end{bmatrix} +d\begin{bmatrix} v1\v2\v3 \end{bmatrix} $$$$+e\begin{bmatrix} w1\w2\w3 \end{bmatrix}=\begin{bmatrix} cu1+dv1+ew1\cu2+dv2+ew2\cu3+dv3+ew3 \end{bmatrix}$$

其中,c、d、e 可以取包含 0 在内的任意值。

在这里,我们也举个例子来对几个已知的向量进行线性组合:

代码片段:

import numpy as npu = np.array([[1, 2, 3]]).Tv = np.array([[4, 5, 6]]).Tw = np.array([[7, 8, 9]]).Tprint(3*u+4*v+5*w)

运行结果:

[[54] [66] [78]]

那么进一步,我们思考一下下面几个线性组合的图像。

我们知道,两个向量相加,在几何上就是将两个向量首尾依次连接,结果向量就是最初的起点和最终的终点的有向连线。我们假定有三个非零的三维向量:

$$u=\begin{bmatrix} u1\u2\u3 \end{bmatrix},v=\begin{bmatrix} v1\v2\v3 \end{bmatrix},w=\begin{bmatrix} w1\w2\w_3 \end{bmatrix}$$

我们讨论它们的线性组合。

情况一,cu 的所有线性组合的图像:

  • 由于 c 可以取 0,因此 cu 的所有线性组合可以表示为三维空间中一条穿过原点 (0,0,0) 的直线,如图 5 所示:

图5.cu所有线性组合构成的图像

情况二,cu+dv 的所有线性组合的图像:

  • 当向量 u 和 v 不在一条直线上时,cu+dv 表示三维空间中的一个通过原点 (0,0,0) 的二维平面,如图 6 所示:

图6.向量u和v不共线时,cu+dv所有线性组合构成的图像

  • 当向量 u 和 v 处在一条直线上时,cu+dv 的图像退化成第一种情况。

情况三,cu+dv+ew 的所有线性组合的图像:

  • 当向量 u、v、w 不在一个平面上时,cu+dv+ew 可以表示整个三维空间;
  • 当向量 u、v、w 处在一个平面上时,cu+dv+ew 的图像退化成第二种情况;
  • 当向量 u、v、w 处在一条直线上时,cu+dv+ew 的图像退化成第一种情况。

不难发现,我们在讨论上述多种情况时,反复提到了共线、共面的概念,这些性质会对一组向量线性组合的结果向量的空间位置分布产生较大影响,是线性代数中非常关键的概念,在后续的内容中,我们会围绕它开展深入的讨论,不过我们会使用更加专业的词汇来进行描述和介绍,即:线性相关和线性无关。

关于向量坐标的讨论

向量的坐标取决于基底

对于向量 $u=\begin{bmatrix}4&5\end{bmatrix} ^{T}$ 而言,我们一直以来都很理所应当的认为:它表示一条在 x 轴上投影为 4,y 轴上投影为 5 的有向线段,它的坐标是 (4,5)。这其实是基于了一个我们没有刻意强调的前提:我们是利用了方向为 x 轴、 y 轴正方向并且长度为 1 的两个向量 $e{x}=\begin{bmatrix}1&0\end{bmatrix} ^{T}$、$e{y}=\begin{bmatrix}0&1\end{bmatrix} ^{T}$ 作为讨论的基准。因此,对向量 u 的完整写法就是:$u=4e{x}+5e{y}$,$u=4\begin{bmatrix}1&0\end{bmatrix} ^{T}+5\begin{bmatrix}0&1\end{bmatrix} ^{T}$。

这里被选中作为向量 u 基准的一组向量是 $e{x}$、$e{y}$,它们被称作是基底,基底的每一个成员称作是基向量。而坐标,就对应的是各基向量前的系数。一般情况下,如果不做特殊说明,基向量都是选取沿着坐标轴正方向且长度为 1 的向量。

因此关于向量 u 的完整准确的说法是:在基底 $(e{x}$,$e{y})$ 下,其坐标是 $\begin{bmatrix}4&5\end{bmatrix} ^{T}$。也就是说,坐标必须依托于指定的基底才有意义。因此,要想准确地描述向量,首先要确定一组基,然后通过求出向量在各个基向量上的投影值,最终才能确定在这个基上的坐标值。

同一向量在不同基底上表示为不同坐标

一个指定的向量可以在多组不同的基底上进行坐标表示,在不同的基底表示下,坐标自然也是不同的。根据一组基底对应的坐标去求另一组基底对应的坐标,这就是我们后面会反复用到的坐标变换。

例如,我们可以选择不使用默认的基底 $\begin{bmatrix}1&0\end{bmatrix} ^{T}$ 和 $\begin{bmatrix}0&1\end{bmatrix} ^{T}$,而选择这两个看似普通的向量 $\begin{bmatrix}1&1\end{bmatrix} ^{T}$ 和 $\begin{bmatrix}-1&1\end{bmatrix} ^{T}$ 作为新的基。

根据向量内积的介绍,我们最好是把基向量的模长转化为 1,因为如果模是 1,那么就可以用目标向量点乘基向量,从而直接获得其在这个基向量上的对应坐标。实际上对应任何一个向量,找到其同方向上模为 1 的向量并不难,只要让向量的各成分分别除以向量模长就好了。

例如,上面的基可以变为 $e{i}^{'}=\begin{bmatrix}\frac{1}{\sqrt{2}}&\frac{1}{\sqrt{2}}\end{bmatrix} ^{T}$ 和 $e{j}^{'}=\begin{bmatrix}-\frac{1}{\sqrt{2}}&\frac{1}{\sqrt{2}}\end{bmatrix} ^{T}$。

现在,我们来用上面的方法求取向量 $u=\begin{bmatrix}4&5\end{bmatrix} ^{T}$ 在这组新基上的新坐标。那么根据向量内积的几何意义,我们只要分别计算 $u=\begin{bmatrix}4&5\end{bmatrix} ^{T}$ 和这两个基向量 $e{i}^{'}=\begin{bmatrix}\frac{1}{\sqrt{2}}&\frac{1}{\sqrt{2}}\end{bmatrix} ^{T}$ 和 $e{j}^{'}=\begin{bmatrix}-\frac{1}{\sqrt{2}}&\frac{1}{\sqrt{2}}\end{bmatrix} ^{T}$ 的内积即可,不难得到:

$$u\cdot ei^{'}=\frac{9}{\sqrt{2}},u\cdot ej^{'}=\frac{1}{\sqrt{2}}$$

向量的坐标是指定基的对应系数,因此向量 u 的表达式可以写作:

$$\frac{9}{\sqrt{2}}e{i}^{'}+\frac{1}{\sqrt{2}}e{j}^{'}$$

在该基底下,坐标表示为:

$$\begin{bmatrix}\frac{9}{\sqrt{2}}&\frac{1}{\sqrt{2}}\end{bmatrix} ^{T}$$

图 7 描述了利用上述两组不同的基底,对同一向量进行坐标表示的情况。

图7.不同基底对空间中同一向量的描述

基底的特殊性

不是任何向量都能选作基底

在二维平面里,任意取两个向量是否都能作为基底去表示目标向量呢?我们看一个实际例子。

例如:我们尝试选取向量 $\begin{bmatrix}1&1\end{bmatrix} ^{T}$ 和 $\begin{bmatrix}-1&-1\end{bmatrix} ^{T}$ 来作为空间的基底,但是我们发现,无论如何都找不出两个系数,将目标向量 u 表示为这两个向量的线性组合形式,即:满足等式 $\begin{bmatrix}4&5\end{bmatrix} ^{T}=c\begin{bmatrix}1&1\end{bmatrix} ^{T}+d\begin{bmatrix}-1&-1\end{bmatrix} ^{T}$ 成立的 c 和 d 是不存在的,因此它们不能作为基底。

看来,在一个 n 维空间里,不是随随便便选取 n 个向量都能作为一组基底的,n 维空间中的基底必须满足这样的要求:n 维空间中任意一个向量都可以表示为基向量的线性组合,并且这种线性组合的表示方式必须是唯一的。那么,选择基底的正确姿势是什么?我们下面来仔细分析。

基底中的向量数量要足够

这句话听上去比较抽象,为了直观地进行讨论,我们先用三维空间进行举例,三维空间中的一组基,首先每一个基向量的维数必然为 3,而基向量的个数也必须为 3 个,如果数量不足,例如只有 2 个三维向量 $e1、e2$(假设它们不共线),那么无论对这 2 个向量如何进行线性组合,它们都只能表示二者所在平面上的向量,三维空间中该平面外的向量它们是无法表示的。

基向量满足线性无关

如何确保能够满足表示方法的唯一性呢?这里我们就引入向量线性无关的概念,一组向量需要满足线性无关的条件,即:其中任何一个向量都不能通过其余向量的线性组合的形式进行表示。

换句话说,当且仅当 $x1=x2=…=xn=0$ 时,线性组合 $x1u1+x2u2+x3u3+…+xnun$ 才能生成 0 向量,如果 $xi$ 中有非 0 值存在,那么这一组向量就是线性相关的了。

为什么一组向量满足了线性无关性的条件就等效于满足了线性组合表示方法的唯一性呢?我们可以简单地做一个说明。

对于一组线性无关的向量 $u1,u2,…,u_n$,对于空间中的向量 p,假设有两种不同的表示方法,即:

$$p=c1u1+c2u2+…+cnun=$$$$d1u1+d2u2+…+dnun$$

整理一下有:

$$(c1-d1)u1+(c2-d2)u2+…+$$$$(cn-dn)u_n=0$$

由于 $u1,u2,…,u_n$ 是线性无关的向量,那么则必须满足:

$$c1-d1=0,c2-d2=0,…,$$$$cn-dn=0$$

即 $ci=di$,因此就不可能有两种线性组合的表达方式,从而产生了矛盾。通过反证法就证明了线性无关性和唯一性是等价的。

在这个三维空间中,我们就要求所选取的三个基向量线性无关,如果它们线性相关,那么 $u3$ 就可以表示为 $u1$ 和 $u_2$ 的线性组合,换句话说,候选的三个向量就处在一个平面上了,自然无法通过线性组合的方式表示三维空间中的所有向量,如图 8 所示:

图8.三维空间中线性相关的3个三维向量

这里我想补充说明一下,类似于图 1.8 中所展现的,3 个三维向量由于其线性相关,无法张成整个三维空间,只能张成三维空间中的二维平面甚至退化成一条直线,这种现象会经常遇到、用到,希望大家能够重视。

那么,如果三维空间中基向量的个数超过 3 了呢?当然也不行,假设有 4 个向量试图成为该空间中的一组基,我们任选出其中 3 个向量,按照前提,它们满足线性无关性,那么对于第 4 个向量,由于它处在三维空间中,它一定能够被前 3 个向量的线性组合所表示,那么三维空间中的这 4 个向量显然是线性相关的,无法满足向量构成基底的唯一性条件。因此,在三维空间中,3 个线性无关的向量就可以构成空间中的一组基底。

n 维空间不等价于 $R^n$ 空间

这两个概念的比较其实很重要,在后面介绍空间的时候还会专门定义,我这里先简单说说。我就举 2 维空间的例子,2 维空间不仅仅只有 xoy 二维平面这一种情况,一个倾斜在 3 维空间中的过原点的平面依然能被称为 2 维空间。更高维的空间中同样也会包含 2 维空间。

我说这段话是什么意思呢?就是提醒读者,谈及 2 维空间的一组基,不要仅仅就觉得是两个线性无关的二维向量:$\begin{bmatrix}x1\y1\end{bmatrix}$和$\begin{bmatrix}x2\y2\end{bmatrix}$。两个线性无关的三维向量 $\begin{bmatrix}x1\y1\z1\end{bmatrix}$ 和 $\begin{bmatrix}x2\y2\z2\end{bmatrix}$,甚至一般化为两个线性无关的 n 维向量都可以构成 2 维空间的一组基,只是各个 2 维空间的形态不同罢了。

结论

最后,我们在 n 维空间中再次回顾一般性的情况:一组向量 $e1,e2,e3,…,en$ 能够构成 n 维空间的一组基底,就必须满足 n 维空间中的任何向量 v,都能表示成 $v=x{1}e{1}+x{2}e{2}+…+x{n}e{n}$,且这种表示方法是唯一的。

再换句话说,n 维空间中的基底由 n 个向量 $(e{1},e{2},…,e_{n})$ 构成,它们需要满足线性无关的条件。

张成空间

最后,我们来说一说张成(span)空间的概念,对于一组向量,它的所有线性组合所构成的空间就称之为这一组向量的张成空间。

简简单单的语言,但是内涵非常丰富,我们举几个实例来说明一下不同的几种情况。

第一种情况:

$u1=\begin{bmatrix}1\1\end{bmatrix}$,$u2=\begin{bmatrix}0\1\end{bmatrix}$

显然,向量 $u1$ 和 $u2$ 是两个线性无关的二维向量,它构成了二维空间 $R^2$ 的一组基,因此它的张成空间就是整个二维空间 $R^2$。

第二种情况:

$u1=\begin{bmatrix}1\1\end{bmatrix}$,$u2=\begin{bmatrix}-1\-1\end{bmatrix}$

$u1=-u2$,因此 $u1$ 和 $u2$ 是线性相关的共线向量,它们张成的空间是一条穿过原点的一维直线。

第三种情况:

$u1=\begin{bmatrix}1\1\1\end{bmatrix}$,$u2=\begin{bmatrix}1\-1\1\end{bmatrix}$

$u1$ 和 $u2$ 两个三维向量线性无关,但是由于向量的个数只有两个,因此它们的张成空间是三维空间中的一个穿过原点的平面。

第四种情况:

$u1=\begin{bmatrix}1\1\1\end{bmatrix}$,$u2=\begin{bmatrix}1\-1\1\end{bmatrix}$,$u_3=\begin{bmatrix}3\-1\3\end{bmatrix}$

虽然向量的个数是 3,但是 $u3=u1+2u_2$,因此它们是三个线性相关的共面向量,张成的空间仍然直是三维空间中的一个穿过原点的平面。

第五种情况:

$u1=\begin{bmatrix}1\1\1\end{bmatrix}$,$u2=\begin{bmatrix}1\-1\1\end{bmatrix}$,$u_3=\begin{bmatrix}3\-1\5\end{bmatrix}$

$u1$、$u2$、$u_3$ 三个向量线性无关,构成三维空间 $R^3$ 中的一组基,因此它们的张成空间是整个三维空间 $R^3$。

这五种情况其实很有意思,我们会发现:向量的个数和维数都不是其张成空间的决定因素,而是需要结合向量的线性无关性进行考量,这就会涉及到秩的相关概念,这一篇我们不再展开,后面的内容慢慢再谈。

[help me with MathJax]

见微知著:导数与微分

函数的连续性

函数在单点处的连续性

从这一讲开始,我们正式进入到微积分的部分中来。我们首先从函数的连续性开始讨论,然后逐步过渡到切线和导数的概念。

函数 f(x) 在具体的取值点 c 点是否连续,我们针对性地来看下面三幅图中的具体情形:

图1.讨论函数的连续性

在这幅图中,我们发现在点 c 处,函数的左极限和右极限不相等,即

$$lim{x\rightarrow c^{-}}f(x) \neq lim{x\rightarrow c^{+}}f(x)$$

因此 $lim_{x\rightarrow c}f(x)$ 不存在,c 点处函数的极限不存在,因此函数 f(x) 在点 c 处不连续。

图2.讨论函数的连续性

这幅图中情况似乎要稍微好点儿,我们发现

$$lim{x\rightarrow c^{-}}f(x)=lim{x\rightarrow c^{+}}f(x)$$

函数 f(x) 在 c 点处的极限是存在的,但是从图中可以看出,函数的极限值和 c 点处函数的实际取值不相等,即:

$$lim_{x\rightarrow c}f(x) \neq f(c)$$

因此函数 f(x) 在点 c 处仍然不连续。

图3.讨论函数的连续性

这幅图中以上出现的两个问题都不存在了,我们看到:一方面函数 f(x) 的极限是存在的,而另一方面 $lim_{x\rightarrow c}f(x)=f(c)$,点 c 处的极限和函数的取值又是相等的,因此在这幅图中,函数 f(x) 在点 c 处是连续的。

那么,依照严格的定义,对于一个定义在包含点 c 的区间上的函数 f(x),如果 $lim_{x\rightarrow c}f(x)=f(c)$ 成立,则称函数 f 在点 c 处连续。

函数在区间上的连续性

进一步扩展到区间上,如果函数 f(x) 在开区间上的任意一点连续,那么这个函数 f(x) 就在整个这个开区间上连续。

如果谈到闭区间 [a,b] 上的连续性问题,那么就需要着重单独讨论区间的左右两个端点:我们首先从右侧逼近左侧端点 a,如果 $lim{x\rightarrow a^{+}}f(x) =f(a)$ 成立,则称函数 f(x) 在端点 a 上右连续,我们再从左侧逼近右侧端点 b,即 $lim{x\rightarrow b^{-}}f(x) =f(b)$ 成立,则称函数 f(x) 在端点 b 上右连续。

那么,如果函数在开区间 (a,b) 上连续,且在左侧端点 a 上右连续,在右侧端点 b 上左连续,此时此刻,我们就能够说函数 f(x) 在闭区间 [a,b] 上是连续的。

关于切线

切线是一个大家都非常熟悉的概念,什么是切线?有一种说法是,一条曲线的切线只与这条曲线有一个交点。这个概念有很大的局限性,它只对圆环类的曲线有效,而对例如下面的这条曲线,描述显然就不适用了:

图4.普通曲线的切线

实际上,在上面这幅图中,直线显然是曲线在 P 点处的切线,但是更明显的是,这条直线与曲线的交点数不止一个。那么我们应该怎样更准确地描述切线呢?这里就要用到极限的概念。

我们还是看曲线上 P 点的切线:我们假定 Q 点为曲线上一个接近 P 点的可动点,经过 P 点和 Q 点的直线叫做割线,在 P 点的切线就是当 Q 点沿曲线向 P 点移动时,割线的极限位置,如下图所示:

图5.割线的极限位置:切线

因此,结合上面这幅图,我们来总结一下切线的严格定义:

已知的任意一条曲线 y=f(x) 在点 P(c,f(c)) 处的切线就是穿过该点 P 的一条直线,且这条直线的斜率为:

$$lim_{h\rightarrow 0} \frac{f(c+h)-f(c)}{h}$$

当然,这里有个前提条件,那就是表示斜率的这个极限存在且不为 $\infty$ 或 $-\infty$。

导数的介绍

从切线到导数

切线的概念很简单,我们也非常熟悉,这里我们不做过多停留。下面我们进入到导数概念的介绍,导数的定义和斜率其实看上去很像。

函数 f 的导数我们将其记作 f',其实它是另外一个函数,导数对定义域内任意自变量 x 的函数值为:

$$f'(x)=lim_{h\rightarrow 0}\frac{f(x+h)-f(x)}{h}$$

如果这个极限存在,那么我们就说函数 f 在 x 点处可微,而这个求导的过程就叫作微分。

当然,导数的定义式还有另一种等价的形式:

$$f'(c)=lim_{x\rightarrow c}\frac{f(x)-f(c)}{x-c}$$

可微一定连续

这短短的定义式里,其实有很多坑等着我们,最主要的就是分析可微和连续之间的关系。

首先,可微性一定能够推出连续性,说具体点就是:如果函数的导数 f'(c) 存在,那么函数 f 在点 c 处就是连续的。这个概念我们简单推导一下,大家就能够明白了。

首先对函数 f(x) 做一个简单的基本变形:

$$f(x)=f(c)+f(x)-f(c)=$$$$f(c)+\frac{f(x)-f(c)}{x-c}\cdot (x-c)$$

此时,$x\neq c$,对于上面的变形当然是成立的。那么,当 $x\rightarrow c$ 时,即 x 不断逼近于 c 的时候,等式的左右两侧也是相等的,对应的就是两侧同时取极限:

$$lim{x\rightarrow c}f(x)=$$$$lim{x\rightarrow c}[f(c)+\frac{f(x)-f(c)}{x-c}\cdot (x-c)] $$$$=lim{x\rightarrow c}f(c)+$$$$lim{x\rightarrow c}\frac{f(x)-f(c)}{x-c}\cdot lim_{x\rightarrow c}(x-c)$$

仔细观察一下这个等式中的三部分,其中:

  • f(c) 是一个与变量 x 取值无关的常数,因此 $lim_{x\rightarrow c}f(c)=f(c)$。
  • 而 $lim{x\rightarrow c}\frac{f(x)-f(c)}{x-c}$ 就是导数 f'(c) 的定义式,而我们前面说了,前提条件是导数 f'(c) 存在,因此 $lim{x\rightarrow c}\frac{f(x)-f(c)}{x-c} = f'(c)$。
  • 而最后一个很明显,$lim_{x\rightarrow c}(x-c)=0$。

因此,最终就有:

$$lim{x\rightarrow c}f(x)=lim{x\rightarrow c}f(c)+$$$$lim{x\rightarrow c}\frac{f(x)-f(c)}{x-c}\cdot lim{x\rightarrow c}(x-c) $$$$=f(c)+f'(c)\cdot 0=f(c)$$

我们只看一头一尾,即:$lim_{x\rightarrow c}f(x)=f(c)$,函数在 c 点处这不就连续了吗。

连续不一定可微

那反过来呢?很多地方最爱区分的概念就是连续一定可微吗?也就是说函数 f(x) 在 c 点处连续,那么导数 f'(c) 一定存在吗?答案是不一定,我们看几个简单的例子。

首先,我们用这个函数来证明:y=|x|。

图6.连续不一定可微

在 x=0 点处函数显然是连续的,那么函数在这个点的导数存在吗?我们直接扣定义,写出导数的定义式:

$$f'(0)=lim{h\rightarrow 0}\frac{|0+h|-|0|}{h}=$$$$lim{h\rightarrow 0} \frac{|h|}{h}$$

这里,当 h 从右侧逼近 0 的时候:即

$$lim_{h\rightarrow 0^{+} } \frac{|h|}{h} = \frac{h}{h}=1$$

而当 h 从左侧逼近 0 的时候,即

$$lim_{h\rightarrow 0^{-} } \frac{|h|}{h} = \frac{-h}{h} = -1$$

此时我们发现左极限和右极限不相等,因此极限 $lim_{h\rightarrow 0} \frac{f(0+h)-f(0)}{h}$ 不存在,换句话说,函数在 0 处的导数 f'(0) 不存在。

从中我们受到启发并进行拓展,一个连续函数在它的图形中有任何尖锐拐角的地方都是不可导的。

如果函数不是这种尖峰形状的,而是光滑的,那又是什么情形呢?

我们再看另一个例子:$y=x^{\frac{1}{3}}$,显然它在点 x=0 的地方是光滑且连续的,但是它的导数为

$$f'(x)=\frac{1}{3}x^{-\frac{2}{3}}=\frac{1}{3x^{\frac{2}{3}}}$$

此时我们发现:

$$lim_{x\rightarrow 0}=\frac{1}{3x^{\frac{2}{3}}}=\infty$$

因此,函数在点 0 处不可导。

连续与可微的概念希望大家能够通过上面的几个小例子加深概念。

一些导数的基本记号

最后,我们来看看导数的一些记号,方便我们在后续的讨论中使用。

首先如果自变量 x 的值从 $x1$ 改变到 $x2$,那么 $x2-x1$ 就叫作 x 的增量,我们把它记作是 $\Delta x$。

相应的,函数的取值 y 也从 $f(x1)$ 变到了 $f(x2)$,那么相应 y 的增量为:$\Delta y=y2-y1=f(x2)-f(x1)$。

因此,假设自变量从 x 变化到 $x+\Delta x$,相应的增量比为:

$$\frac{\Delta y}{\Delta x}=\frac{f(x+\Delta x)-f(x)}{\Delta x}$$

当 $\Delta x\rightarrow 0$ 时,我们也可以用下面的符号来记作其导数:

$$\frac{dy}{dx}=lim{\Delta x\rightarrow 0}\frac{\Delta y}{\Delta x}=$$$$lim{\Delta x\rightarrow 0}\frac{f(x+\Delta x)-f(x)}{\Delta x}=f'(x)$$

而像一些函数的基本求导法则,高阶导数的求导法则等基础知识,我们就不在课程中过多赘述了,大家可以参照手头的微积分教材进行复习巩固。

基于 Python 的数值微分法

那么在实际的程序中,我们如何来求取函数的导数值呢?很显然,紧扣定义就好了。

接下来我们参照定义式 $\frac{dy}{dx} =lim_{h\rightarrow 0}\frac{f(x+h)-f(x)}{h}$,让 h 取一个非常小的值,利用 Python 来实现函数导数的求取。

但是实际上,在用数值法求近似的导数值的时候,还可以使用中心差分法,这样求得的导数会更接近于真实值,中心差分法求导的定义式为:

$$\frac{dy}{dx}=lim_{h\rightarrow 0}\frac{f(x+\frac{h}{2})-f(x-\frac{h}{2})}{h}$$

中心差分法本质上还是建立在割线的极限是切线的思想,为什么说实际操作时,中心差分法更接近于真实的导数值呢?我们看一个示意图:

图7.数值微分中定义法和中心差分法的比较

从图中可以看出,用中心差分法所做割线的斜率要比普通定义法更接近于真实切线的斜率。

最后,我们用代码来实际进行导数的数值法求解,我们举一个简单的函数 $f(x)=x^2$,它的导数很简单 $f'(x)=2x$,我们比较在 x=4 时,两种方法求出的导数数值近似解,以及和真实值 8 之间的差距。

代码片段:

def function(x):    return x*xdef numerical_diff(f, x):    h = 1e-4    return (f(x+h) - f(x))/hdef numerical_diff_1(f, x):    h = 1e-4    return (f(x+h/2) - f(x-h/2))/hprint('theoretical value={}'.format(2*4))print('value={},error={}'.format(numerical_diff(function, 4),abs(numerical_diff(function, 4)-8)))print('value={},error={}'.format(numerical_diff_1(function, 4),abs(numerical_diff_1(function, 4)-8)))

运行结果:

theoretical value=8value=8.00009999998963,error=9.999998962939571e-05value=7.999999999963592,error=3.6408209780347534e-11

从运行结果中我们可以看出,函数 $f(x)=x^2$ 在 x=4 处的导数理论值为 8,数值求导过程中,定义法求出的导数近似值为 8.00009999998963 ,中心差分法求得的导数近似值为 7.999999999963592,很明显,中心差分法求得的导数近似值更接近于真实的理论值。

[help me with MathJax]

一维高斯分布:极大似然与无偏性

在这个专栏中,我们开篇首先介绍高斯分布,它的重要性体现在两点:

  • 第一:依据中心极限定理,当样本量足够大的时候,任意分布的均值都趋近于一个高斯分布,这是在整个工程领域体现出该分布的一种普适性;
  • 第二:高斯分布是后续许多模型的根本基础,例如线性高斯模型(卡尔曼滤波)、高斯过程等等。

因此我们首先在这一讲当中,结合一元高斯分布,来讨论一下极大似然估计,估计有偏性、无偏性等基本建模问题。

极大似然估计问题背景

首先我们来回顾一下一元高斯分布的概率密度函数 $pdf$,假设我们有一组观测样本数据 $X=(x1,x2,x3,…,xN)$,它们服从参数 $\theta=(\mu,\sigma^2)$ 的一元高斯分布,那么我们如何利用这组样本来对分布的参数 $\theta$ 进行估计呢,换句话说也就是估计出样本所服从高斯分布的均值和方差?

这里需要使用我们非常熟悉的极大似然估计方法,我们首先来看一下一元高斯分布的概率密度函数的表达式:

$$p(x)=\frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(x-\mu)^2}{2\sigma^2})$$

在之前的《机器学习中的数学:概率统计》专栏中,我们曾经介绍过,极大似然估计的本质就是估计出模型的参数 $\theta$,使得我们所观测出的这组样本 $X=(x1,x2,x3,…,xN)$ 出现的概率最大。

这里我们还要熟悉另一个表达式的写法,那就是 $p(x|\theta)$,我们常常能够看到这个条件概率的写法,它在这里就是指明确了参数 $\theta$(也就是 $\mu,\sigma^2$)的情况下,服从高斯分布的样本$x$出现的概率,那不难看出,实际上这个表达式最终的写法和上面的概率密度函数形式上是一样的:

$$p(x|\theta)=\frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(x-\mu)^2}{2\sigma^2})$$

那么对于服从高斯分布的这一组样本 $X=(x1,x2,x3,…,xN)$ 而言,我们的目标是估计出(换做更直白的语言,就是求出)这个分布的参数 $\theta$,也就是 $\mu,\sigma^2$,使得在这个高斯分布的框架下,这组样本出现的概率最大,也就是 $p(X|\theta)$ 的概率值最大,这样就确定了 $p(X|\theta)$ 是我们的求取参数的优化目标了。

极大似然估计的求法

由于这一组样本 $X=x1,x2,x3,…,xN$ 中的每一个样本 $x_i$ 都是独立同分布的,即满足同一个高斯分布,并且彼此之间相互独立,那么依据随机变量独立的性质,优化目标 $p(X|\theta)$ 进一步被变化为:

$$p(X|\theta)=\prod{i=1}^np(xi|\theta)$$

我们的目标就是找到一组参数$\theta$,使得上述概率值取得最大。同时,为了能够简化后续计算,我们对目标函数取对数,一方面因为对数满足单调递增,另一方面对数函数能够使得连乘运算变化为连加运算,可以说是一个不错的选择:

$$log \,p(X|\theta)=log\prod{i=1}^np(xi|\theta)=\sum{i=1}^nlog \,p(xi|\theta)$$

我们进一步带入概率密度函数的表达式:

$$\sum{i=1}^nlog\,p(xi|\theta)=\sum{i=1}^nlog\frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(xi-\mu)^2}{2\sigma^2})\=\sum{i=1}^n[log\frac{1}{\sqrt{2\pi}}+log\frac{1}{\sigma}-\frac{(xi-\mu)^2}{2\sigma^2}]$$

那么,现在目标明确了,我们来寻找最佳的 $\mu{mle}$ 和 $\sigma{mle}$,使得:

$$\sum{i=1}^n[log\frac{1}{\sqrt{2\pi}}+log\frac{1}{\sigma}-\frac{(xi-\mu)^2}{2\sigma^2}]$$

取得最大。

我们对这两个参数,一个个来看,具体处理方法很简单,就是求使得上面式子偏导数为 $0$ 的 $\mu$ 和 $\sigma$ 取值。

先看参数 $\mu$:

$$argmax\,\mu{mle}=argmax{\mu}\sum{i=1}^n[log\frac{1}{\sqrt{2\pi}}+log\frac{1}{\sigma}-\frac{(xi-\mu)^2}{2\sigma^2}]$$

由于前面两项都与 $\mu$ 无关,最终:

$$argmax\,\mu{mle}=argmax{\mu}\sum{i=1}^n[-\frac{(xi-\mu)^2}{2\sigma^2}]\=argmin{\mu}\sum{i=1}^n[(x_i-\mu)^2]$$

后面的就很好办了,直接求 $\mu$ 的偏导即可:

$$\frac{\partial}{\partial \mu}\sum{i=1}^{N}(xi-\mu)^2=\sum{i=1}^{N}2(xi-\mu)(-1)=0$$

$$\sum{i=1}^{N}2(xi-\mu)(-1)= \sum{i=1}^{N}(xi-\mu)\=\sum{i=1}^{N}xi-\sum{i=1}^{N}\mu=\sum{i=1}^{N}x_i-N\mu=0$$

最终我们得出:

$$\mu{mle}=\frac{1}{N}\sum{i=1}^{N}x_i$$

也就是说,样本的均值就是高斯分布参数 $\mu$ 的极大似然估计值。

同样地,我们再看如何利用样本数据对高斯分布的方差进行极大似然估计:

$$argmax\,\sigma{mle}=argmax{\sigma}\sum{i=1}^n[log\frac{1}{\sqrt{2\pi}}+log\frac{1}{\sigma}-\frac{(xi-\mu)^2}{2\sigma^2}]\=argmax{\sigma}\sum{i=1}^n[log\frac{1}{\sigma}-\frac{(x_i-\mu)^2}{2\sigma^2}]$$

同样地,我们还是利用求偏导的方法来解决问题:

$$\frac{\partial}{\partial \mu}\sum{i=1}^n[log\frac{1}{\sigma}-\frac{(xi-\mu)^2}{2\sigma^2}]=\sum{i=1}^n[-\frac{1}{\sigma}+\frac{1}{2}(xi-\mu)^22\sigma^{-3}]\=\sum{i=1}^n[-\sigma^2+(xi-\mu)^2]=\sum{i=1}^n-\sigma^2+\sum{i=1}^n(x_i-\mu)^2=0$$

因此,最终我们也得出了高斯分布方差的极大似然估计值:

$$\sigma^2{mle}=\frac{1}{N}\sum{i=1}^n(xi-\mu{mle})^2$$

参数估计的有偏性和无偏性

我们在前面已经花了较大的篇幅,通过样本 $X={x1,x2,x3,…,xN}$ 求得了高斯分布两个参数 $\mu$ 和 $\sigma^2$ 的极大似然估计值,那么此时我们自然就要关心了:

通过这种求解方法得到的参数估计值,它和模型参数的真实值有没有差距?我们如何来衡量极大似然估计值的性质?

这里我们来回顾一下无偏估计的概念:如果估计量的期望等于被估计参数的真实值,那么这个估计值就满足无偏性。那么从高斯分布的样本中推断出来的均值和方差的极大似然估计 $\mu{mle}$ 和 $\sigma^2{mle}$ 是否满足无偏性呢?

无偏性的验证

首先我们还是从均值的极大似然估计入手,我们对 $\mu_{mle}$ 求期望:

$$E[\mu{mle}]=E[\frac{1}{N}\sum{i=1}^nxi]=\frac{1}{N}\sum{i=1}^nE[xi]=\frac{1}{N}\sum{i=1}^n\mu=\mu$$

我们看到 $E[\mu{mle}]=\mu$,即估计值的期望等于模型参数的真实值,因此均值的极大似然估计 $\mu{mle}$ 是无偏的。

而方差的情况就要特殊一些,我们通过下面的公式推导就会看到方差的极大似然估计并不是无偏的,这个推导过程比较复杂,我们一点一点来解析:

$$\sigma{mle}^2=\frac{1}{N}\sum{i=1}^N(xi-\mu{mle})^2=\frac{1}{N}\sum{i=1}^N(xi^2+\mu{mle}^2-2xi\mu{mle})\=\frac{1}{N}\sum{i=1}^Nxi^2+\frac{1}{N}\sum{i=1}^N\mu{mle}^2-\frac{1}{N}\sum{i=1}^N2xi\mu{mle}\=\frac{1}{N}\sum{i=1}^Nxi^2+\frac{1}{N}\sum{i=1}^N\mu{mle}^2-2\mu{mle}\frac{1}{N}\sum{i=1}^Nx_i$$

我们发现最后一项当中的 $\frac{1}{N}\sum{i=1}^Nxi$ 就是模型均值的极大似然估计 $\mu_{mle}$,因此我们稍作代换就有:

$$\sigma{mle}^2=\frac{1}{N}\sum{i=1}^Nxi^2+\frac{1}{N}\sum{i=1}^N\mu{mle}^2-2\mu{mle}\frac{1}{N}\sum{i=1}^Nxi\=\frac{1}{N}\sum{i=1}^Nxi^2+\mu{mle}^2-2\mu{mle}^2=\frac{1}{N}\sum{i=1}^Nxi^2-\mu_{mle}^2$$

因此,我们的目标就明确为求取下面式子的期望:

$$E[\sigma{mle}^2]=E[\frac{1}{N}\sum{i=1}^Nxi^2-\mu{mle}^2]$$

这个期望的求取有一定的技巧,我们引入模型均值的真实值 $\mu$:

$$E[\sigma{mle}^2]=E[\frac{1}{N}\sum{i=1}^Nxi^2-\mu^2-(\mu{mle}^2-\mu^2)]\=E[\frac{1}{N}\sum{i=1}^Nxi^2-\mu^2]-E[\mu_{mle}^2-\mu^2]$$

这前后两个期望的式子,我们分开来看,首先看 $E[\frac{1}{N}\sum{i=1}^Nxi^2-\mu^2]$:

$$E[\frac{1}{N}\sum{i=1}^Nxi^2-\mu^2]=E[\frac{1}{N}\sum{i=1}^Nxi^2-\frac{1}{N}\sum{i=1}^N\mu^2]\=\frac{1}{N}E[\sum{i=1}^N(xi^2-\mu^2)]=\frac{1}{N}\sum{i=1}^NE[(x_i^2-\mu^2)]$$

这个式子有何端倪?我们仔细观察一下变换后的形式:

$$E[(xi^2-\mu^2)]=E[xi^2]-\mu^2=E[xi^2]-E[xi]^2=var(x_i)=\sigma^2$$

经过这么一变换,发现 $E[xi^2]-E[xi]^2$ 就是方差的定义,因此 $E[(x_i^2-\mu^2)]$ 表示的就是方差的实际值 $\sigma^2$,前面一部分期望的结果就是:

$$E[\frac{1}{N}\sum{i=1}^Nxi^2-\mu^2]=\frac{1}{N}\sum_{i=1}^N\sigma^2=\sigma^2$$

我们再看后半部分 $E[\mu_{mle}^2-\mu^2]$,对于这一部分的处理,也有颇多技巧:

$$E[\mu{mle}^2-\mu^2]=E[\mu{mle}^2]-E[\mu^2]=E[\mu_{mle}^2]-\mu^2$$

之前说过了,由于均值的极大似然估计是无偏估计,因此 $\mu=E[\mu_{mle}]$,我们进行替换可以得到:

$$E[\mu{mle}^2]-\mu^2=E[\mu{mle}^2]-E[\mu{mle}]^2=var(\mu{mle})\=var(\frac{1}{N}\sum{i=1}^Nxi)=\frac{1}{N^2}var(\sum{i=1}^Nxi)=\frac{1}{N^2}\sum{i=1}^Nvar(xi)\=\frac{1}{N^2}\sum_{i=1}^N\sigma^2=\frac{1}{N}\sigma^2$$

真是千回百转啊,我们现在把前后两个化简后的期望结果进行合并,就可以得到方差的极大似然估计值的期望值了:

$$E[\sigma{mle}^2]=E[\frac{1}{N}\sum{i=1}^Nxi^2-\mu^2]-E[\mu{mle}^2-\mu^2]\=\sigma^2-\frac{1}{N}\sigma^2=\frac{N-1}{N}\sigma^2$$

结果出来了,我们发现方差的极大似然估计值并不等于该参数的真实值 $\sigma^2$,而是要偏小的,因此方差的极大似然估计是有偏的。

那么,如果想要它变得无偏,进行一下系数的简单修正,在前面乘上一个 $\frac{N}{N-1}$ 即可:

$$\hat{\sigma^2}=\frac{N}{N-1}\sigma^2{mle}=\frac{N}{N-1}\frac{1}{N}\sum{i=1}^N(xi-\mu{mle})^2\=\frac{1}{N-1}\sum{i=1}^N(xi-\mu_{mle})^2$$

小结

这一讲的内容就到此为止,核心内容就是以一元高斯分布为例,围绕着极大似然估计的方法,来介绍如何对高斯分布的参数进行估计,并且高斯分布的极大似然参数估计值的有偏性进行了判断和验证,结论和思想都很简单,希望读者能够多注意其中的运算技巧。

[help me with MathJax]

离散型随机变量:分布与数字特征
连续型随机变量:分布与数字特征
多元随机变量(上):联合、边缘与条件
多元随机变量(下):独立与相关
多元随机变量实践:聚焦多元正态分布
极限思维:大数定理与中心极限定理
推断未知:统计推断的基本框架
经典统计推断:寻找最大似然
贝叶斯统计推断:最大后验
由静向动:随机过程导引
状态转移:初识马尔科夫链
变与不变:马尔科夫链的极限与稳态
基于马尔科夫链的近似采样
蒙特卡洛思想与接受—拒绝采样
马尔科夫链蒙特卡洛方法:通用采样引擎
隐马尔科夫模型:明暗两条线
概率估计:隐马尔科夫模型观测序列描述
状态解码:隐马尔科夫模型隐含状态揭秘
矩阵的核心(上):向量变换
矩阵的核心(下):空间映射
矩阵与映射中的“逆”
封闭小世界:向量空间及其子空间
从空间的角度解方程组
寻找最近:空间中的向量投影
投影的内涵与最小二乘应用
相似矩阵与相似变换
简而美的相似对角矩阵
变化中的不变:特征值与特征向量
对称矩阵的优秀特性
主成分分析(上):利用特征值分解
主成分分析(中):奇异值分解的原理与通用性
主成分分析(下):奇异值分解与数据降维
函数近似与泰勒级数
多元函数及其偏导数
多元函数的微分及泰勒近似
多元函数的梯度及其应用
导引:最优化的基本问题和存在条件
一元函数的极值:运用迭代法
多元函数的极值(上):梯度法基础
多元函数的极值(中):最速下降法
多元函数的极值(下):牛顿法与向量微分
多元高斯分布:参数特征和几何意义
高斯噪声:最小二乘线性估计的新视角
判别 or 生成:从逻辑回归说起
高斯判别分析:基于高斯分布的假设前提
朴素贝叶斯:基于条件独立性假设
含有隐变量的参数估计问题
概率渐增:EM 算法的合理性
探索 EM 公式的底层逻辑与由来
探索高斯混合模型:EM 迭代实践
高斯混合模型的参数求解
连续域上的无限维:高斯过程介绍
统计推断的基本思想和分类
随机近似方法初步
采样绝佳途径:马尔科夫链及其稳态
马尔科夫链蒙特卡洛方法:从 M-H 到 Gibbs
概率图模型导论
有向图模型与条件独立性
引入时间轴:动态图模型的共性与特征
隐马尔科夫模型的基本形态和性质
隐马尔科夫模型的状态解码
线性高斯:卡尔曼滤波
粒子滤波基本原理
重采样:粒子滤波中的处理技巧
从有向到无向:谈谈条件随机场

阅读全文: http://gitbook.cn/gitchat/column/5efc04f01d0c3d14668b869b

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页