线性代数基础知识的复习
机器学习需要一些线性代数的基础知识。
matrix:矩阵
[ A= begin{bmatrix} 1402 & 191\ 1371 & 821\ 949 & 1437\ 147&1448\ end{bmatrix} ]
[ B= begin{bmatrix} 1 & 2 & 3 \ 4 & 5 & 6 \ end{bmatrix} ]
- A是一个(4times2)的矩阵,由4行2列组成,并且由两个中括号括起来。记作(R^{4times2}).
- B是一个(2times3)的矩阵,由2行3列组成,并且由两个中括号括起来。记作(R^{2times3}).
- (A_{ij})用来表示矩阵中的某一个元素,其中(i)代表矩阵的行。(j)代表矩阵的列
- (A_{11}=1402)
- (A_{12}=191)
- (A_{132}=1437)
- (A_{41}=147)
- (A_{43}=undefined)
vector:向量
[ y= begin{bmatrix} 460\ 232\ 315\ 178\ end{bmatrix} ]
(y)是一组向量,可以把向量看作是一个({ntimes1})的矩阵。此处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
矩阵加法
[ 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} ]
矩阵乘法
[ 3times 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} timesbegin{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)。
- (A_j=B_i)(A的列数等于B的行数)
将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}
]
相乘的条件:
- 设矩阵1为(A),矩阵2为(B)。
- (A_j=B_i)(A的列数等于B的行数)
将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}
]
一些要注意的点:
- 存在逆矩阵的矩阵一定是方阵
- (begin {bmatrix} 0 & 0 \ 0 & 0 \ end {bmatrix})像这样的0矩阵是没有的逆矩阵的,因为无论如何都无法让它变成单位矩阵。你可以将没有逆矩阵的方阵近似成零矩阵看。
- 没有逆矩阵的矩阵我们称之为奇异矩阵或者是退化矩阵
矩阵的倒置
我们现在有一个矩阵:
[
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
文章来源: 博客园
- 还没有人评论,欢迎说说您的想法!