- [Week 1] Machine-learning Notes
- [Week 1] Machine-learning Notes
- [Week 1] Machine-learning Notes
- [Week 1] Machine-learning Notes
- [Week 3] Machine-learning Notes
- [Week 3] Machine-learning Notes
- [Week 3] Machine-learning Notes
- [Week 3] Machine-learning Notes
- [Week 2] Machine-learning Notes
- [Week 2] Machine-learning Notes
矩阵实际上是二维数组的另一个名字:而维度(Dimension of matrix)就是矩阵的行数乘以列数(一般分开说,比如4行2列,不说8维矩阵,只说4X2的矩阵,意思就是维度是4X2维,即4X2matrix,)。
但是矩阵在书写上也有些不同,如下:

也被称为集合R4X2的元素(an element of the set R 4 by 2)

A32代表的是第3行第2列的元素
向量(Vector)
向量是特殊的矩阵,一个向量是只有一列的矩阵(An n x 1 martix)
所以我们一般直接把向量的行数当作维数,一个4行的向量我们就称他为一个4维(4 dimension)的向量。即

另外,矩阵通常是使用大写字母来表示的。
回顾一下矩阵乘法(矩阵跟向量相乘)

一个小技巧:(很重要,尤其是在写程序的时候)
假设我有四间房子,这些房子有四种大小,现在有一个假设函数用于预测房子的价格,我需要计算四间房子的大小作为h(x)的大小,即预测的房价。
这里有一种简单的方法:可以同时计算四间房子的预测价格,将它简单地利用矩阵向量相乘的思想来计算,首先我要构建一个,如下所示的矩阵,第一列是是4个1, 然后把四个房子的大小写在第二里,再构造一个向量,一个 二维向量,即 40 和 0.25 这是预测函数的两个系数 θ0 和 θ1
接下来将构造好的矩阵和向量相乘,就是预测的结果矩阵了
这个例子的一个小技巧是:当你在程序中实现这个过程的时候,当你有四间房子,你想使用自己的预测函数,来预测房子的价格,完成这些工作,你可以用一行代码搞定,我们后面会谈到Octave 以及编程语言,你可以只写一行代码就完成整个过程,你可以这样写
prediction = DataMatrix × Parameters
在程序中即为,(注意这里,这个h是一个矩阵,求得的是所有训练集的预测值,不同于Note 5中多元的那个h,那个h求得是一个训练集的预测值,这两个h代表的数据是不一样的,不要搞混了。)
matrix_h = matrix_X * matrix_Theta
分别是预测结果矩阵、数据矩阵、参数矩阵。
这就是一个矩阵向量乘法,如果你这么做了,这个变量prediction
只需要实现这一行代码 如果你有一个做矩阵向量相乘的函数库的话 ,右侧的prediction变量就会形成 一个4维向量从而给你所有的预测价格。

另一种计算方式是:
作为一种矩阵向量相乘的方式 实际上就是一种 通过for循环 for 1 to 4 。
如果说你有一千间房子 就将是 for 1 to 1000 或者别的任何数 然后如果i等于的话 你必须有一个假设条件I相等,然后需要做比矩阵向量相乘多得多的工作,当你有大量的房子的时候如果你试图预测不只是四座,或许是一千座房子的时候:
事实证明,当你使用矩阵向量相乘的方法时,在计算机中,使用任何语言,不仅仅是Octave,还有C++,Java ,Python 等高级语言, 以及其他语言, 都可以很快的实现。
** 事实证明:像用矩阵相乘这样子写代码,不仅可以简化代码,现在只需要写一行代码,而不是一堆代码,而且还有一个微妙的好处,我们后面将会了解到,就是基于你所有的房子,这样做计算效率将会更高,比你像for循环那样,用代码实现公式的方式效率将会高很多 。后面在讨论向量化的时候,会详细地讨论这个问题,**
所以,通过这种方式计算预测值。 不仅代码更加简洁 而且效率更高
矩阵跟矩阵相乘
核心: 讨论如何将两个矩阵相乘是因为我们要用来在线性回归中解决参数计算的问题
由上一部分的小技巧的启发,我们可以把把θ0、θ1等参数都放在一起来计算,也就是说,我们不需要一个迭代的梯度下降算法,
更加实用的技巧:(在矩阵和矩阵的乘法中使用)
比方说,在这之前我们有四间房子预测其价格,但是现在我们有三个不同的竞争假设集,因此如果想要去把这三个竞争假设集用来适应这4个房屋的数据,我们可以使用这里的矩阵乘法来计算。
左边是我通常使用的矩阵,这与我上个视频 一样,这些值就是 我的住房价格 我把这些值也放在左边 那么 我要去做的就是,构造另一个矩阵
这个矩阵的第一列 是-40 0.25 第二列是 (200.0.1) 以此类推。
那么 实际上通过 构建这两个矩阵 你就可以 快速的把这三个假设集 应用到所有四个 房子的尺寸中来计算价格了。
所有的12种预测到的价格都是通过你的假设集以及你的四个房屋数据集得到的。所以一次矩阵乘法操作就使你做出了12种预测。

更好的是,事实证明:为了做到矩阵间的乘法,有很多很好的线性代数库函数,都是为了做到这一点,为你实现矩阵乘法,当下最流行的 编程语言中的前十名都有很棒的线性代数函数库。这是很好的事情,我们能够在高度优化下,做到矩阵和矩阵间高效的乘法,包括采取了一些优化处理的方式。如并行计算,如果你的电脑支持的话,当你的计算机有多个调度或者多个处理器。一个处理器内有时存在并行的计算我们称之为**SIMD Parallelism **。
在计算机管理机制下。你应该有非常不错的免费类库,可以用来做 效的矩阵间的乘法计算,因此你就能方便地计算有很多假设集时的预测数据。
特性
- 矩阵乘法不满足交换律:很简单,首先维度就会发生变化(但是当一方是单位矩阵的时候是满足交换律的)
- 满足结合律。
- 对于一个矩阵I,如果1 x I = Z x I = I,那么这个I就是一个单位矩阵(Identity matrix)
4. 如果A是一个方阵(mxm),那么它乘以它的逆,等于单位矩阵.(另外,如果一个方阵的元素都是0,那么它没有逆矩阵),事实上,只有方阵才有逆矩阵
Paste_Image.png
- 逆矩阵不存在的矩阵,一个专有名词是退化矩阵或者奇异矩阵(singular或者degenerate)

网友评论