基于Python的应用机器学习的线性代数导论

2020-11-11 22:41:28

线性代数之于机器学习就像面粉之于面包店:每个机器学习模型都基于线性代数,就像每个蛋糕都基于面粉一样。当然,这不是唯一的配料。机器学习模型需要向量微积分、概率和最优化,就像蛋糕需要糖、鸡蛋和黄油一样。应用机器学习,就像面包店一样,本质上是将这些数学成分以巧妙的方式结合在一起,创造出有用的(好吃的?)。模特们。

本文档包含应用机器学习的入门级别线性代数注释。这是一个参考,而不是一个全面的审查。如果你曾经被矩阵乘法弄糊涂了,不要记得什么是$L_2$范数,或者线性无关的条件,这可以作为一个快速参考。对于不需要深入理解线性代数,但仍想了解机器学习基础知识或使用预先打包的机器学习解决方案的人来说,这也是一个很好的介绍。此外,对于刚刚学习了线性代数并需要复习的人来说,这是一个很好的资源。

这些笔记基于我过去读过、看过和上过的一系列(大部分)免费教科书、视频讲座和课程。如果你想获得更深层次的理解或找到每个主题的练习,你可能想要直接参考这些来源。

线性代数CH.。古德费罗、本吉奥和库维尔著的《深度学习》。第一版。章节链接。

线性代数CH.。在张、利普顿、李和斯莫拉的《深入学习》一书中。章节链接。

我曾在某一时刻咨询过所有这些资源。帕维尔·格林菲尔德(Pavel Grinfeld)的演讲绝对是我的最爱。萨尔曼·汗的讲座对绝对的初学者来说真的很不错(虽然篇幅很长)。著名的线性代数中的3Blue1Brown系列是令人愉快的观看和获得一个坚实的线性代数的高级视图。

如果你一定要看一本书,我会选博伊德和范登伯格的《应用线性代数导论》,因为这是我见过的最适合初学者阅读的线性代数书籍。这个符号的每一个方面都得到了清楚的解释,几乎所有的应用机器学习的关键内容都被涵盖了。古德费罗等人的《线性代数》一章是一个很好且简明的介绍,但它可能需要先接触一些线性代数概念。Deisenroth等人的书可能是我找到的机器学习线性代数的最好、最全面的来源,尽管它假设你擅长阅读数学(更广泛地说,它是数学方面的)。萨沃夫的书对初学者来说也很棒,但需要时间来消化。斯特朗教授的讲座也很棒,但我不会推荐给纯粹的初学者。

我会尽我最大努力保持记号的一致性。然而,学习适应变化或不一致的符号是一项有用的技能,因为大多数作者都会使用他们自己喜欢的符号,而且每个人似乎都认为自己的符号更好。

为了使一切变得更加动态和实用,我将介绍一些Python代码,以便(如果可能)使用NumPy来举例说明每个数学运算,NumPy是在Python中进行科学计算的事实上的标准包。

最后,请记住,这是由非数学家为(大多数)非数学家创建的。我写这封信的方式就像是在和我自己或我亲爱的朋友说话,这就解释了为什么我的写作有时是对话式的和非正式的。

如果您在笔记中发现任何错误,请随时联系我:[email protected]和https://pablocaceres.org/,这样我就可以更正这个问题。

在写关于线性映射的文章时,我意识到在学习线性代数之前,对一些概念有一个基本的理解是很重要的。如果你和我一样,你可能不会在高中以后接受过正式的数学训练。如果是这样的话,我鼓励您阅读这一节,并在复习线性代数内容之前花一些时间理解这些概念(否则,您可能更愿意跳过这一部分)。我相信复习这些概念对理解符号有很大的帮助,根据我的经验,这是非数学家理解数学的主要障碍之一:我们不是以英语为母语的人,所以我们在不断增加我们的词汇量。我将这一部分保持简短,因为这不是本迷你课程的重点。

集合是数学中最基本的概念之一。它们是如此基本,以至于没有用其他任何东西来定义。相反,数学的其他分支是用集合来定义的,包括线性代数。简而言之,集合是定义良好的对象集合。这样的对象称为集合的元素或成员。船上的船员,骆驼大篷车,洛杉矶湖人队的花名册,都是布景的例子。这艘船的船长,大篷车中的第一头骆驼,以及勒布朗·詹姆斯,都是他们相应套装中的“成员”或“元素”的例子。我们将具有大写斜体字母的集合表示为$\textit{A}$。在线性代数的背景下,我们说一条直线是一组点,平面上所有直线的集合是一组集合。类似地,我们可以说向量是点的集合,而矩阵是向量的集合。

