Matrices and Vectors(矩阵和向量)
我们先复习一下线性代数的知识 在这段视频中 我会向大家介绍矩阵和向量的概念
矩阵
是指 由数字组成的矩形阵列 并写在方括号中间 例如 屏幕中所示的一个矩阵 先写一个左括号 然后是一些数字 这些数字可能是 机器学习问题的特征值 也可能表示其他意思 不过现在不用管具体的数字 然后我用右方括号将其括起来 这样就得到了一个矩阵 接下来 看一下其他矩阵的例子 依次写下1 2 3 4 5 6 因此实际上矩阵 可以说是二维数组的 另一个名字
另外 我们还需要知道的是
矩阵的维度
=矩阵的行数乘以列数 具体到这个例子 看左边 包括1 2 3 4共4行 以及2列 因此 这个例子是一个 4 × 2的矩阵 即行数乘以列数 4行乘2列右边的矩阵有两行 这是第一行 这是第二行 此外包括三列 这是第一列 第二列 第三列 因此 我们把 这个矩阵称为一个 2 × 3维的矩阵 所以我们说这个矩阵的维度是2 × 3维
- 有时候大家会发现 书写有些不同 比如左边的矩阵 写成了
R4 × 2
具体而言 大家会将该矩阵称作 是集合R4×2的元素 因此 也就是说 这个矩阵 R4×2代表所有4×2的矩阵的集合 而右边的这个矩阵 有时候也写作一个R2×3
的矩阵 因此 如果你看到2×3 如果你看到 有些地方表达为 4×2的或者2×3的 一般都是指 一个特定维度的矩阵
- 接下来 让我们来谈谈如何表达矩阵的某个特定元素 这里我说矩阵元素 而不是矩阵 我的意思是 矩阵的条目数 也就是矩阵内部的某个数
- 所以 标准的表达是 如果A是 这个矩阵 那么A下标 ij 表示的是 i j对应的那个数字 意思是矩阵的第i行和第j列 对应的那个数
- 例如
A11
表示的是第1行 第1列
所对应的那个元素 所以这是 第一行和第一列 因此A11 就等于 1402 另一个例子A12
表示的是第一行第二列
对应的那个数 所以A12 将等于191
- 我希望你不会犯下面的错误 但如果你这么写的话 如果你写出了
A43
这应该表示的是第四行第三列
而你知道 这个矩阵没有第三列 因此这是未定义的
- 接下来让我们来谈谈什么是向量 一个
向量
是一种特殊的矩阵 向量是只有一列的矩阵 所以 你有一个n×1
矩阵 还记得吗 N是行数 而这里的1 表示的是列数 所以 只有一列的矩阵 就是我们所说的向量 - 因此 这里是一个向量的 例子 比如说 我有 n = 4 个元素
- 所以我们也把这个称为 另一个术语是 这是一个四维的向量 也就意味着 这是一个含有 4个元素的向量 而且 前面我们讲 矩阵的时候提到过 这个符号
R3×2
表示的是一个3行2列的矩阵
而对于这个向量 我们也同样可以 表示为集合R4
因此 这个R4是指 一个四维向量的集合 - 接下来让我们来谈谈如何引用向量的元素 我们将使用符号
yi
来代表向量y的第i个元素
所以 如果这个向量是y 那么y下标i
则表示它的第i个元素
所以y1表示第一个元素 460 y2表示第二个元素 232 这是第二个元素 还有y3等于 315 等等 只有y1至y4是有意义的 因为这定义的是一个四维向量
- 此外 事实上 有两种方法来表达 某个向量中某个索引 是这两种
- 有时候 人们会使用
1-索引
有时候用0-索引
因此 左边这个例子 是一个1-索引向量
它的元素写作y1 y2 y3 y4
而右边这个向量 是0-索引
的一个例子 我们的索引从下标0开始
因此 元素从y0至y3
- 对于很多机器学习的应用问题来说 0-索引向量为我们提供了一个更方便的符号表达 所以你通常应该 做的是 除非特别指定 你应该默认我们使用的是
1-索引法
表示向量 在本课程的后面所有 关于线性代数的视频中 我都将使用1-索引法
表示向量 - 按照惯例 通常在书写矩阵和向量时 大多数人会使用
大写字母
来表示矩阵
因此 我们要使用 大写字母 如 A B C X 来表示矩阵 而通常我们会使用小写字母
像a b x y
来表示数字 或是原始的数字 或标量 或向量
这是实际的使用习惯 我们也经常看到 使用小写字母y 来表示向量 但我们平时 是用大写字母来表示矩阵
Matrices and Vectors笔记
- 矩阵是二维数组
上面的矩阵有四行三列,所以它是一个4 x 3的矩阵
- 向量是·一列和许多行·的矩阵:
所以向量是矩阵的一个子集。上述向量是一个4×1矩阵。
- 表示法和条款:
- $A_{ij}$引用矩阵A的第i行和第j列中的元素。
- 具有’n’行的矢量被称为’n’维矢量。
- $v_i$指矢量的第i行中的元素。
- 一般来说,我们所有的向量和矩阵都是1索引的。请注意,对于某些编程语言,这些数组是0索引的。
- 矩阵通常用大写字母表示,而向量则用小写字母表示。
- “标量”表示对象是单个值,而不是矢量或矩阵。
- 是指一组标量实数。
- 是指实数的n维向量的集合。
Addition and Scalar Multiplication
在这段视频中 我们要讲 我们将讨论矩阵的加法和减法运算 以及如何进行 数和矩阵的乘法 也就是标量乘法 让我们从下面这个例子开始
- 假设有这样两个矩阵 如果想对它们做求和运算 应该怎么做呢? 或者说 矩阵的加法到底是如何进行的? 答案是 如果你想将两个矩阵相加 你只需要将这两个矩阵的 每一个元素都逐个相加 因此 两个矩阵相加 所得到的结果 就是一个新的矩阵 它的第一个元素 是1和4相加的结果 因此我们得到5 接下来是第二个元素 用2和2相加 因此得到4 然后是3加0得到3 以此类推 这里我用不同颜色区别一下 接下来右边这一列元素 就是0.5 10和2
- 这里大家不难发现 只有相同维度的两个矩阵才能相加 对于这个例子而言 一個3 x 2的矩陣 也就是说矩阵的行数为3 列数是2 因此是3行2列 第二个矩阵 也是一个3行2列的矩阵 因此这两个矩阵相加的结果 也是一个3行2列的矩阵 所以你只能将相同维度的矩阵 进行相加运算 同时 所得到的结果 将会是一个新的矩阵 这个矩阵与相加的两个矩阵维度相同
- 反过来 如果你想将这样两个矩阵相加 这是一个3行2列的矩阵 行数为3 列数为2 而这一个是2行2列的矩阵 那么由于这两个矩阵 维度是不相同的 这就出现错误了 所以我们不能将它们相加 也就是说 这两个矩阵的和是没有意义的 这就是矩阵的加法运算
- 接下来 我们讨论矩阵和标量的乘法运算 这里所说的
标量
可能是一个复杂的结构 或者只是一个简单的数字 或者说实数 标量在这里指的就是实数 如果我们用数字3来和这个矩阵相乘 那么结果是显而易见的 你只需要将矩阵中的所有元素 都和3相乘 每一个都逐一与3相乘 因此 1和3相乘 结果是3 2和3相乘 结果是6 最后3乘以3得9 我再换一下颜色 0乘以3得0 3乘以5得15 最后3乘以1得3 这样得到的这个矩阵 就是左边这个矩阵和3相乘的结果 我们再次注意到 这是一个3行2列的矩阵 得到的结果矩阵 维度也是相同的 也就是说这两个矩阵 都是3行2列 这也是3行2列
- 另外 你也可以写成另一种方式 这里是3和这个矩阵相乘 你也可以把这个矩阵写在前面 把左边这个矩阵照抄过来 我们也可以用这个矩阵乘以3 也就是说 3乘以这个矩阵 和这个矩阵乘以3 结果都是一回事 都是中间的这个矩阵
- 你也可以用矩阵除以一个数 那么 我们可以看到 用这个矩阵除以4 实际上就是 用四分之一 来和这个矩阵相乘 4 0 6 3 不难发现 相乘的结果是 1/4和4相乘为1 1/4和0相乘得0 1/4乘以6 结果是3/2 6/4也就是3/2 最后1/4乘以3得3/4 这样我们就得到了 这个矩阵除以4的结果 结果就是是右边这个矩阵
- 最后 我们来看一个稍微复杂一点的例子 我们可以把所有这些运算结合起来 在这个运算中 需要用3来乘以这个向量 然后加上一个向量 再减去另一个向量除以3的结果 让我们先来整理一下这几项运算 首先第一个运算 很明显这是标量乘法的例子 因为这里是用3来乘以一个矩阵 然后这一项 很显然这是另一个标量乘法 或者可以叫标量除法 其实也就是1/3乘以这个矩阵 因此 如果我们先考虑这两项运算
- 那么我们将得到的是 我们看一下 3乘以这个矩阵 结果是3 12 6 然后和中间的矩阵相加 也就是0 0 5 最后再减去1 0 2/3 同样地 为了便于理解 我们再来梳理一下这几项 这里的这个加号 表明这是一个矩阵加法 对吧? 当然这里是向量 别忘了 向量是特殊的矩阵 对吧? 或者你也可以称之为 向量加法运算 同样 这里的减号表明 这是一个矩阵减法运算 但由于这是一个n行1列的矩阵 实际上是3行1列 因此这个矩阵 实际上是也一个向量 一个列向量 因此也可以把它称作向量的减法运算 明白了吗
- 最后再整理一下 最终的结果依然是一个向量 向量的第一个元素 是3+0-1 就是3-1 也就是2 第二个元素是12+0-0 也就是12 最后第三个元素 6+5-(2/3) 也就是11-(2/3) 结果是10又三分之一 关闭右括号 我们得到了最终的结果 这是一个3行1列的矩阵 或者也可以说是 一个维度为3的向量 这就是这个运算式的计算结果
- 所以 你学会了矩阵或向量的加减运算 以及矩阵或向量跟标量 或者说实数 的乘法运算 到目前为止 我只介绍了如何进行 矩阵或向量与数的乘法运算 在下一讲中 我们将讨论一个更有趣的话题 那就是如何进行 两个矩阵的乘法运算
加法和标量乘法笔记
Matrix Vector Multiplication
在本节课的视频中 讨论如何 将两个矩阵相乘 我们将从矩阵相乘的 特例 向量相乘开始 即 一个矩阵与一个向量相乘
- 让我们从一个例子开始 左边是一个矩阵 右边是一个向量 假如我们 将这个矩阵 与这个向量相乘 结果会怎样呢? 我先快速计算出结果 然后我们再 退回去 查看每一个步骤 很明显 相乘的结果 将是 一个向量 我先将这部分完成 然后再来解释 我刚刚是怎么做的
- 要计算出结果向量的第一个元素 我将会 取这两个数字 并把他们 把矩阵 A 的 然后把对应相乘的结果加起来 取1乘以1 同时取3 乘以 5 计算得到1和15 相加得16 我将在这儿写上16 要计算第二行 的第二个元素 我需要将第二行 与这个向量相乘 所以我得到 4乘以1 加上0乘以5 结果等于4 因此在这里写上4 对于最后一个元素 我需要计算(2, 1) 乘以 (1, 5) 所以先计算2乘以1 再加上 1乘以5 最后结果为7 所以我在这儿写上7
- 事实证明 3x2的矩阵 和一个2x1的矩阵 即一个二维向量 相乘的结果 我们得到的 将是一个3×1 的矩阵 这个3×1的矩阵 就是这么得来的 也就是一个三维向量
- 我想 我可能计算时做得很快 你们并不一定能够 自己重复这个过程 下面让我们更加仔细的看一下 刚刚我做了些什么以及一个向量 和一个矩阵相乘的计算过程是怎样的 下面详细介绍了如何 计算一个矩阵与一个向量相乘 假设这是一个矩阵A 我希望将它乘以 一个向量x 结果记为 向量y 所以 矩阵A是一个 m×n维矩阵 有m行和n列 我们让它与一个 n×1的矩阵相乘 换言之 一个n维向量 明显地 这里的两个n是相等的 也就是说 这个矩阵的列数 有n列 必须要与 另一个相乘矩阵的行数相同 即必须匹配这个向量的维数。 这样相乘的结果 将会是一个n维 向量y m 将与 矩阵A的行数 相同
- 那么如何计算这个向量y呢? 事实上 计算y的过程可以分解为 计算 yi 的值 让 A 的第 i 行元素 分别乘以向量 x 中的元素 并且相加 就是这样子 为了得到 y 的第一个元素 无论是多少 我们将会 把矩阵 A 的 第一行元素 每次同一个向量 x 的元素 相乘 我取第一个数 与第一个数相乘 然后取第二个数同第二个数相乘 取第三个数 与第三个数相乘 直到全部乘完 最后 将这些相乘的结果 加起来 这样我们就得到了 y 的第一个元素
- 然后我们 来计算 y 的第二个元素 接下来我们 取A的第二行 然后重复整个过程 现在 我们取A的第二行 将它 与其他元素相乘 也就是 x 的元素 将结果相加 这样我们就得到了 y 的第二个元素 依次计算下去 我们取A得第三行 逐行地与 向量x相乘 将结果加起来 然后得到第三个元素 以此类推 直到最后一行
- 所以 上述就是具体步骤 让我们再举一个例子 在这个例子中 我们先看一下矩阵的维度 左边是一个 3×4矩阵 右边是一个四维向量 也就是4×1矩阵 所以这样相乘的结果 将是 一个三维向量 我们在写的时候要给这个向量 留三个元素的空间
- 现在让我们一起来算一下 首先是第一个元素 我将会取这四个数 并将它们与向量x相乘 所以我需要计算 1×1 加上2×3 加1×2 加5×1 等于 1 +6 再加上2 +6 也就是14 而对边距来说 第二个元素 我要 取这一行 然后与向量 (0×1)+3相乘 我们将得到 0×1 + 3×3 0×2 + 4×1 等于 9 + 4 也就是13 最后 对最后一个元素 我将取最后一行 所以我得到了-1×1 -2×3 加上0×2 加上0×1 所以 我们将得到-1和-6 相加得 -7 明白? 所以我最后的答案是 一个向量 其中的元素为 14 我将不给这些字涂上颜色 13 -7
- 如前面说的 计算结果是一个3×1的矩阵 上述就是矩阵和向量相乘的方法 我知道 这张幻灯片上内容很多 如果你在看的过程中 不是很确定这些数字怎么来的 你可以随时暂停视频 慢慢地 仔细琢磨 整个计算过程 尽量 确保自己理解了 得到14 13 11 这些结果的每一个步骤
- 最后 我将教你们一个
小技巧
假设我 有四间房子 这些房子有四种大小 我有一个 假设函数 用于预测房子的价格 我需要计算 四间房子的大小作为 h(x) 的大小即预测的房价 这里有一种简单的方法 可以同时计算四间房子的预测价格
- 我可以将它简单地 利用 矩阵向量相乘的思想来计算 所以 对于这个问题我会这么计算 首先我要构建一个 如下所示的矩阵 元素是1 1 1 1 然后我把四个房子的大小 写在这儿 我还需要构造一个向量 我的向量 它将是一个 二维向量 即 40 和 0.25 这是预测函数的两个系数 θ0 和 θ1 接下来
- 我要做的就是 将我构造好的矩阵和向量相乘 这是相乘符号 我将得到什么结果呢? 左边是一个 4×2 矩阵 右边是一个 2×1 矩阵 所以结果 将是一个4×1向量 对吧 所以 让我在幻灯片上写上 结果将是 一个4×1的矩阵 输出结果也就是 一个四维向量 让我来把它写出来 用四个实数表示我的四个元素 事实上 结果的第一个元素 我的计算方式 是 将这一行同我的向量相乘 结果将是 -40×1 + 4.25×2104 顺便说一下 在先前的幻灯片中 我写的是 1× (-40) + 2104 × 0.25 但是顺序无关紧要 对吧? -40×1 和 1×(-40)是一样的 这第一个元素 就是当x为2104时的 h 值 因此 这是我的第一个房子的预测价格 那么 第二个元素呢? 你应该已经想到了 我要怎么计算第二个元素了 对吧? 我要把这个乘以我的向量 所以就是 -40×1 + 0.25×1416 这就是x为1416的 h 对吧? 这是第三个 和第四个 后面就依次计算这个4×1矩阵的第三和第四个元素 得出结果 这里 我画了绿色边框的部分 是一个实数 对吧? 它是一个实数 这里 我画了洋红色边框的部分 紫色 洋红色 边框 是一个实数 对吧? 所以右边 最右边 就是一个 4×1矩阵 是一个4维向量
- 这个例子的一个小技巧是 当你 在程序中实现这个过程的时候 当你有四间房子 你想使用自己的预测函数 来预测房子的价格 完成这些工作 你可以用一行代码搞定 我们后面会谈到Octave 以及编程语言 你可以只写一行代码就完成整个过程 你可以这样写
prediction = DataMatrix × Parameters
对吧 数据矩阵是这一部分 参数 是这一部分 这就是一个矩阵向量乘法
- 如果你这么做了 这个变量prediction 抱歉 我的字写得很潦草 只需要实现 这一行代码 如果你有一个做矩阵向量相乘的函数库的话 如果你这样做的话 右侧的prediction变量就会形成 一个4维向量 给你所有的预测价格 另一种计算方式是 作为一种矩阵向量相乘的方式 实际上就是一种 通过for循环 for 1 to 4 对吧? 如果说你有一千间房子 就将是 for 1 to 1000 或者别的任何数 然后如果i等于的话 你必须写一个 有一个假设条件 I相等 然后需要做 比矩阵向量相乘多得多的工作 当你有 大量的房子的时候 如果你试图预测 不只是四座 或许是一千座房子的时候 事实证明 当你使用矩阵向量相乘的方法时 在计算机中 使用任何语言 不仅仅是Octave 还有C++ Java Python 等高级语言 以及其他语言 都可以很快的实现 事实证明 像左边这样子写代码 不仅可以 简化你的代码 现在你只需要 写一行代码 而不是一堆代码 而且 还有一个微妙的好处 我们后面将会了解到 就是基于你所有的房子 这样做计算效率将会更高 比你像右边那样 用代码实现公式 的方式效率 将会高很多 我后面在讨论向量化的时候 会详细地 讨论这个问题 所以 通过这种方式计算预测值 不仅代码更加简洁 而且效率更高 基本用不上 我们在后面 在其他模型中 计算实例的回归的时候 将会有效地利用到这一讲的内容 在接下来的视频中 我将会从特殊到一般 讲讲矩阵与矩阵相乘的情况
矩阵向量乘法笔记
- 矩阵和向量的乘法如图:m×n 的矩阵乘以 n×1 的向量,得到的是 m×1 的向量
- 举例
Matrix Matrix
在这段视频中我们将会讨论 矩阵 矩阵的乘法以及 如何将两个矩阵相乘 我们会使用这样一种方法 在线性回归中用以解决 参数计算的问题 这种方法会把θ0、θ1等参数都放在一起来计算 也就是说 我们不需要一个迭代的梯度下降算法
- 当我们谈到这个算法的时候 就会发现矩阵以及矩阵间的乘法运算 是你必须理解的关键步骤之一 所以让我们像往常那样 从一个例子开始 比方说 我有两个矩阵 我想将它们相乘 让我先只是按照这个例子做一遍(乘法) 然后告诉你这其中运算的细节
- 那么 我要做的第一件事是 我先把 右边这个矩阵的第一列 提取出来 然后我将会把 左边的这个矩阵和 之前取出来的这一列(前面提过的,向量)相乘 这只是第一列 是吧? 然后我们可以看到 如果我 这么做 我就会得到向量(11,9) 所以这是与上个视频的矩阵 和向量的乘法是一样的 我已经提前算出了这个结果 是(11,9) 那么 之后的第二件事 我要做的就是 我将把第二列再单独提出出来 右边这个矩阵的第二列 然后我将要把它和 左边这个矩阵相乘 是的吧 所以 这就是那个矩阵 用右边的第二列 来乘以这个矩阵 因此 同样的 这是一个矩阵和 向量的乘法运算 这 就是你从上一个视频所学到的 如果你这么做 把这个矩阵和这个向量相乘 你会得到 (10,14)这个结果 顺便说一下 如果你想练习 矩阵和向量的乘法运算 那么就先暂停下视频 自己算一算结果对不对 好吧 现在我仅仅需要 将得到的这两个结果放在一起 那么这就是我的答案了 那么 我们可以看到 计算结果是 一个2 x 2的矩阵 我用来填充这个矩阵的方法 就是 把我的(11,9) 填在这里 把(10,14)填在 第二列 是的吧? 所以 这就是如何 将两个矩阵相乘的 详细方法与过程 每次你只需要看 第二个矩阵的一列 然后把你的答案拼凑起来
- 再次强调下 我们将一步步的来计算 几秒中的时间里需要非常仔细 但我也要指出 我也要指出的是 第一个例子是一个2X3矩阵 乘以一个 3x2的矩阵 他们相乘 得到的结果 是一个2x2的 矩阵 我们将很快知道为什么是这个结果 好的 这是计算的技巧 让我们再看看 这其中的细节 看看究竟发生了什么
- 下面就是详细的过程 我有一个矩阵A 我要把它乘以 矩阵B 其结果 会是一个新的矩阵C 并且你会发现你只能 相乘那些维度 匹配的矩阵 因此如果A是一个
m×n
的矩阵 就是说m行n列 我将要用它与 一个n×o
的矩阵相乘 并且实际上这里的n 必须匹配这里的这个n 所以第一个矩阵的列的数目 必须等于第二矩阵中的行的数目 并且相乘得到的结果 结果会是一个m×o
的矩阵 就像这个矩阵C这样
- 并且 在前面的视频中 我们所做的一切都符合这个规则 这是一种当矩阵B的o值 等于1的特殊情况(指的是矩阵和向量相乘) 明白了吗? 这是在B是一个向量的情况下 但是现在 我们要处理 O的值大于1的情况
- 所以 这里就是你怎样 把两个矩阵相乘 为了得到结果 我要做的就是 我将要取 B矩阵的第一列 把取出的这列看成一个向量 并乘以矩阵A 用B矩阵的第一列 这个计算结果将是 m×1的矩阵(也就是一个向量) 我们把结果先放在这里
- 然后 我将要取 B矩阵的 第二列 那么我会又得到一个n×1的向量 也就是 这里的这一列 这是正确的 n×1的矩阵 也就是n维的向量 我将要把这个矩阵 和这些n乘1的向量相乘 其结果将是 一个m维的向量 然后我会把结果先放在那里 依此类推 对吧?
- 那么 你知道的 我开始取第三列 把它和这个矩阵相乘 我又得到了一个M维向量 依此类推 直到你计算到了 最后一列 矩阵乘以 你取到的最后一列 就是C的最后一列 再说一遍 矩阵C的第i列 是根据把 矩阵A与 矩阵B的第i列 相乘得到的 结果 依次相加 从1,2到o依次相加的 对吧?
- 那么 我们在这里做一个总结 我们总结了我们为了 计算矩阵C所做的步骤 让我们再看一个例子 比方说我想把这两个矩阵相乘
矩阵乘法笔记
Matrix Multiplication Properties
矩阵乘法的性质笔记
Inverse adn Transpose
- 只有方阵才有
逆阵
- Octave求逆阵