ML day02 - Linear algebraic foundations

205 阅读2分钟

线代基础

主要回顾一下矩阵和向量的有关知识。

一、矩阵

1. 定义

一个由数字组成的矩形数组。矩阵维数:行数 * 列数,如 AmnA^{m * n}

2. 矩阵元素表示方法

和计算机计数方式区别开来。AijA_{ij}表示 A 矩阵中 第 i 行 , 第 j 列 的元素(从 1 ) 开始。

例如:A=[102531]A = \left[\begin{array}{ll} 1 & 0 \\ 2 & 5 \\ 3 & 1 \end{array}\right],则 A12=0A_{1 2 } = 0, A21=2A_{21 } = 2

  • 注意

    一般使用大写字母来表示矩阵,用希腊字母来表示向量

3. 矩阵加法

  • 维度相同:对位相加即可

    例子:[102531]+[40.52501]=[50.541033]\left[\begin{array}{ll} 1 & 0 \\ 2 & 5 \\ 3 & 1 \end{array}\right]+\left[\begin{array}{cc} 4 & 0.5 \\ 2 & 5 \\ 0 & 1 \end{array}\right] = \left[\begin{array}{ll} 5 & 0.5 \\ 4 & 10 \\ 3 & 3 \end{array}\right]

  • 纬度不同:不能相加

4. 矩阵乘法

  • 乘以常数【也称为标量乘除】:

    将此常数与所有矩阵元素相乘即可,除法自然同理3×[102531]=[3061593][4063]/4=[101.50.75]\begin{array}{c} 3 \times\left[\begin{array}{ll} 1 & 0 \\ 2 & 5 \\ 3 & 1 \end{array}\right]= \left[\begin{array}{ll} 3 & 0 \\ 6 & 15 \\ 9 & 3 \end{array}\right]\\ {\left[\begin{array}{ll} 4 & 0 \\ 6 & 3 \end{array}\right] / 4= \left[\begin{array}{ll} 1 & 0 \\ 1.5 & 0.75 \end{array}\right]} \end{array}

  • 矩阵相乘

    两个矩阵能相乘的条件是:左矩阵的列数等于右矩阵的行数

    运算过程如下图:

    矩阵乘矩阵.PNG

    例如:[134021][15]=[1647]\left[\begin{array}{ll} 1 & 3 \\ 4 & 0 \\ 2 & 1 \end{array}\right]\left[\begin{array}{l} 1 \\ 5 \end{array}\right]= \left[\begin{array}{l} 16 \\ 4 \\ 7 \end{array}\right]​;[132401][130152]=[1110914]\left[\begin{array}{lll} 1 & 3 & 2 \\ 4 & 0 & 1 \end{array}\right]\left[\begin{array}{ll} 1 & 3 \\ 0 & 1 \\ 5 & 2 \end{array}\right]= \left[\begin{array}{lll} 11 & 10 \\ 9 & 14 \end{array}\right]​; [1325][0132]=[971512]\left[\begin{array}{ll} 1 & 3 \\ 2 & 5 \end{array}\right]\left[\begin{array}{ll} 0 & 1 \\ 3 & 2 \end{array}\right]= \left[\begin{array}{ll} 9 & 7 \\ 15 & 12 \end{array}\right].​

  • 矩阵和向量相乘:

    运算过程如下图:

矩阵乘向量.PNG

例如:[121503041200][1321]=[14137]\left[\begin{array}{cccc} 1 & 2 & 1 & 5 \\ 0 & 3 & 0 & 4 \\ -1 & -2 & 0 & 0 \end{array}\right]\left[\begin{array}{l} 1 \\ 3 \\ 2 \\ 1 \end{array}\right]=\left[\begin{array}{l} 14 \\ 13 \\ -7 \end{array}\right]

