PCA | 特征值和特征向量

article/2025/10/15 8:42:58

SVD/PCA的分析只需要一行代码即可实现,但是要理解背后的原理,可能需要从特征值和特征向量开始。第一次接触特征值是在SPM里,那时候连怎么发音都不知道。就像这个slide讲的一样,spm有一个按钮,按了就可以提取,可以理解为一个summary value。

b45ca1c890a75d1f3b53c0d009b75eb1.png

以下内容95%整理自油管视频,都是基于2d的数据,只整理了与特征向量相关的内容,推荐前往观看有动画的原片4/6/13/14集。

d400fa875d12b3ce11dae70df5ed330b.png

https://youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab

3deeb8caebd4d41d406cfddc50605566.png

矩阵和向量相乘

e9ec9ee3e32b60a47496826741095bc0.png

假设ij是在坐标轴上的两个单位向量

63be7326d5751df555507f6f7630b1ee.png

任何向量v都可以用这两个向量表示,因为ij就是在坐标轴上的单位向量,所以v就是[x y]'。

1cc02495b020448121f7ca9c9ee99920.png

旋转和拉伸ij

a38497e017aded50c38c8cebc7e5cd77.png

9142794df8fe695b84f41e459e672233.png

如果对于v做同样的变换,那么v同样可以用经过变换的L(i)L(j)表示

d3ecf413cb0d485a03971a9a3c62f883.png

也就是可以用i和j的新坐标来表示新的v的坐标

b26a21bc5a57636dc0b94d456c6c0c53.png

一个2x2的矩阵就可以看成是一个变换矩阵

edb1e3e9928a949d0f6d3f91952cf81c.png

这个矩阵和向量相乘,相当于将矩阵中的变换运用到右边的向量上,结果是新的向量

df5c9f212d1551cbfc3d0dceda5a6606.png

比如

2deb2af5a6a94c043967b707babc53e1.png

7a92bce9a547041c1a5759290599f520.png

矩阵和矩阵相乘

9cd740ac0dd5201050d935e63e6fbda1.png

M1和M2相乘,相当于对于坐标轴上的单位向量ij先做M1的变换后做M2变换。

先根据M1进行变换

acba3c74dc0424cbdab0d5fe7d924fea.png

再根据M2进行变换

9117ec515aef7ab7c97eebcad3e2167d.png

也可以理解为对M1中的两列分别做M2的矩阵变换。

对M1中的第一列向量做M2的变换

6a02ba4d3016af89dda7183ba0a9f121.png

M1第二列的变换也如此

c5977a843515c3ecd54770a10666b6ec.png

更general的公式是

7f225b1d59a8f358b9ade8b199433c09.png

50033671caf72d211e431cfd3a8607e9.png

ed0553a7c7b17ed114b9a81b6e54440b.png

特征值和特征向量

f4ca95bfcb800338f8ed73ecf8459b1b.png

比如有这么一个变换矩阵

3d8586390d0ebc53dc1b1087c7593768.png

对于一个向量

9491c7cabf209a52fe1827f85d4162d7.png

运用矩阵变换后,这个向量不再在之前的span上了。

91049fbfbd01ce345f9968983d2592e6.png

但对于有的向量

6ecdcf8f53105b0f04bd0caa0417f1bd.png

在同样的变换之后,仍然会在之前的span上。

2684ec9458b266178b908acdc32247fa.png

比如x轴上的一个向量经过变换后仍然在x轴上,只不过是伸缩了3个单位。

eeeabe005be992c071bce8e5d948069d.png

同样在对角线上的向量

0510ac34ee97b644246804e614551c1a.png

经过变换后在同一个span上,伸缩的值是2.

2a77f568fcbebaeba6ac501ffd466ec7.png

这样经过矩阵变换,仍然在自己span上面的向量就是这个变换矩阵的特征向量,伸缩变化的值就是特征值

b964d96f52e4f93886e30e56e3a5ae1c.png

用公式表达如下,其中A就是变换矩阵,λ是特征值,v是特征向量

87616d48df42a6e32dac71ebdadac753.png

也就是说矩阵和向量相乘,等于scalar和向量相乘

355b13b9eeda79ed37df2af0cea491ec.png

因为λ是一个scalar,乘上单位矩阵之后交换到右边就可以求解特征值和特征向量了。

c5105f7928ad151ea0e053d2f0e2cc64.png

