需要更深入地学习机器学习及其算法,线性代数的一些基础的知识技能是有必要的。
矩阵-Matrics
矩阵
如果你知道数组,或许可以帮助理解矩阵。
比如:
$$
A=\left [
\begin{matrix}
1 \\ 2 \\ 3
\end{matrix}
\right ]
$$
这就是一个矩阵,也可以说是一个数组,其中的每一个元素,可以用序号表示:$ A[\ i\ ] $
在Pro.Ng
机器学习课程中,我们使用 $1$ 开始的序列模式1-indexed
(即,$i$ 从 $1$ 开始),尽管很多编程语言会使用 $0$ 开始的序列模式0-indexed
。
矩阵的行Rows
和列Cols
矩阵就像一个二维数组,行和列构成了矩阵的大小
Size
。
比如:
$$
B=\left [
\begin{matrix}
1 & 2 \\
3 & 4 \\
5 & 6
\end{matrix}
\right ]
$$
这是一个$3×2$的矩阵,或者说是一个行维有$3$个元素,列维有$2$个元素的数组,第$2$行第$1$列的元素可以表示为:$B_{21}$,或者是:$B[1][0]$(数组形式,0-indexed
)
只有一列的矩阵,又称之为向量 ($Vector$),如:
$$
v=\left [
\begin{matrix}
1 \\ 2 \\ 3
\end{matrix}
\right ]
$$
$PS:$ 虽然形式上类似于二维数组,但是实际上,矩阵可以表达的维度是没有限制的。
在Octave中练习矩阵
下面就是一些练习,在 $Octave$ 里试试吧!
% The ; denotes we are going back to a new row. |
矩阵运算
机器学习算法里有着巨大的运算量,普通的运算方式必然会带来巨大的开销,利用矩阵,不仅可以优化运算,直观上的美观以及阅读性都能得到很大的提升。不过首先,我们需要知道矩阵是如何运算的。
矩阵的加法
必须是相同大小的矩阵,才可以进行加法运算。
比如:
$$
\left [
\begin{matrix}
1 & 2 \\ 3 & 4
\end{matrix}
\right ]+
\left [
\begin{matrix}
5 & 6 \\ 7 & 8
\end{matrix}
\right ]=
\left [
\begin{matrix}
1+5 & 2+6 \\ 3+7 & 4+8
\end{matrix}
\right ]=
\left [
\begin{matrix}
6 & 8 \\ 10 & 12
\end{matrix}
\right ]
$$
对应位置的元素相加,得到与原来两个矩阵大小Size
相同的矩阵。
大小不同的矩阵无法执行加法运算:
$$
\left [
\begin{matrix}
1 \\ 2 \\ 3
\end{matrix}
\right ]+
\left [
\begin{matrix}
4 \\ 5
\end{matrix}
\right ]…×
$$
或者是:
$$
\left [
\begin{matrix}
1 \\ 2 \\ 3
\end{matrix}
\right ]+
\left [
\begin{matrix}
4 & 5 & 6
\end{matrix}
\right ]…×
$$
都是不允许的。
矩阵的数乘
相同的 $n$ 个矩阵相加,即矩阵的数乘。
比如:
$$
2×\left [
\begin{matrix}
1 & 2 & 3
\end{matrix}
\right ]=
\left [
\begin{matrix}
1 & 2 & 3
\end{matrix}
\right ]+
\left [
\begin{matrix}
1 & 2 & 3
\end{matrix}
\right ]=
\left [
\begin{matrix}
2 & 4 & 6
\end{matrix}
\right ]
$$
根据规律,可以对每一个元素数乘:
$$
2×\left [
\begin{matrix}
1 & 2 & 3
\end{matrix}
\right ]=
\left [
\begin{matrix}
2×1 & 2×2 & 2×3
\end{matrix}
\right ]
$$
在Octave中练习矩阵运算(一)
下面是一些例子,请用 $Octave$ 尝试一下。
% Initialize matrix A and B |
矩阵的乘法
矩阵乘法要求相乘的矩阵 $A×B$ ,$A的列数=B的行数$,顺序不可逆。
比如:
$$
\left [
\begin{matrix}
1 & 2 & 3
\end{matrix}
\right ]×
\left [
\begin{matrix}
4 & 5 \\ 6 & 7 \\ 8 & 9
\end{matrix}
\right ]=
\left [
\begin{matrix}
1×4+2×6+3×8 & 1×5+2×7+3×9
\end{matrix}
\right ]=
\left [
\begin{matrix}
40 & 46
\end{matrix}
\right ]
$$
乘得的矩阵有 $A的行数$ 和 $B的列数$ ,亦即:
$$
A_{m×p}×B_{p×n}=P_{m×n}
$$
需要注意的是:矩阵不满足交换律,即使两个矩阵行列数均相等,其相乘时的顺序也是不可逆的。
但是满足结合律,当然,结合律中无需行列数均等的限制,但依然需要保证满足乘法所需的行列数的要求(左矩阵的列数=右矩阵的行数)。
$$
A_{m×m}×B_{m×m} \ne B_{m×m}×A_{m×m}
$$
$$
A×B×C = A×(B×C)
$$
在Octave中练习矩阵运算(二)
练习一下矩阵的乘法运算吧!
% Initialize matrix A |
单位矩阵-Identity Matrics
行列数相同,左上至右下对角线上元素都是 $1$ ,其它元素都是 $0$ 的矩阵叫做单位矩阵($Identity\ Matrics$)。
比如:
$$
I_{3×3} = \left [
\begin{matrix}
1 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 &1
\end{matrix}
\right ]
$$
这是一个 $3$ 阶单位矩阵,任何列数为 $3$ 的矩阵乘以该单位矩阵,都不变。
比如:
$$
\left [
\begin{matrix}
1 & 2 & 3
\end{matrix}
\right ]×
\left [
\begin{matrix}
1 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 &1
\end{matrix}
\right ]=
\left [
\begin{matrix}
1 & 2 & 3
\end{matrix}
\right ]
$$
或是:
$$
\left [
\begin{matrix}
1 & 2 & 3 \\
4 & 5 & 6
\end{matrix}
\right ]×
\left [
\begin{matrix}
1 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 &1
\end{matrix}
\right ]=
\left [
\begin{matrix}
1 & 2 & 3 \\
4 & 5 & 6
\end{matrix}
\right ]
$$
根据矩阵乘法的规则尝试一下便可以推导出以上结果。
在 $Octave$ 中,单位矩阵可以简单声明 ,如:$eye(3)$,即声明了一个 $3$ 阶单位矩阵
矩阵的逆-Inverse
“逆“的概念,我觉得和“倒数”比较像:矩阵与该矩阵的逆的乘积等于单位矩阵 => 一个数与一个数的倒数乘积等于 $1$。
求逆的方法并不像求倒数那样简单,姑且不用考虑这个……因为 $Octave$ 已经有了求逆的函数: $inv(M)$
因为上面的概念,矩阵的逆,有时候又表示为:$A^{-1}$
$PS:$ 只有方阵
Square Matrics
才有逆。方阵:行数与列数相同的矩阵
矩阵的转置-Transpose
将一个矩阵沿着左上角$45º$对角线将其翻折,即得到其转置。
比如:
$$
\left [
\begin{matrix}
1 & 2 & 3 \\
4 & 5 & 6
\end{matrix}
\right ]^T=
\left [
\begin{matrix}
1 & 4 \\
2 & 5 \\
3 & 6
\end{matrix}
\right ]
$$
在 $Octave$ 中,转置的符号是 $’$ ,如:$A’$
在Octave中练习矩阵运算(三)
前面接触了单位矩阵、逆和转置,现在在 $Octave$ 中试试吧!
% Initialize random matrices A |
$PS:$ 值得注意的是:满足 $AI = IA$ 的矩阵 $A$ 也必须是方阵。
由此可以细化单位矩阵部分的结论:
$$
A_{m×n}×I_n=A_{m×n}=I_m×A_{m×n}
$$
左乘和右乘的单位矩阵存在差异。