5. 矩阵乘法的特点

  • 交换律:两个自然数进行乘法运算时,顺序不改变结果。但是两个矩阵相乘时,修改顺序可能得到不同结果。只有矩阵进行标量相乘【也就是乘以常数】才有交换律。

    例如:[1325][0132]=[971512]\left[\begin{array}{ll} 1 & 3 \\ 2 & 5 \end{array}\right]\left[\begin{array}{ll} 0 & 1 \\ 3 & 2 \end{array}\right]= \left[\begin{array}{ll} 9 & 7 \\ 15 & 12 \end{array}\right]. [0132][1325]=[25719]\left[\begin{array}{ll} 0 & 1 \\ 3 & 2 \end{array}\right]\left[\begin{array}{ll} 1 & 3 \\ 2 & 5 \end{array}\right]= \left[\begin{array}{ll} 2 & 5 \\ 7 & 19 \end{array}\right].二者结果显然不同。

    并且,假设 A - M * N, B - N * M,则 A B 所得结果是 M 阶方阵,而B A 的结果是 N 阶方阵。

  • 结合律:矩阵乘法拥有结合律。即:A * B * C = (A * B) * C = A * (B * C)

  • 单位矩阵:主对角线元素都是 1,其余元素全为 0 。有时会省略 0 。对于任意矩阵A,有: EmE_{m} * A = A * EnE_{n}= A,其中 E 为 单位矩阵 。

6. 矩阵的逆和转置

  • 逆矩阵

    A - n * n, 且 |A| ! = 0,则 A 可逆,逆矩阵记为A1A^{-1}。即存在矩阵 B =A1 A^{-1},有: A B = B A = EnE_{n}

    Python 的 numpy 模块内置了矩阵求逆的运算:np.linalg.inv(A)。 0 矩阵没有逆矩阵。

  • 转置

    行变列、列变行。如下:

A=[121503041200] A = \left[\begin{array}{cccc} 1 & 2 & 1 & 5 \\ 0 & 3 & 0 & 4 \\ -1 & -2 & 0 & 0 \end{array}\right],则AT=[101232100540]A^{T} = \left[\begin{array}{cccc} 1 & 0 & -1 \\ 2 & 3 & -2 \\ 1 & 0 & 0 \\5 & 4 & 0 \\ \end{array}\right]。 设 B = ATA^{T}, 则 Bji=AijB_{ji} = A_{ij}

7. 应用

上一小结的线性回归预测房价:

  • 四个房价和一个假设函数:

    可以利用矩阵乘法来解决同时代入方程(避免使用循环):参数矩阵中的系数常数可以设置为 1

  • 四个房价和三个假设函数:

    将三个假设函数的θ0θ1\theta_{0} 和 \theta_{1}两个系数按横向拼接为系数矩阵,将样本参数纵向拼接为参数矩阵(常数项设为1),二者相乘得到结果。这样一次矩阵运算就进行了12次假设检验。

    结果矩阵的列分别代表了不同假设函数对应的样本预测值。

房价预测三种计算.PNG

二、向量

1. 定义:

一个 n * 1 或 1 * n 的矩阵

2. 向量元素表示法:

Y=[1234]Y =\left[\begin{array}{l} 1 \\ 2 \\ 3 \\4\\ \end{array}\right] ,则yiy_{i}表示第 i 个元素。如 y1=1y_{1} = 1, y2=2y_{2} = 2

3. 两种下标表示法:

  • 1 起始:一般数学表示法。Y=[y1y2y3y4]Y =\left[\begin{array}{l} y_{1} \\ y_{2} \\ y_{3} \\y_{4}\\ \end{array}\right]
  • 0 起始:计算机计数,便于计算机表示。Y=[y0y1y2y3]Y =\left[\begin{array}{l} y_{0} \\ y_{1} \\ y_{2} \\y_{3}\\ \end{array}\right]

4. 向量运算:

和矩阵运算规则是一致的:

3×[142]+[005][302]/3=[21231/3]3 \times\left[\begin{array}{l} 1 \\ 4 \\ 2 \end{array}\right]+\left[\begin{array}{l} 0 \\ 0 \\ 5 \end{array}\right]-\left[\begin{array}{l} 3 \\ 0 \\ 2 \end{array}\right] / 3 = \left[\begin{array}{l} 2 \\ 12 \\ 31/3 \end{array}\right]