zoukankan      html  css  js  c++  java
  • 线性代数基础知识的复习

    线性代数基础知识的复习

    机器学习需要一些线性代数的基础知识。

    matrix:矩阵

    [A= egin{bmatrix} 1402 & 191\ 1371 & 821\ 949 & 1437\ 147&1448\ end{bmatrix} ]

    [B= egin{bmatrix} 1 & 2 & 3 \ 4 & 5 & 6 \ end{bmatrix} ]

    • A是一个(4 imes2)的矩阵,由4行2列组成,并且由两个中括号括起来。记作(R^{4 imes2}).
    • B是一个(2 imes3)的矩阵,由2行3列组成,并且由两个中括号括起来。记作(R^{2 imes3}).
    • (A_{ij})用来表示矩阵中的某一个元素,其中(i)代表矩阵的行。(j)代表矩阵的列
      • (A_{11}=1402)
      • (A_{12}=191)
      • (A_{132}=1437)
      • (A_{41}=147)
      • (A_{43}=undefined)

    vector:向量

    [y= egin{bmatrix} 460\ 232\ 315\ 178\ end{bmatrix} ]

    • (y)是一组向量,可以把向量看作是一个({n imes1})的矩阵。此处n=4,所以记作(R^{4})

    • (y_i)是向量中的第(i^{th})个元素

      • (y_1=460)
      • (y_2=232)
      • (y_3=315)
    • 学习过高级语言的朋友一定知道,例如c++中的STL标准库中vector的index是从0开始算的。而在人们实际生活学习中,大部分人习惯从1开始。因此,在学习机器学习中,我们一般用1作为起始,而在编写程序实现的时候,则切换回0。

    • 附上一段MATLAB的程序

      % The ; denotes we are going back to a new row.
      A = [1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12]
      
      % Initialize a vector 
      v = [1;2;3] 
      
      % Get the dimension of the matrix A where m = rows and n = columns
      [m,n] = size(A)
      
      % You could also store it this way
      dim_A = size(A)
      
      % Get the dimension of the vector v 
      dim_v = size(v)
      
      % Now let's index into the 2nd row 3rd column of matrix A
      A_23 = A(2,3)
      
      A =
      
           1     2     3
           4     5     6
           7     8     9
          10    11    12
      
      
      v =
      
           1
           2
           3
      
      
      m =
      
           4
      
      
      n =
      
           3
      
      
      dim_A =
      
           4     3
      
      
      dim_v =
      
           3     1
      
      
      A_23 =
      
           6
      

    矩阵加法

    [egin{bmatrix} 1 & 0 \ 2 & 5 \ 3 & 1 \ end{bmatrix} + egin{bmatrix} 4 & 0.5 \ 2 & 5 \ 0 & 1 \ end{bmatrix} = egin{bmatrix} 5 & 0.5 \ 4 & 10 \ 3 & 2 \ end{bmatrix} ]

    • 上面有一个矩阵加法的例子。

    • 首先,两个矩阵维度必须相同,即相同的行数相同的列数。

    • 两个矩阵加法就是将对位置的数字加起来,然后得到一个新的矩阵,且这个矩阵和原来两个矩阵维度相同。

    • 在维度不同的情况下无法进行加法运算,例如:

      []

      1 & 0
      2 & 5
      3 & 1
      end{bmatrix}

      egin{bmatrix}
      4 & 0.5
      2 & 5
      end{bmatrix}

      mathop{error}

      [ ]

    [3 imes egin{bmatrix} 1 & 0 \ 2 & 5 \ 3 & 1 \ end{bmatrix} = egin{bmatrix} 3 & 0 \ 6 & 15 \ 9 & 3 \ end{bmatrix} = egin{bmatrix} 1 & 0 \ 2 & 5 \ 3 & 1 \ end{bmatrix} imes3 ]

    • 上面有一个矩阵乘法的例子,注意是实数乘矩阵。

    • 结果是直接将矩阵的各个元素与实数相乘,得到一个新的矩阵,维数一定相同

    • 对于实数乘矩阵来说,是先乘还是后乘不影响结果

    • 除法类似于乘法:

      []

      4 & 0
      6 & 3
      end{bmatrix}
      setminus
      4

      frac{1}{4}
      imes
      egin{bmatrix}
      3 & 0
      6 & 15
      end{bmatrix}

      egin{bmatrix}
      1 & 0
      frac{3}{2} & frac{3}{4}
      end{bmatrix}
      imes3

      [ ]

    [egin{eqnarray} & & 3 imes egin{bmatrix} 1 \ 4 \ 2 \ end{bmatrix} + egin{bmatrix} 0\ 0 \ 5 \ end{bmatrix} - egin{bmatrix} 3 \ 0 \ 2 \ end{bmatrix} setminus 3 \ & = & egin{bmatrix} 3 \ 12 \ 6 \ end{bmatrix} + egin{bmatrix} 0 \ 0 \ 5 \ end{bmatrix} - egin{bmatrix} 1 \ 0 \ frac{2}{3} \ end{bmatrix}\ & = & egin{bmatrix} 2 \ 12 \ frac{31}{3} \ end{bmatrix}\ end{eqnarray} ]

    • MATLAB代码:

      % Initialize matrix A and B 
      A = [1, 2, 4; 5, 3, 2]
      B = [1, 3, 4; 1, 1, 1]
      
      % Initialize constant s 
      s = 2
      
      % See how element-wise addition works
      add_AB = A + B 
      
      % See how element-wise subtraction works
      sub_AB = A - B
      
      % See how scalar multiplication works
      mult_As = A * s
      
      % Divide A by s
      div_As = A / s
      
      % What happens if we have a Matrix + scalar?
      add_As = A + s
      
      A =
      
           1     2     4
           5     3     2
      
      
      B =
      
           1     3     4
           1     1     1
      
      
      s =
      
           2
      
      
      add_AB =
      
           2     5     8
           6     4     3
      
      
      sub_AB =
      
           0    -1     0
           4     2     1
      
      
      mult_As =
      
           2     4     8
          10     6     4
      
      
      div_As =
      
          0.5000    1.0000    2.0000
          2.5000    1.5000    1.0000
      
      
      add_As =
      
           3     4     6
           7     5     4
      

    矩阵与向量相乘

    [egin{bmatrix} 1 & 3 \ 4 & 0 \ 2 & 1 \end{bmatrix} imesegin{bmatrix} 1 \ 5 \end{bmatrix} =egin{bmatrix} 16^{(1)} \ 4^{(2)} \ 7^{(3)} \end{bmatrix} \egin{eqnarray} 1 imes 1 + 3 imes 5 = 16 ag{1}\ 4 imes 1 + 0 imes 5 = 4 ag{2}\ 2 imes 1 + 1 imes 5 = 7 ag{3}\end{eqnarray} ]

    • 上面有一个特殊例子,展示了矩阵与向量相乘的等式和过程

    • 相乘的条件:

      • 设矩阵为(A),向量为(B)
      • (A_j=B_i)(A的列数等于B的行数)
    • 将A的一行和B的一列的每个元素相乘,并相加得到一个数值。

    • 新的得到的矩阵的行数与矩阵相同,列数与向量相同。

      可以参考一下下面这个例子:

      []

      [ ]

      % Initialize matrix A 
      A = [1, 2, 3; 4, 5, 6;7, 8, 9] 
      
      % Initialize vector v 
      v = [1; 1; 1] 
      
      % Multiply A * v
      Av = A * v
      
      A =
      
           1     2     3
           4     5     6
           7     8     9
      
      
      v =
      
           1
           1
           1
      
      
      Av =
      
           6
          15
          24
      

    矩阵与矩阵相乘

    我们现在开始计算这样一个算式

    [egin {bmatrix} 1 & 3 & 2 \ 4 & 0 & 1 \end {bmatrix} *egin {bmatrix} 1 & 3 \ 0 & 1 \ 5 & 2 \end {bmatrix} ]

    用刚刚学过的矩阵乘向量,将第二个矩阵拆成两个向量

    [egin {bmatrix} 1 & 3 & 2 \ 4 & 0 & 1 \end {bmatrix} *egin {bmatrix} 1 \ 0 \ 5 \end {bmatrix} =egin {bmatrix} 11 \ 9 \end {bmatrix} ]

    [egin {bmatrix} 1 & 3 & 2 \ 4 & 0 & 1 \end {bmatrix} *egin {bmatrix} 3 \ 1 \ 2 \end {bmatrix} =egin {bmatrix} 10 \ 14 \end {bmatrix} ]

    其实我们已经计算完成了,只差最后一步,按原来列的顺序将答案合并,可以得到

    [egin {bmatrix} 1 & 3 & 2 \ 4 & 0 & 1 \end {bmatrix} *egin {bmatrix} 1 & 3 \ 0 & 1 \ 5 & 2 \end {bmatrix} =egin {bmatrix} 11 & 10 \ 9 & 14 \end {bmatrix} ]

    • 相乘的条件:

      • 设矩阵1为(A),矩阵2为(B)
      • (A_j=B_i)(A的列数等于B的行数)
    • 将A的一行和B的一列的每个元素相乘,并相加得到一个数值。

    • 新的得到的矩阵的行数与A相同,列数与B相同。即(R^{m*n} imes R^{n*o} = R^{m*o})

      可以参考一下下面这个例子:

      []

        a & b \
        c & d \
        e & f \
      

      end {bmatrix}
      *
      egin {bmatrix}
      w & x
      y & z
      end {bmatrix}
      =
      egin {bmatrix}
      aw + by & ax + bz
      cw + dy & cx + dz
      ew + fy & ex + fz
      end {bmatrix}

      [ ]

      % Initialize a 3 by 2 matrix 
      A = [1, 2; 3, 4;5, 6]
      
      % Initialize a 2 by 1 matrix 
      B = [1; 2] 
      
      % We expect a resulting matrix of (3 by 2)*(2 by 1) = (3 by 1) 
      mult_AB = A*B
      
      % Make sure you understand why we got that result
      
      A =
      
         1   2
         3   4
         5   6
      
      B =
      
         1
         2
      
      mult_AB =
      
          5
         11
         17
      

    矩阵乘法的一些性质

    1. 不可交换(in general)

      在实数乘法中,两个数交换之后结果相同是一个常识:

      []

      []

      我们用上面的矩阵乘法尝试一下:

      []

       1 & 1 \
       0 & 0 \
      

      end {bmatrix}
      *
      egin {bmatrix}
      0 & 0
      2 & 0
      end {bmatrix}
      =
      egin {bmatrix}
      2 & 0
      0 & 0
      end {bmatrix}

      [ ]

      egin {bmatrix}
      0 & 0
      2 & 0
      end {bmatrix}
      *
      egin {bmatrix}
      1 & 1
      0 & 0
      end {bmatrix}
      =
      egin {bmatrix}
      0 & 0
      2 & 2
      end {bmatrix}

      [ ]

      但是这是一般情况,有一种情况,是可以交换的。

    2. 可交换的特殊情况(Identity matrix)

      有一种矩阵我们叫做单位矩阵(Identity matrix),其特点是:

      • 矩阵一定是(n imes n)的,记作$I space or space I_{n imes n} $

      • 矩阵对角线一定是1,其他部分一定是0

        []

          egin {bmatrix}
              1 & 0 \
              0 & 1 \
          end {bmatrix}
        

        }limits_{2 imes 2}
        space space space space space space space space space space
        mathop{
        egin {bmatrix}
        1 & 0 & 0
        0 & 1 & 0
        0 & 0 & 1
        end {bmatrix}
        }limits_{3 imes 3}
        space space space space space space space space space space
        mathop{
        egin {bmatrix}
        1 & 0 & 0 & 0
        0 & 1 & 0 & 0
        0 & 0 & 1 & 0
        0 & 0 & 0 & 1
        end {bmatrix}
        }limits_{4 imes 4}
        space space space space space space space space space space
        mathop{
        egin {bmatrix}
        1 & & & & &
        & 1 & & & &
        & & 1 & & &
        & & & 1 & &
        & & & & ddots &
        & & & & & 1
        end {bmatrix}
        }limits_{n imes n}

        [ ]

      • MATLAB代码:

        % Initialize random matrices A and B 
        A = [1,2;4,5]
        B = [1,1;0,2]
        
        % Initialize a 2 by 2 identity matrix
        I = eye(2)
        
        % The above notation is the same as I = [1,0;0,1]
        
        % What happens when we multiply I*A ? 
        IA = I*A 
        
        % How about A*I ? 
        AI = A*I 
        
        % Compute A*B 
        AB = A*B 
        
        % Is it equal to B*A? 
        BA = B*A 
        
        % Note that IA = AI but AB != BA
        
        A =
        
           1   2
           4   5
        
        B =
        
           1   1
           0   2
        
        I =
        
        Diagonal Matrix
        
           1   0
           0   1
        
        IA =
        
           1   2
           4   5
        
        AI =
        
           1   2
           4   5
        
        AB =
        
            1    5
            4   14
        
        BA =
        
            5    7
            8   10
        

    矩阵的倒数(逆矩阵)

    倒数的概念很熟悉吧。一个数和另一个数相乘等与1我们就认为这对数字互为倒数。

    [3 imes (3^{-1}) = 1 \ 5 imes (5^{-1}) = 1 \ ]

    对于矩阵,我们也有同样的概念。由于我们认为单位矩阵和实数中1的地位相同,因此它是这样表述的:

    [A(A^{-1})=(A^{-1})A=I ]

    我们称(A^{-1})为逆矩阵。

    [mathop{ egin {bmatrix} 3 & 4 \ 2 & 16 \ end {bmatrix} }limits_A mathop{ egin {bmatrix} 0.4 & -0.1 \ -0.05 & 0.075 \ end {bmatrix} }limits_{A^{-1}} = mathop{ egin {bmatrix} 1 & 0 \ 0 & 1 \ end {bmatrix} }limits_{AA^{-1}} = I_{2 imes 2} ]

    一些要注意的点:

    • 存在逆矩阵的矩阵一定是方阵
    • (egin {bmatrix} 0 & 0 \ 0 & 0 \ end {bmatrix})像这样的0矩阵是没有的逆矩阵的,因为无论如何都无法让它变成单位矩阵。你可以将没有逆矩阵的方阵近似成零矩阵看。
    • 没有逆矩阵的矩阵我们称之为奇异矩阵或者是退化矩阵

    矩阵的倒置

    我们现在有一个矩阵:

    [A= egin {bmatrix} 1 & 2 & 0 \ 3 & 5 & 9 \ end {bmatrix} ]

    而它的倒置矩阵就是:

    [A^T = egin {bmatrix} 1 & 3 \ 2 & 5 \ 0 & 9 \ end {bmatrix} ]

    • 这个操作可以看成是,把A的每一个行向量改成值相同的列向量,再按顺序拼接起来。

    • (A)经过转置之后,(A)(A^T)中每个元素的对应关系是

      []

      [ ]

      % Initialize matrix A 
      A = [1,2,0;0,5,6;7,0,9]
      
      % Transpose A 
      A_trans = A' 
      
      % Take the inverse of A 
      A_inv = inv(A)
      
      % What is A^(-1)*A? 
      A_invA = inv(A)*A
      
      A =
      
         1   2   0
         0   5   6
         7   0   9
      
      A_trans =
      
         1   0   7
         2   5   0
         0   6   9
      
      A_inv =
      
         0.348837  -0.139535   0.093023
         0.325581   0.069767  -0.046512
        -0.271318   0.108527   0.038760
      
      A_invA =
      
         1.00000  -0.00000   0.00000
         0.00000   1.00000  -0.00000
        -0.00000   0.00000   1.00000
      
  • 相关阅读:
    Java ListIterator(迭代器)
    java 异常 throw
    java iterator(迭代器)
    java list
    type Iterator does not take parameters
    Java 容器的打印
    java 添加一组元素
    Java 容器的基本概念
    软件
    java 学习网站
  • 原文地址:https://www.cnblogs.com/cell-coder/p/12539423.html
Copyright © 2011-2022 走看看