我们使用归属感来构建集合。我们用希腊字母epsilon表示$a$属于$\textit{A}$(或者是$\textit{A}$的元素或成员):

另一个重要的想法是包含,它允许我们构建子集。考虑集合$\textit{A}$和$\textit{B}$。当$\textit{A}$的每个元素都是$\textit{B}$的元素时,我们说$\textit{A}$是$\textit{B}$的子集,或者说$\textit{B}$包括$\textit{A}$。符号是:

归属和包含源自扩张公理:两个集合相等的充要条件是它们具有相同的元素。这条公理听起来可能不起眼,但却是让归属和包容变得严谨所必需的。

一般来说,我们对集合元素的任何断言都会导致生成一个子集。换句话说,断言关于集合的东西是制造子集的一种方式。以所有狗的集合为例,我将其表示为$\textit{D}$。我现在可以断言“$d$是黑色的”。这样的断言对所有狗中的一些成员是正确的,对另一些成员是错误的。因此,这样一个语句(针对$\textit{D}$的所有成员求值)会生成一个子集:所有黑狗的集合。这表示为:

冒号($:$)或竖线($\vert$)读作“Tho That”。因此,我们可以将上面的表达式理解为:$\textit{D}$中$d$的所有元素,使得$d$为黑色。这就是我们如何从$\textit{A}$获得集合$\textit{B}$。

如前所述,集合生成依赖于规范的公理:对于每个集合$\textit{A}$和每个条件$\textit{S}(X)$,都有一个集合$\textit{B}$,其元素正是$\textit{A}$中$\textit{S}(X)$成立的元素。

条件$\textit{S}(X)$是关于$\textit{A}$元素的任何语句或断言。有效的判决要么是归属的,要么是平等的。当我们将归属和相等断言与逻辑运算符(NOT、IF和OR等)结合在一起时,我们可以构建任何合法的集合。

成对套装有两种口味:无序的和有序的。我们关心集合对,因为我们需要它们来定义关系和函数的概念(为了方便起见,这里我将用小写表示集合,但请记住,我们仍然在谈论集合)。

考虑一对集合$\textit{x}$和$\textit{y}$。无序对是元素为${\textit{x},\textit{y}}$和${\textit{x},\textit{y}}={\textit{y},\textit{x}}$的集合。因此,呈现顺序并不重要,集合是相同的。

在机器学习中,我们通常会关心表示顺序。为此,我们需要定义有序对(我将直观地介绍这一点,以避免引入太多新概念)。有序对表示为$(\textit{x},\textit{y})$,其中$\textit{x}$为第一个坐标,$\textit{y}$为第二个坐标。有效的有序对具有$(\textit{x},\textit{y})\ne(\textit{y},\textit{x})$的属性。

从有序对中,我们可以得出集合之间或元素与集合之间关系的概念。关系可以是二元、三元、四元或N元。这里我们只关心二元关系。在集合论中,关系被定义为有序对的集合,并表示为$\textit{R}$。因此,我们可以将$\textit{x}$和$\textit{y}$之间的关系表示为:

进一步地,对于任何$\textit{z}\在\textit{R}$中,存在$\textit{x}$和$\textit{y}$使得$\textit{z}=(\textit{x},\textit{y})$。

从$\textit{R}$的定义出发,我们可以得到整环和值域的概念。域是定义为:

这是这样的:$\textit{x}$的值使得对于$\textit{y}$的至少一个元素,$\textit{x}$与$\textit{y}$有关系。

这是这样的:由$\text{y}$的值组成的集合,使得$\textit{x}$,$\textit{x}$的至少一个元素与$\textit{y}$有关系。

考虑一对集合$\textit{X}$和$\textit{Y}$。我们说从$\textit{X}$到$\textit{Y}$的函数是这样的关系:

使得对于每个$\textit{x}\在\textit{X}$中存在唯一的元素$\textit{y}\in\textit{Y}$其中$(\textit{x},\textit{y})\在{f}$中。

更非正式地说,我们说一个函数“转换”或“映射”或“发送”$\textit{x}$到$\textit{y}$,并且对于每个“参数”$\textit{x}$,都有一个$\textit{y}$“假设”或“采取”的唯一值。

