文章目录
写在前面
(1)如果我们有 m 条数据,每条数据有 n 个特征,我们会把整份数据描述为一个 m × n 的矩阵,m 行 n 列。
(2)提到向量,除非特意点名,否则默认就是列向量,比如这样写 x = ( 2 , 1 , 3 ) T x = (2, 1, 3)^T x=(2,1,3)T(转置转置转置啊)。
ps:不同书籍论文等,可能会有不同的标准,但是我个人一直都是以上面这个写法来理解的。很多机器/深度学习的公开数据集、内置算法等,也都是这样约定的。所以,当我看见“行对应特征”、“列对应样本数”以及“默认行向量”的讲解,我就脑瓜子嗡嗡的……(大佬们为什么要互相伤害,有个统一的基础不好吗?)当看到不同的资料写法有出入的时候,可以检查一下是不是约定基础不同造成的。
可以开始串山楂了
因为我只想写一些理解,用词可能不太规范。
首先要有一个认识,就是矩阵乘法其实就是在做线性变换,变换就是一种映射/map/函数/投影,只不过一定会符合两条约束:加性和齐性。
加性就是:先求和再变换 = 先变换再求和;
齐性就是:先缩放再变换 = 先变换再缩放;
当一个矩阵确定了,特定的变换也就确定了。矩阵乘法有左乘和右乘的区别,我们先以 y = A x y = A x y=Ax 为例来讲(再附一遍 x x x 和 y y y 都是列向量),矩阵 A 就是那个变换。
向量 x x x 可以看做是一个空间中的坐标点,矩阵 A 这个线性变换对向量 x x x 做了什么呢?
答案是:旋转和缩放。
第一个山楂:矩阵变换对应旋转例子
以最常见的二维直角坐标系来举例,如果其中有个点 A ( 1 , 0 ) A(1, 0) A(1,0),把这个点绕着原点逆时针绕 60° 会落在 B,B 的具体坐标是?(8 好意思,画图太麻烦我又强迫症不想拍照贴图,/(ㄒoㄒ)/~~)
设 θ = π / 3 \theta = \pi / 3 θ=π/3 ,中学就掌握这个计算了:
x B = c o s ( θ ) x A − s i n ( θ ) y A = 1 / 2 x_B = cos(\theta) x_A - sin(\theta)y_A = 1/2 xB=cos(θ)xA−sin(θ)yA=1/2
y B = s i n ( θ ) x A + c o s ( θ ) y A = 3 / 2 y_B = sin(\theta) x_A + cos(\theta)y_A = \sqrt3/2 yB=sin(θ)xA+cos(θ)yA=3/2
写成矩阵乘法形式就是:
[ x B y B ] = [ c o s ( θ ) − s i n ( θ ) s i n ( θ ) c o s ( θ ) ] [ x A y A ] \left [ \begin{matrix} x_B \\ y_B \end{matrix} \right ] = \left [ \begin{matrix} cos(\theta ) & -sin(\theta)\\ sin(\theta ) & cos(\theta) \end{matrix} \right ] \left [ \begin{matrix} x_A\\ y_A \end{matrix} \right ] [xByB]=[