机器学习中的线性代数

机器学习的线性代数概念概述

介绍

通过使用矩阵和向量以及线性代数库(例如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)

(0)

相关推荐

  • 把矩阵看作一个算子——从几何角度解释对称矩阵的三个最重要性质

    对称矩阵是沿对角线对称的矩阵.它是一个自伴算子(self-adjoint operator)(把矩阵看作是一个算子并研究其性质确实是一件大事).虽然我们不能直接从对称性中读出几何属性,但我们可以从对称 ...

  • NumPy视觉指南

    从头开始学习NumPy > Image credit: Author NumPy是一个基本库,受(PyTorch)的启发,大多数广泛使用的Python数据处理库都是基于(pandas)构建的,或 ...

  • 向量的四则运算

    许秋雨,2021.2.5 实数是实实在在的数,可以对应长度和时间等,这时每个实数都有实际意义.把所有的实数放在一起组成一个数域,即实数域.所有的实数可以做四则运算,任何两个实数相加和相乘都可交换,即对 ...

  • 机器学习中,有哪些特征选择的工程方法?

    解析: 本题解析来源:@jasonfreak,链接:http://www.cnblogs.com/jasonfreak/p/5448385.html 目录 1 特征工程是什么? 2 数据预处理 2.1 ...

  • 机器学习中的最优化算法总结

    导言 对于几乎所有机器学习算法,无论是有监督学习.无监督学习,还是强化学习,最后一般都归结为求解最优化问题.因此,最优化方法在机器学习算法的推导与实现中占据中心地位.在这篇文章中,小编将对机器学习中所 ...

  • 机器学习中踩过的坑,如何让你变得更专业?

    仅做学术分享,如有侵权,联系删除 转载于 :AI科技评论 踩过坑才知道哪些路不可行,有时候犯错误也能帮助我们变得更加专业. 数据科学家Archy de Berker 在本文中详述了他和周围同伴在机器学 ...

  • 一文详解机器学习中最好用的提升方法:Boosting 与 AdaBoost

    重磅干货,第一时间送达 选自 | towardsdatascience 参与 | Geek AI.Chita 本文经机器之心授权转载,禁二次转载 在 Kaggle 及其它机器学习任务中,集成方法非常流 ...

  • 机器学习中的维度灾难

    机器学习中的维度灾难

  • 干货!机器学习中,如何优化数据性能

    得益于覆盖各种需求的第三方库,Python在今天已经成为了研究机器学习的主流工具.不过由于其解释型语言的特性,在运行速度上往往和传统编译型语言有较大差距.特别是当训练数据集非常庞大时,很多时候处理数据 ...

  • 如何理解机器学习中的“偏差”和“方差”?

    假设有如下未知的曲线(用虚线画出表示我们并不真正清楚该曲线的具体方程),因为未知,所以下面称为"上帝曲线".在"上帝曲线"的附近会产生一些随机数据,这就是之后要 ...

  • 机器学习中的矩阵向量求导(一) 求导定义与求导布局

    在之前写的上百篇机器学习博客中,不时会使用矩阵向量求导的方法来简化公式推演,但是并没有系统性的进行过讲解,因此让很多朋友迷惑矩阵向量求导的具体过程为什么会是这样的.这里准备用几篇博文来讨论下机器学习中 ...

  • 深度特征合成:自动生成机器学习中的特征

    英文原文标题:Automated Feature Engineering in Python How to automatically create machine learning features ...