我们通常将从X到Y的关系或函数或变换或映射表示为:

查看此函数定义的效果的简单方法是使用图表。在图1中,左窗格显示了一个有效函数,即每个值$\textit{f}(\textit{x})$唯一地映射到一个值$\textit{y}$。右窗格不是函数,因为每个值$\textit{f}(\textit{x})$映射到$\textit{y}$的多个值。

对于$\textit{f}:\textit{X}\right tarrow\textit{Y}$,$\textit{f}$的域等于$\textit{X}$,但范围不一定等于$\textit{Y}$。回想一下,该范围只包括$\textit{Y}$与$\textit{X}$有关系的元素。

机器学习的最终目标是从数据中学习函数,即从领域到函数范围的转换或映射。这听起来可能过于简单化了,但这是真的。域$\textit{X}$通常是映射到目标值向量的变量或特征的向量(或集合)。最后,我想强调的是,在机器学习中,单词转换和映射可以互换使用,但两者都只是表示函数。

这就是我将介绍的关于集合和函数的全部内容。我的目标只是介绍:(1)集合的概念,(2)基本集合符号,(3)集合是如何生成的,(4)集合如何允许定义函数,(5)函数的概念。集合论是一个不朽的领域,但要理解线性代数,并不需要学习关于集合的所有知识。Halmo天真的集合论(不是免费的,但你可以花8-10美元找到一本)是一本很棒的书,适合那些只需要以相对非正式的方式理解最基本思想的人。

#这一部分的图书馆将Numpy作为NP导入熊猫作为PD导入Altair作为ALT。主题。启用(暗色)。

线性代数是研究向量的学科。在最一般的层面上,向量是有序的有限数字列表。向量是机器学习中最基本的数学对象。我们使用它们来表示实体的属性:年龄、性别、考试成绩等。我们使用粗体小写字母(如$\bf{v}$)或顶部带有箭头的小写字母(如$\vec{v}$)来表示向量。

向量是一种数学对象,可以将它们相加和/或乘以一个数字,以获得另一个同类对象。例如,如果我们有一个向量$\bf{x}=\text{age}$和第二个向量$\bf{y}=\text{weight}$,我们可以将它们相加,得到第三个向量$\bf{z}=x+y$。我们还可以将$2\bf{x}$相乘,得到$2\bf{x}$,也就是向量。这就是我们所说的同类:返回的对象仍然是一个向量。

向量有三种形式:(1)几何向量,(2)多项式,(3)和$\mathbb{R^n}$空间的元素。接下来我们将对每一个进行定义。

几何向量是定向线段。这就是你们可能在高中物理和几何中学到的那种向量。许多线性代数概念都来自于向量的几何观点:空间、平面、距离等。

多项式是类似$f(X)=x^2+y+1$的表达式。这是一个添加多个“术语”(名词)的表达式。多项式之所以是向量,是因为它们符合向量的定义:它们可以相加得到另一个多项式,也可以相乘得到另一个多项式。

$\mathbb{R}^n$的元素是实数集。这种类型的表示可以说是应用机器学习中最重要的。这是数据通常在计算机中表示的方式,以构建机器学习模型。例如,$\mathbb{R}^3$中的一个向量的形状为:

有几个“特殊”的向量值得记住,因为它们在应用线性代数中经常被提及:(1)零向量,(2)单位向量,(3)稀疏向量。

零矢量是由零和仅由零组成的矢量。通常可以看到这个向量被简单地表示为$0$,而与维度无关。因此,您可能会看到所有条目都等于0的3维或10维,称为“0”向量。例如:

单位向量是由单个元素等于1,其余元素等于0组成的向量。单位向量对于理解规范之类的应用非常重要。例如,$\bf{x_1}$、$\bf{x_2}$和$\bf{x_3}$是单位向量:

稀疏向量是大多数元素等于零的向量。我们将向量$\bf{x}$的非零元素数记为$nnz(X)$。更稀疏的可能向量是零向量。稀疏向量在机器学习应用中很常见,通常需要某种类型的方法来有效地处理它们。

向量可以有任意多个维度。最常见的是2维笛卡尔平面和3维空间。二维和三维向量经常用于教学目的,因为我们可以把它们形象化成几何向量。然而,机器学习中的大多数问题都涉及到更多的维度,有时甚至是数百或数千个维度。任意维度的向量$\bf{x}$$n$的符号为:

向量尺寸映射到坐标系或垂直轴。因此,当我们定义一个向量时,坐标系的原点在$(0,0,0)$:

我们是说:从原点开始,在第一个垂直轴上移动3个单位,在第二个垂直轴上移动2个单位,在第三个垂直轴上移动一个单位。我们稍后会看到,当我们有一组垂直轴时,我们就得到了一个向量空间的基。

我们使用向量-向量相加来定义向量,而没有定义向量-向量相加。向量-向量相加是一种基于元素的运算,仅为相同大小(即元素数量)的向量定义。考虑两个大小相同的向量,然后:

添加零向量没有任何效果:$x+0=0+x=x$。

在NumPy中,我们使用+运算符或Add方法将相同的两个向量相加:

向量加法的右分布性质:$\α(\bf{x}+\bf{y})=\α\bf{x}+\α\bf{y}$。

在线性代数中,只有两种合法的向量运算:加法和乘法。当我们把它们结合起来,我们得到一个线性组合。

您经常看到的另一种表示线性组合的方法是使用求和记数法。考虑一组向量$x_1,…。,x_k$和标量$\Beta_1,…。,\beta_k\in\mathbb{R}$,则:

线性组合是线性代数中最基本的运算。线性代数中的一切都是线性组合的结果。例如,线性回归是向量的线性组合。图2显示了直观地将两个几何向量相加的示例。

我们用标量讲解了向量的加法和乘法。现在我将定义向量-向量乘法,通常称为点积或内积。$\bf{x}$和$\bf{y}$的点积定义为:

其中$T$上标表示向量的转置。转置向量只意味着逆时针将列向量“翻转”为行向量。例如:

点阵产品在机器学习中非常重要,一段时间后,它们就成了从业者的第二天性。

要在Numpy中将两个维度(行=2,列=1)的向量相乘,我们需要使用@运算符转置第一个向量:

在其更一般的形式中,向量空间也称为线性空间,是遵循$\mathbb{R}^n$中为向量定义的规则的对象的集合。我们在定义向量时提到了这些规则:它们可以加在一起并与标量相乘,并返回相同类型的向量。更通俗地说,向量空间是由真向量和向量集的所有可能的线性组合组成的集合。此外,向量加法和乘法必须遵循以下八条规则:

$\对于所有$$x$,存在唯一的向量$x$,使得$x+-x=0$。

根据我的经验,记住这些属性并不重要,但知道存在这样的规则是件好事。

考虑向量$\bf{x}$和$\bf{y}$以及标量$\pha$和$\beta$。如果我们取$\α\bf{x}+\β\bf{y}$的所有可能的线性组合,我们就可以得到这些向量的跨度。当你考虑几何向量时,这一点更容易理解。如果我们的向量$\bf{x}$和$\bf{y}$指向2维空间中的不同方向,我们得到$span(x,y)$等于整个2维平面,如图5的中间窗格所示。想象一下有无限数量的两种类型的棍子:一种指向垂直,另一种指向水平。现在,你可以通过简单地组合必要数量的竖直和水平棍子(包括取一些棍子)来到达2维空间中的任何一点。

如果向量指向相同的方向,会发生什么?现在,如果你把它们结合起来,你只需要跨越一条线,如图5的左窗格所示。如果你听说过“多重共线性”这个术语,它与这个问题密切相关:当两个变量“共线”时,它们指向同一个方向,因此它们提供了冗余信息,因此可以在不丢失信息的情况下丢弃一个变量。

有了三个指向不同方向的矢量,我们就可以跨越整个3维空间或一个超平面,如图5的右窗格所示。请注意,球体只是一个3-D参考,而不是一个限制。

指向不同方向的四个向量将跨越4维空间,以此类推。从这里看,我们的几何直觉帮不了我们。这是一个例子,说明了线性代数如何超越我们的基本直觉来描述向量的行为。

向量子空间(或线性子空间)是位于较大向量空间内的向量空间。这些也称为线性子空间。考虑一个子空间$S$。要使一个向量成为有效的子空间,它必须满足三个条件:

直觉上,你可以认为闭合是不能从太空“跳出”到另一个太空的。一对平放在2维空间中的向量,无论是通过加法还是乘法,都不能“跳出”到3维空间。

考虑以下问题:是$\bf{x}=\Begin{bMatrix}1\1\end{bMatrix}。

.