如果v是0的话也是成立的但是并不是想要的特征向量。所以需要(A-λI)这一个变换矩阵变换的结果是0,平面压缩成了一条线,相当于determinant=0

fe23f15d6d9ebf08e1b9665377c2cc67.png

2b8e7c21a308516b19dde3849f61d6f4.png

determinant(det)

47795b2f8e78443f6e98188fe2d1f9d8.png

它衡量的是一个变换矩阵对平面拉伸和旋转的改变有多少。

9b11408a73e4bd2e6fb735af958721bc.png

2bd528ca0af54f76767de3154f44f64b.png

比如对于这个只有拉伸变换的矩阵

a34b2d6a7f9d55fa07db763a90e53a6b.png

6f1b1ed2485c563155a22c45509c6210.png

再看一个带shear的变换矩阵

bc890fd36b71d233ecee0616a3a87d66.png

90e8de3370159fe8010e4c1888d3a0da.png

同样的道理,可以知道平面内任何矩形的改变

438da8b928304c437597ff5cf3fb68e5.png

a3d61a122b1de869673ec06acbca73ae.png

任何形状可以用无数小方块来近似

5c3a2aa15327a00346f82adfa1cdf969.png

ac39674dc5a0183128d74d1fc8242396.png


这个变换矩阵对于平面的拉伸和旋转就是determinant,数值代表了平面内面积改变的多少,负数意味着整个平面都翻转了【flip】a3770f2ab73216ee5ab02ecdc0946cde.png

4cbbbc2ec213a8c26a64a714934b0026.png


关于计算公式

如果b=c=0

1e4174bf3c09da8cbf966524245445b2.png

如果只有c=04c353c377d560cd2d93aaeb2e9432d19.png

更general的公式

52d4eec2a0d9c634a11351d6d16aae79.png

最后再举一个直观的例子,对于一个向量v,对它做A的矩阵变换,结果它并没有改变方向只是相当于做了拉伸。A*v=4*V

v=[1 2];
A=[2 1;2 3]
w = A*v';
w1=4*v'

14642177064391a0cf96e723a233dc21.png

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:

e1b9728a115aca3142e4e09048300fc9.png

—END—

359cd1d60c1ec3cb99a84498cb8328dd.png


http://chatgpt.dhexx.cn/article/dMqmf5Mi.shtml

相关文章

特征值和特征向量的理解

在线性代数的最后,我们都会学矩阵的特征值分解,我们知道一个方阵A经过特征值分解后就得到特征向量和特征值了。那么,这个所谓的特征值和特征向量到底是什么东西呢? 我们一上来就会学到这样的一个公式: Ax λx&#…

MATLAB之特征值和特征向量

