SVD/PCA的分析只需要一行代码即可实现,但是要理解背后的原理,可能需要从特征值和特征向量开始。第一次接触特征值是在SPM里,那时候连怎么发音都不知道。就像这个slide讲的一样,spm有一个按钮,按了就可以提取,可以理解为一个summary value。
以下内容95%整理自油管视频,都是基于2d的数据,只整理了与特征向量相关的内容,推荐前往观看有动画的原片4/6/13/14集。
https://youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab
矩阵和向量相乘
假设i和j是在坐标轴上的两个单位向量
任何向量v都可以用这两个向量表示,因为i和j就是在坐标轴上的单位向量,所以v就是[x y]'。
旋转和拉伸i和j
如果对于v做同样的变换,那么v同样可以用经过变换的L(i)和L(j)表示
也就是可以用i和j的新坐标来表示新的v的坐标
一个2x2的矩阵就可以看成是一个变换矩阵
这个矩阵和向量相乘,相当于将矩阵中的变换运用到右边的向量上,结果是新的向量
比如
矩阵和矩阵相乘
M1和M2相乘,相当于对于坐标轴上的单位向量i和j先做M1的变换后做M2变换。
先根据M1进行变换
再根据M2进行变换
也可以理解为对M1中的两列分别做M2的矩阵变换。
对M1中的第一列向量做M2的变换
M1第二列的变换也如此
更general的公式是
特征值和特征向量
比如有这么一个变换矩阵
对于一个向量
运用矩阵变换后,这个向量不再在之前的span上了。
但对于有的向量
在同样的变换之后,仍然会在之前的span上。
比如x轴上的一个向量经过变换后仍然在x轴上,只不过是伸缩了3个单位。
同样在对角线上的向量
经过变换后在同一个span上,伸缩的值是2.
这样经过矩阵变换,仍然在自己span上面的向量就是这个变换矩阵的特征向量,伸缩变化的值就是特征值
用公式表达如下,其中A就是变换矩阵,λ是特征值,v是特征向量
也就是说矩阵和向量相乘,等于scalar和向量相乘
因为λ是一个scalar,乘上单位矩阵之后交换到右边就可以求解特征值和特征向量了。
如果v是0的话也是成立的但是并不是想要的特征向量。所以需要(A-λI)这一个变换矩阵变换的结果是0,平面压缩成了一条线,相当于determinant=0
determinant(det)
它衡量的是一个变换矩阵对平面拉伸和旋转的改变有多少。
比如对于这个只有拉伸变换的矩阵
再看一个带shear的变换矩阵
同样的道理,可以知道平面内任何矩形的改变
任何形状可以用无数小方块来近似
这个变换矩阵对于平面的拉伸和旋转就是determinant,数值代表了平面内面积改变的多少,负数意味着整个平面都翻转了【flip】
关于计算公式
如果b=c=0
如果只有c=0
更general的公式
最后再举一个直观的例子,对于一个向量v,对它做A的矩阵变换,结果它并没有改变方向只是相当于做了拉伸。A*v=4*V
v=[1 2];
A=[2 1;
2 3]
w = A*v';
w1=4*v'
figure
subplot(211)
plot([0 w(1)],[0 w(2)],'r-.','linew',3)
hold on
plot([0 v(1)],[0 v(2)],'k','linew',2)
axis square
axis([ -1 1 -1 1 ]*max([norm(v) norm(w)]))
hold on
plot(get(gca,'xlim'),[0 0],'k--')
plot([0 0],get(gca,'ylim'),'k--')
legend({'A*v';'v'})
subplot(212)
plot([0 w1(1)],[0 w1(2)],'g-.','linew',3)
axis square
axis([ -1 1 -1 1 ]*max([norm(v) norm(w)]))
hold on
plot(get(gca,'xlim'),[0 0],'k--')
plot([0 0],get(gca,'ylim'),'k--')
legend({'4*v'})
another example:
—END—