机器学习需要一些线性代数的基础知识。
\[ A= \begin{bmatrix} 1402 & 191\1371 & 821\949 & 1437\147&1448\\end{bmatrix} \]
\[ B= \begin{bmatrix} 1 & 2 & 3 \4 & 5 & 6 \\end{bmatrix} \]
\[ y= \begin{bmatrix} 460\232\315\178\\end{bmatrix} \]
\(y\)是一组向量,可以把向量看作是一个\({n\times1}\)的矩阵。此处n=4,所以记作\(R^{4}\)。
\(y_i\)是向量中的第\(i^{th}\)个元素
学习过高级语言的朋友一定知道,例如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
\[ \begin{bmatrix} 1 & 0 \2 & 5 \3 & 1 \\end{bmatrix} + \begin{bmatrix} 4 & 0.5 \2 & 5 \0 & 1 \\end{bmatrix} = \begin{bmatrix} 5 & 0.5 \4 & 10 \3 & 2 \\end{bmatrix} \]
上面有一个矩阵加法的例子。
首先,两个矩阵维度必须相同,即相同的行数相同的列数。
两个矩阵加法就是将对位置的数字加起来,然后得到一个新的矩阵,且这个矩阵和原来两个矩阵维度相同。
在维度不同的情况下无法进行加法运算,例如:
\[
\begin{bmatrix}
1 & 0 \ 2 & 5 \ 3 & 1 \ \end{bmatrix}
+
\begin{bmatrix}
4 & 0.5 \ 2 & 5 \ \end{bmatrix}
=
\mathop{error}
\]
\[ 3\times \begin{bmatrix} 1 & 0 \2 & 5 \3 & 1 \\end{bmatrix} = \begin{bmatrix} 3 & 0 \6 & 15 \9 & 3 \\end{bmatrix} = \begin{bmatrix} 1 & 0 \2 & 5 \3 & 1 \\end{bmatrix} \times3 \]
上面有一个矩阵乘法的例子,注意是实数乘矩阵。
结果是直接将矩阵的各个元素与实数相乘,得到一个新的矩阵,维数一定相同
对于实数乘矩阵来说,是先乘还是后乘不影响结果
除法类似于乘法:
\[
\begin{bmatrix}
4 & 0 \ 6 & 3 \ \end{bmatrix}
\setminus
4
=
\frac{1}{4}
\times
\begin{bmatrix}
3 & 0 \ 6 & 15 \ \end{bmatrix}
=
\begin{bmatrix}
1 & 0 \ \frac{3}{2} & \frac{3}{4} \ \end{bmatrix}
\times3
\]
\[ \begin{eqnarray} & & 3 \times \begin{bmatrix} 1 \4 \2 \\end{bmatrix} + \begin{bmatrix} 0\0 \5 \\end{bmatrix} - \begin{bmatrix} 3 \0 \2 \\end{bmatrix} \setminus 3 \& = & \begin{bmatrix} 3 \12 \6 \\end{bmatrix} + \begin{bmatrix} 0 \0 \5 \\end{bmatrix} - \begin{bmatrix} 1 \0 \\frac{2}{3} \\end{bmatrix}\& = & \begin{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
\[ \begin{bmatrix} 1 & 3 \\ 4 & 0 \\ 2 & 1 \\\end{bmatrix} \times\begin{bmatrix} 1 \\ 5 \\\end{bmatrix} =\begin{bmatrix} 16^{(1)} \\ 4^{(2)} \\ 7^{(3)} \\\end{bmatrix} \\\begin{eqnarray} 1 \times 1 + 3 \times 5 = 16 \tag{1}\\ 4 \times 1 + 0 \times 5 = 4 \tag{2}\\ 2 \times 1 + 1 \times 5 = 7 \tag{3}\\\end{eqnarray} \]
上面有一个特殊例子,展示了矩阵与向量相乘的等式和过程
相乘的条件:
将A的一行和B的一列的每个元素相乘,并相加得到一个数值。
新的得到的矩阵的行数与矩阵相同,列数与向量相同。
可以参考一下下面这个例子:
\[
\begin {bmatrix} a & b \\ c & d \\ e & f \\\end {bmatrix} *\begin {bmatrix} x \\ y \\\end {bmatrix} =\begin {bmatrix} a*x + b*y \\ c*x + d*y \\ e*x + f*y \\\end {bmatrix}
\]
MATLAB代码:
% 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
我们现在开始计算这样一个算式
\[
\begin {bmatrix} 1 & 3 & 2 \\ 4 & 0 & 1 \\\end {bmatrix} *\begin {bmatrix} 1 & 3 \\ 0 & 1 \\ 5 & 2 \\\end {bmatrix}
\]
用刚刚学过的矩阵乘向量,将第二个矩阵拆成两个向量
\[
\begin {bmatrix} 1 & 3 & 2 \\ 4 & 0 & 1 \\\end {bmatrix} *\begin {bmatrix} 1 \\ 0 \\ 5 \\\end {bmatrix} =\begin {bmatrix} 11 \\ 9 \\\end {bmatrix}
\]
\[ \begin {bmatrix} 1 & 3 & 2 \\ 4 & 0 & 1 \\\end {bmatrix} *\begin {bmatrix} 3 \\ 1 \\ 2 \\\end {bmatrix} =\begin {bmatrix} 10 \\ 14 \\\end {bmatrix} \]
其实我们已经计算完成了,只差最后一步,按原来列的顺序将答案合并,可以得到
\[
\begin {bmatrix} 1 & 3 & 2 \\ 4 & 0 & 1 \\\end {bmatrix} *\begin {bmatrix} 1 & 3 \\ 0 & 1 \\ 5 & 2 \\\end {bmatrix} =\begin {bmatrix} 11 & 10 \\ 9 & 14 \\\end {bmatrix}
\]
相乘的条件:
将A的一行和B的一列的每个元素相乘,并相加得到一个数值。
新的得到的矩阵的行数与A相同,列数与B相同。即\(R^{m*n} \times R^{n*o} = R^{m*o}\)
可以参考一下下面这个例子:
\[
\begin {bmatrix}
a & b \ c & d \ e & f \ \end {bmatrix}
*
\begin {bmatrix}
w & x \ y & z \ \end {bmatrix}
=
\begin {bmatrix}
a*w + b*y & a*x + b*z\ c*w + d*y & c*x + d*z\ e*w + f*y & e*x + f*z\ \end {bmatrix}
\]
MATLAB代码:
% 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
不可交换(in general)
在实数乘法中,两个数交换之后结果相同是一个常识:
\[
3+5=5+3
\]
这是再正常不过的了。不过矩阵也是如此吗?
我们用上面的矩阵乘法尝试一下:
\[
\begin {bmatrix}
1 & 1 \ 0 & 0 \ \end {bmatrix}
*
\begin {bmatrix}
0 & 0 \ 2 & 0 \ \end {bmatrix}
=
\begin {bmatrix}
2 & 0 \ 0 & 0 \ \end {bmatrix}
\]
\[ \begin {bmatrix} 0 & 0 \ 2 & 0 \ \end {bmatrix} * \begin {bmatrix} 1 & 1 \ 0 & 0 \ \end {bmatrix} = \begin {bmatrix} 0 & 0 \ 2 & 2 \ \end {bmatrix} \]
看到了吗,结果是不一样的。
但是这是一般情况,有一种情况,是可以交换的。
可交换的特殊情况(Identity matrix)
有一种矩阵我们叫做单位矩阵(Identity matrix),其特点是:
矩阵一定是\(n \times n\)的,记作$I \space or \space I_{n \times n} $
矩阵对角线一定是1,其他部分一定是0
\[
\mathop{
\begin {bmatrix}
1 & 0 \ 0 & 1 \ \end {bmatrix}
}\limits_{2 \times 2}
\space \space \space \space \space \space \space \space \space \space
\mathop{
\begin {bmatrix}
1 & 0 & 0 \ 0 & 1 & 0 \ 0 & 0 & 1 \ \end {bmatrix}
}\limits_{3 \times 3}
\space \space \space \space \space \space \space \space \space \space
\mathop{
\begin {bmatrix}
1 & 0 & 0 & 0 \ 0 & 1 & 0 & 0 \ 0 & 0 & 1 & 0 \ 0 & 0 & 0 & 1 \ \end {bmatrix}
}\limits_{4 \times 4}
\space \space \space \space \space \space \space \space \space \space
\mathop{
\begin {bmatrix}
1 & & & & & \ & 1 & & & & \ & & 1 & & & \ & & & 1 & & \ & & & & \ddots & \ & & & & & 1 \ \end {bmatrix}
}\limits_{n \times 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 \times (3^{-1}) = 1 \5 \times (5^{-1}) = 1 \\]
对于矩阵,我们也有同样的概念。由于我们认为单位矩阵和实数中1的地位相同,因此它是这样表述的:
\[
A(A^{-1})=(A^{-1})A=I
\]
我们称\(A^{-1}\)为逆矩阵。
\[
\mathop{
\begin {bmatrix}
3 & 4 \ 2 & 16 \ \end {bmatrix}
}\limits_A
\mathop{
\begin {bmatrix}
0.4 & -0.1 \ -0.05 & 0.075 \ \end {bmatrix}
}\limits_{A^{-1}}
=
\mathop{
\begin {bmatrix}
1 & 0 \ 0 & 1 \ \end {bmatrix}
}\limits_{AA^{-1}}
=
I_{2 \times 2}
\]
一些要注意的点:
我们现在有一个矩阵:
\[
A=
\begin {bmatrix}
1 & 2 & 0 \ 3 & 5 & 9 \\end {bmatrix}
\]
而它的倒置矩阵就是:
\[
A^T
=
\begin {bmatrix}
1 & 3 \ 2 & 5 \ 0 & 9 \\end {bmatrix}
\]
这个操作可以看成是,把A的每一个行向量改成值相同的列向量,再按顺序拼接起来。
\(A\)经过转置之后,\(A\)和\(A^T\)中每个元素的对应关系是
\[
A^T_{ij}=A_{ji}
\]
MATLAB代码
% 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
原文:https://www.cnblogs.com/cell-coder/p/12539423.html