1.定义: 设A是n阶矩阵,如果数λ和n维非零向量x使关系式 (1) 成立,那么,这样的数λ称为矩阵A的特征值,非零向量x称为A的对应于特征值λ的特征向量(1)式还可以写为: (2&…

特征值和特征向量的作用

本文转自知乎大牛。 从定义出发,Axcx:A为矩阵,c为特征值,x为特征向量。 矩阵A乘以x表示,对向量x进行一次转换(旋转或拉伸)(是一种线性转换),而该转换的效果为…

线性代数学习之特征值与特征向量

什么是特征值和特征向量: 在上一次线性代数学习之行列式学习了行列式相关的一些概念,其中也多次提到学好行列式是为了学习“特征值和特征向量”的基础,所以此次就正式进入这块内容的学习,也是线性代数中非常重要的概念&#xff0…

线性代数之特征值与特征向量的求法

线性代数之特征值与特征向量的求法 特征值与特征向量 已知如下矩阵A,求解其特征值和特征向量。 首先构造特征方程 det(λE-A) 情况一: 特征值 -2时解方程组(-2E-A)X0,即得: 于是得同解方程组 - 0,解为 - (这里 , 为自由未知…

cfree 上面工具栏消失解决办法(不用重下!!!!!)

在上框空白处鼠标右键自定义; 新建随便命个名; 左上角就是新建的工具栏;然后还是附件打开命令把你想用的快捷方式拖到新建的工具栏就可以了 暂时用着没有啥问题。

cfree编译报错[Error] g++.exe: 5\mingw\lib\: No such file or directory

心血来潮拾起算法想到了c/c,然后安装了cfree,但是在编译程序的时候报错,大致如下 [Error] g.exe: 5\mingw\lib\: No such file or directory [Error] g.exe: 5\mingw\mingw32\lib\: No such file or directory [Error] g.exe: 5\mingw\bin\:…

解决Cfree [Error] g++.exe: 5\mingw\lib\: No such file or directory

昨天笔者复习数据结构想编写代码,突然发现自己的Cfree显示如图所示错误 看到这耀眼的红色,想必是程序员的都不能忍,于是经过苦苦找寻,终于发现了其中的奥妙,那就是把你安装的文件夹名字 C-free 5改为C-free5即不要之间…

Cfree之万能头函数bits\stdc++.h的添加和注意事项

实现步骤 一、创建一个.txt文件,把下面的代码复制进去 // C includes used for precompiling -*- C -*-// Copyright (C) 2003-2015 Free Software Foundation, Inc. // // This file is part of the GNU ISO C Library. This library is free // software; you …

cfree mysql_如何配置CFree才能开发MySql数据库应用

环境: IDE:CFree5.0 操作系统:Windows XP Prefessional sp3 数据库版本:MySQL-5.0.22-community-nt 连接器版本:mysql-connector-c-noinstall-6.0.2-win32 编译器:GCC for windows 4.5.0 2。将Mysql开发包的…

c语言为什么不能自动free,求大神帮忙看看 为什么cfree没有报错但是就是运行不了...

求大神帮忙看看 为什么cfree没有报错但是就是运行不了 #include #include #include #define Insert 1 //增加订单 #define Query 2 //查找订单 #define Update 3 //修改订单 #define Delete 4 //删除订单 #define List 5 //列出所有订单 #define Quit 0 //退出系统 FILE *…

关于CFree5.0中设置支持C99模式

关于C-Free5.0中设置支持C99模式,分为以下几个步骤: 1.打开C-Free5.0,在左上角找到‘构建(B)’ 2.展开‘构建(B)’,点击最下方的‘构建选项’ 3.在‘编译’一栏看到红色框区域&am…

C-Free 5 加 TDM-GCC编辑器搭建C/C++开发环境

本文所需要的安装程序下载地址:https://download.csdn.net/download/fangfang635344731/10705407 1.安装C-Free 5,这一步重点是安装路径绝对不能有空格!!!我的安装路径为“C:\C-Free5”。 2.安装TDM-GCC,…

C语言基础入门:C-Free5设置支持C99标准

问题: 在使用C-Free 5.0调试程序时,编译提示不支持C99模式,错误! 具体问题如下图所示: 解决方法1:对已创建工程的设置,仅对该工程有效。 右键点击“文件列表窗口”中的工程 从上到下&#x…

Cfree-5各种抽风解决办法

最近好像笔记本单步调试用不了,本想去Cfree吧求助,没想到首页就有个和我问题一毛一样的,还有大神在楼下给出了解答,好开森!赶紧记录(chaoxi)到这啦,免得以后抽风。 我这里是最近变成…

cfree5文件标签混乱处理。

有时cfree5并不听话,文件列表标签会乱显示,非常影响心情: 如上面红线内部分,怎么也处理不了。 以前用cfree4安装后再安装5可以处理,但最近处理不了。琢磨了一下,发现原来解决办法很简单: 一、对…

cfree5更新C++11特性

昨天在调试程序的时候,发现有些最新的函数Cfree并不支持,因为最新出来的C11特性不满足。C11标准较之前的版本在性能上有很大改变,具体请查阅百度或谷歌,谷歌现在进不去了,那就翻墙吧。 好了,首先我们还是如…

Cfree5可以JAVA_C语言中free函数的使用详解

free函数是我们再写C语言程序时常用的函数,但是使用时需要注意,一不小心很肯能会引起吐核。 注意:free函数与malloc()函数配对使用,释放malloc函数申请的动态内存。对于free(p)这句语句,如果p 是NULL 指针,…

在Cfree5里使用多行快捷注释的方法

1.打开cfree5,点击上方 工具 选项。 2.点击 工具 选项后,进入“环境选项” 3.进入环境选项后就会发现上方有四个选项,点击“快捷键”这个选项,里面会出现很多操作的快捷键,往下翻就能找到快捷多行注释的选项了 4.此时点…

配置cfree 5 支持C++11

最近想学c的一些用法,但Cfree并不支持,所以在大牛的帮助下配置了一下cfree。 c-free5.0版本已经可以支持c99标准。由于CFree5.0自带的GCC版本只有3.4.0,并不支持C11,所以首先得去下载完整支持C11的4.8.1版本——TDM-GCC-64&#x…