机器学习中的线性代数
机器学习的线性代数概念概述
介绍
通过使用矩阵和向量以及线性代数库(例如Python中的NumPy),线性代数使我们能够在使用更简单的代码的同时,以更有效的计算方式执行大量计算。至少了解线性代数的数值运算对于进一步了解我们的机器学习模型中发生的事情至关重要。尽管使线性代数后面的几何直觉在可视化我们下面将要讨论的操作方面非常有用,但并不需要了解大多数机器学习算法。
在本教程中,我们将讨论标量,向量,矩阵,矩阵与矩阵的加法和减法,标量乘法和除法,矩阵-矢量乘法,矩阵与矩阵的乘法,恒等矩阵,矩阵逆和矩阵转置。另外,我们将非常简要地讨论一些数字运算背后的一些几何直觉。
矩阵
矩阵是数字的矩形阵列。这些数字包含在方括号中。换句话说,矩阵是由行和列组成的二维数组。矩阵或矩阵元素中包含的数字可以是来自机器学习问题的数据,例如特征值。
> matrix
由于矩阵可以是任意数量的行和列,因此我们必须指定该矩阵的维数,即行数x列数。
例如,如果矩阵A具有4行2列,则它是4x2矩阵。另一种说法是:矩阵A是集合R ^(4x2)的元素,集合R ^(4x2)是所有维度为4x2的矩阵的集合。
索引MatrixA矩阵为我们提供了一种快速组织,索引和访问大量数据的方法。因此,要访问数据,我们可以在矩阵中添加下标或索引,以指向矩阵中的特定元素或条目。例如,对于矩阵A,其条目或元素可以按如下方式建立索引:
Aij =第i列第j列中的' i,j条目'。
> indexing a matrix
向量
向量是矩阵的特例。向量是只有一列的矩阵,因此它是nx1矩阵,否则称为列向量。因此,我们可以将矩阵视为一组列向量或行向量。稍后我们将看到,如果对列向量进行转置,则会得到行向量或只有1行的向量(1xn矩阵)。
> indexing a vector
如果我们有一个包含四个元素/条目的向量,那么我们可以说它是一个4x1矩阵或一个4维向量。因此,它是集合R ^(4x1)或R ^的元素,因为它是向量。
索引Vectoryi =第i个元素
一些注意事项:
向量可以是1索引或0索引。换句话说,向量中的第一个条目可以是第0个元素或第1个元素。在大多数编程语言中,例如python,向量将被索引为0。
按照惯例,我们用大写字母表示矩阵,例如上面的矩阵A,用小写字母表示向量,例如上面的向量y。如果您熟悉在python中使用scikit-learn,请记住,我们通常将特征和标签命名为X特征和y标签,因为特征将在矩阵内,而标签在列向量内。
矩阵-矩阵加减法
要添加两个矩阵,我们从每个矩阵中获取具有相同索引的元素,然后一次将它们相加。这意味着矩阵的维数必须相同。所得矩阵也将具有相同的维数,其每个元素都是来自添加矩阵的相应元素之和。
> matrix-matrix addition
如果我们有矩阵A加上矩阵B,则等于矩阵C:Cij = Aij + Bij
对于矩阵矩阵减法,过程是相同的。我们从第一矩阵中的相应元素中减去第二矩阵的元素。或者,我们可以将其视为矩阵-矩阵加法,在将矩阵相加之前,将所有第二个矩阵元素都乘以-1(请参阅下面的标量乘法)。
标量乘法和除法
标量只是一个实数。我们可以将矩阵乘以标量。这样做将'缩放'矩阵(或向量),因此称为'标量',因为我们会将标量乘以矩阵中的每个数字。
注意:写入标量和矩阵的顺序无关紧要。结果将是相同的。
> matrix-scalar multiplication
在标量乘法中,我们只取标量或实数,然后将其乘以矩阵中的每个元素。因此,我们的结果是一个矩阵,其维数与我们乘以标量的矩阵相同。
> matrix-scalar division
当将矩阵除以标量时,我们可以将其视为将矩阵乘以标量的倒数。
矩阵向量乘法
当将矩阵和向量相乘时,我们将向量乘以矩阵中的每一行。结果将是与矩阵具有相同行数的向量。
> matrix-vector multiplication
首先,我们将向量中的数字与矩阵第一行中的相应数字相乘,然后将这些乘积相加。该总和将成为我们所得向量的第一个元素。然后,我们将向量中的数字与矩阵第二行中的数字相乘,将这些乘积相加,总和将成为结果向量中的第二个元素。依此类推…因此,结果向量中的元素将与矩阵中的行一样多。
> matrix-vector multiplication
如果我们将矩阵A的维度为mxn乘以向量x,则向量x为nx1矩阵(或n维向量),结果将为向量y,即m维向量(或mx1维矩阵))。要获得yi,请将A的第i行与向量x的元素相乘,然后将它们相加。
矩阵向量乘法的几何直觉:
让我们从几何角度解释矩阵向量乘法。想象一下,我们有一个向量或空间中的一条线,可以在坐标系中对其进行可视化处理。然后想象一下,根据矩阵内部的信息,矩阵会更改或变换此空间。在线性代数中,这些变换是线性变换,因为它们遵循一些规则。矩阵向量乘法基本上是吸收原始向量,然后根据矩阵决定的新空间吐出新向量。
因此,可以将矩阵视为函数(变换空间),将我们乘以该矩阵的向量视为初始向量(或输入),并将结果向量(作为该结果的变化向量)空间的线性变换),就是输出。
矩阵-矩阵乘法
为了将两个矩阵相乘,我们可以将其视为单独的矩阵向量乘法。换句话说,我们将从第二个矩阵中删除列向量,并将这些列向量与第一个矩阵进行矩阵向量相乘。然后,我们将这些结果列向量放到一个矩阵中,这将是结果。因此,为了将两个矩阵相乘,则第一矩阵的列数必须等于第二矩阵的行数。
> matrix-matrix multiplication
如果我们有尺寸为mxn的矩阵A,并将其乘以尺寸为nxo的矩阵B,则所得矩阵将为尺寸为mxo:
> matrix-matrix multiplication
矩阵C的第i列是通过将A乘以B的第i列获得的(对于i = 1,2,…,o)。在矩阵向量乘法中,由于向量只有1列,所以o值为1。
矩阵-矩阵乘法的几何直觉:
我们可以将矩阵矩阵乘法视为两个(或多个)空间线性变换,一个接一个地应用。这些线性变换按特定顺序应用:从右到左。换句话说,如果我们具有AxBxC的矩阵-矩阵乘法,则首先发生在矩阵C中编码的线性变换,然后是矩阵B,然后是矩阵A,类似于函数的组合:h(g(f(x)))。此矩阵与矩阵相乘所得的矩阵称为复合矩阵,因为应用此复合矩阵中编码的线性变换将导致与应用C,B,然后A的线性变换相同的净线性变换。
矩阵乘法属性
为了解释这些属性,我们首先将其与实数(标量)相关联。
可交换的
对于实数,乘法是可交换的。顺序无关紧要。换句话说,2 x 5 = 5 x 2。
相反,矩阵乘法通常不是可交换的。因此,通常,对于矩阵A和B:A x B不等于B xA。
注意:AB = BA的唯一时间是矩阵乘以其单位矩阵,这将在后面讨论。
如果您阅读上面的矩阵-矩阵乘法的几何直觉,那么这应该是有道理的。如果我们先应用B的线性变换,然后应用A,则空间的最终净线性变换将与先应用A,然后应用B的结果不同。
联想的
对于实数,乘法是关联的。换句话说,无论数字如何分组,我们都可以相乘。例如,如果我们有2x5x4,我们可以先将2和5相乘,然后将结果乘以4,或者可以先将5和4相乘,然后再将结果乘以2。这两种方法的答案都是相同的。
(2x5)x4 = 2x(5x4)
矩阵乘法也是关联的。换句话说,如果我们有矩阵A,B和C,则:
Ax(BxC)=(AxB)xC
同样,使用矩阵矩阵乘法的几何直觉,这应该是有道理的。由于在这两种情况下,我们都应用了从右到左的线性变换。
分配式
对于实数和矩阵,乘法都是分布式的。换句话说,对于实数:2(5 + 4)= 2 * 5 + 2 * 4。对于矩阵A,B和C:A(B + C)= A * B + A * C。
身份矩阵
处理实数时,1是要乘的恒等式。换句话说,对于任何实数z,数字1乘以z将等于z乘以1,即等于z。因此,身份属性1意味着任何实数z乘以1等于z,从而允许z保留其身份。
> multiplicative identity
我们也有身份矩阵。换句话说,对于任何矩阵A,都会有一个单位矩阵I,当与矩阵A相乘时,等于矩阵A。
AI = IS = A
身份矩阵是平方矩阵,这意味着行数等于列数。单位矩阵用I表示,有时用Inxn表示,其中nxn是单位矩阵的维数。对于维数为mxn的矩阵,其单位矩阵为维数nxn,这应该是有意义的,因为对于要相乘的矩阵,第一个矩阵的列数必须等于第二个矩阵的行数。
身份矩阵的示例:
> identity matrices
正如我们在上面看到的,身份矩阵(n = 1时除外),对角线为1,其他所有位置为零。
如前所述,通常,矩阵乘法不是可交换的,除非它是一个矩阵乘以其单位矩阵。
注意:由于A是一个mxn矩阵,因此左侧的单位矩阵的维数为nxn,但是在中间,单位矩阵的维数为mxm,这是因为矩阵A在矩阵矩阵乘法中位于第一位。
使用几何直觉,我们可以认为单位矩阵不会引起线性变换。因此,顺序无关紧要,因为在任何情况下(A * I或I * A),结果都是在矩阵A中编码的线性变换。
矩阵求逆和矩阵转置运算
我们应该熟悉两个矩阵特殊运算:矩阵逆运算和矩阵转置。
逆矩阵
现在我们知道,数字1是实数空间中的标识,因为任何实数的1倍等于其自身。数字也可以有反数。一个数字乘以其倒数等于其标识。
> number times its inverse equals 1
例如:2乘2 ^ -1等于1。请记住2 ^ -1只是1/2。所以2乘以1/2就是1。因此,2的倒数是1/2,并且其标识是数字1。
但是请记住,并非每个数字都有一个倒数。例如,数字0没有逆数,因为0 ^ -1或1/0是未定义的(不能除以零)。
> a matrix times its inverse equals its identity matrix
矩阵也可以具有逆。如果矩阵A是一个mxm矩阵(意味着它是一个方矩阵,#rows =#columns),则它可能具有逆函数。就像实数一样,我们将矩阵提高到-1的幂来表示逆。一个矩阵乘以它的逆等于它的单位矩阵。
注意:没有逆矩阵或不可逆矩阵称为奇异矩阵或简并矩阵。
为什么矩阵逆很重要?
假设我们有一个矩阵矩阵乘法:A * B = C,我们知道A和C的值,但不知道B的值。如果它们是实数,则将方程的两边除以A来求解B.但是,我们不能对矩阵进行除法。因此,我们可以将等式的两边乘以1 / A(A ^ -1),这是矩阵A的逆。这样,我们得出以下结果:
A * B = C(A ^ -1)A * B =(A ^ -1)CIB =(A ^ -1)CB =(A ^ -1)C
矩阵转置
对矩阵进行转置意味着该矩阵的行成为列。因此,矩阵A的第一行成为A ^ T的第一列(矩阵A的转置),矩阵A的第二行成为A ^ T的第二列。因此,如果矩阵A为mxn矩阵,则其转置或A ^ T为nxm矩阵。
> matrix transpose
我们可以想象在矩阵A上绘制45度轴,然后沿该轴旋转(或翻转)矩阵A以获得转置。
以列向量的转置给我们一个行向量:
> column and row vectors
结论
在本教程中,我们学习了标量,向量和矩阵。我们了解了矩阵是如何仅由行和列组成的二维数组,而矢量只是矩阵的一种特殊情况,因为它们只有一列。我们学习了如何执行某些数值运算的机制,例如矩阵-矩阵加法和减法,标量乘法和除法,矩阵-矢量乘法和矩阵-矩阵乘法。此外,我们了解到,就像本身是任何实数的1倍一样,我们了解到矩阵乘以其单位矩阵也是其自身。我们还了解到,矩阵乘以其逆就是其恒等矩阵。然后,我们看到了如何对矩阵进行转置,并认为列向量的转置是行向量。最后,我们对其中一些数字运算的几何直觉有了非常简要的了解。
参考文献
吴恩达的Coursera机器学习课程
3Blue1Brown线性代数的本质
(本文由闻数起舞翻译自Luay Matalka的文章《Linear Algebra for Machine Learning》,转载请注明出处,原文链接:https://towardsdatascience.com/linear-algebra-for-machine-learning-22f1d8aea83c)