机器学习基础篇——矩阵特征值分解含义解析及应用

特征值与特征向量的几何意义:

矩阵的乘法是什么,别只告诉我只是“前一个矩阵的行乘以后一个矩阵的列”,还会一点的可能还会说“前一个矩阵的列数等于后一个矩阵的行数才能相乘”,然而,这里却会和你说——那都是表象。

矩阵乘法真正的含义是变换,我们学《线性代数》一开始就学行变换列变换,矩阵乘法就是线性变换,若以其中一个向量A为中心,则B的作用主要是使A发生如下变化:

伸缩

clf;     %用来清除图形的命令

A = [0, 1, 1, 0, 0;...

1, 1, 0, 0, 1];% 原空间(相当于5个坐标点(0,1),(1,1),(1,0),(0,0),(0,1))

B = [3 0; 0 2];  % 线性变换矩阵(矩阵第一行是3  0,第二行是0   2)

plot(A(1,:),A(2,:), ‘-*‘); %画二维的线,最后一个参数是带星的线

hold on        %保持在当前图上,后面若画图还会在该图基础上画

grid on;        %在当前图上加格栅

axis([0 3 0 3]); %定制坐标 [0 3 0 3]画纸范围,四个参数分比为min(x)、max(x)、min(y)、max(y)

gtext(‘变换前‘);   %不用解释了吧

Y = B * A;

plot(Y(1,:),Y(2,:), ‘-r*‘);%画二维的线,最后一个参数是带星的red线

grid on;axis([0 3 0 3]);

gtext(‘变换后‘);

从上图可知,y方向进行了2倍的拉伸,x方向进行了3倍的拉伸,这就是B=[3 0; 0 2]的功劳,3和2就是伸缩比例。请注意,这时B除了对角线元素为各个维度的倍数外,非正对角线元素都为0,因为下面将要看到,对角线元素非0则将会发生切变及旋转的效果。

切变

clf;

A = [0, 1, 1, 0, 0;...

1, 1, 0, 0, 1];

B1 = [1 0; 1 1];

B2 = [1 0; -1 1];

B3 = [1 1; 0 1];

B4 = [1 -1; 0 1];

Y1 = B1 * A;

Y2 = B2 * A;

Y3 = B3 * A;

Y4 = B4 * A;

subplot(2,2,1);%将画纸橫分两下,纵分两下,选择左上角第一块地

plot(A(1,:),A(2,:), ‘-*‘); hold on;plot(Y1(1,:),Y1(2,:), ‘-r*‘); grid on;axis([-1 3 -1 3]); subplot(2,2,2);%将画纸橫分两下,纵分两下,选择右上角第二块

plot(A(1,:),A(2,:), ‘-*‘); hold on;plot(Y2(1,:),Y2(2,:), ‘-r*‘); grid on;axis([-1 3 -1 3]); subplot(2,2,3);%将画纸橫分两下,纵分两下,选择左下角第三块

plot(A(1,:),A(2,:), ‘-*‘); hold on;plot(Y3(1,:),Y3(2,:), ‘-r*‘); grid on;axis([-1 3 -1 3]); subplot(2,2,4);%将画纸橫分两下,纵分两下,选择右上角第四块

plot(A(1,:),A(2,:), ‘-*‘); hold on;plot(Y4(1,:),Y4(2,:), ‘-r*‘); grid on;axis([-1 3 -1 3]);

旋转

所有的变换其实都可以通过上面的伸缩和切变变换的到,如果合理地对变换矩阵B取值,能得到图形旋转的效果,如下,

clf;

A = [0, 1, 1, 0, 0;...

1, 1, 0, 0, 1];  % 原空间

theta = pi/6;

B = [cos(theta) sin(theta); -sin(theta) cos(theta)];

Y = B * A;

figure;

plot(A(1,:),A(2,:), ‘-*‘); hold on;plot(Y(1,:),Y(2,:), ‘-r*‘);

grid on;axis([-1 3 -1 3]);

好,关于矩阵乘就这些了。那么,我们接着就进入主题了,对特定的向量,经过一种方阵变换,经过该变换后,向量的方向不变(或只是反向),而只是进行伸缩变化(伸缩值可以是负值,相当于向量的方向反向)?这个时候我们不妨将书上对特征向量的定义对照一遍:

数学教材定义: 设A是n阶方阵,如果存在 λ 和n维非零向量X,使  ,则 λ 称为方阵A的一个特征值,X为方阵A对应于或属于特征值 λ 的一个特征向量。

上面特定的向量不就是特征向量吗?λ不就是那个伸缩的倍数吗?因此,特征向量的代数上含义是:将矩阵乘法转换为数乘操作;特征向量的几何含义是:特征向量通过方阵A变换只进行伸缩,而保持特征向量的方向不变。特征值表示的是这个特征到底有多重要,类似于权重,而特征向量在几何上就是一个点,从原点到该点的方向表示向量的方向。

特征向量有一个重要的性质:同一特征值的任意多个特征向量的线性组合仍然是A属于同一特征值的特征向量。关于特征值,网上有一段关于“特征值是震动的谱”的解释:

戏说在朝代宋的时候,我国就与发现矩阵特征值理论的机会擦肩而过。话说没有出息的秦少游在往池塘里扔了一颗小石头后,刚得到一句“投石冲开水底天”的泡妞诗对之后,就猴急猴急地去洞房了,全然没有想到水波中隐含着矩阵的特征值及特征向量的科学大道理。大概地说,水面附近的任一点水珠在原处上下振动(实际上在做近似圆周运动),并没有随着波浪向外圈移动,同时这些上下振动的水珠的幅度在渐渐变小,直至趋于平静。在由某块有着特定质量和形状的石头被以某种角度和速度投入某个面积和深度特定的水池中所决定的某个矩阵中,纹波荡漾中水珠的渐变过程中其特征值起着决定性的作用,它决定着水珠振动的频率和幅度减弱的衰退率。

在理解关于振动的特征值和特征向量的过程中,需要加入复向量和复矩阵的概念,因为在实际应用中,实向量和实矩阵是干不了多少事的。机械振动和电振动有频谱,振动的某个频率具有某个幅度;那么矩阵也有矩阵的谱,矩阵的谱就是矩阵特征值的概念,是矩阵所固有的特性,所有的特征值形成了矩阵的一个频谱,每个特征值是矩阵的一个“谐振频点”。

美国数学家斯特让(G..Strang)在其经典教材《线性代数及其应用》中这样介绍了特征值作为频率的物理意义,他说:

大概最简单的例子(我从不相信其真实性,虽然据说1831年有一桥梁毁于此因)是一对士兵通过桥梁的例子。传统上,他们要停止齐步前进而要散步通过。这个理由是因为他们可能以等于桥的特征值之一的频率齐步行进,从而将发生共振。就像孩子的秋千那样,你一旦注意到一个秋千的频率,和此频率相配,你就使频率荡得更高。一个工程师总是试图使他的桥梁或他的火箭的自然频率远离风的频率或液体燃料的频率;而在另一种极端情况,一个证券经纪人则尽毕生精力于努力到达市场的自然频率线。特征值是几乎任何一个动力系统的最重要的特征。

其实,这个矩阵之所以能形成“频率的谱”,就是因为矩阵在特征向量所指的方向上具有对向量产生恒定的变换作用:增强(或减弱)特征向量的作用。进一步的,如果矩阵持续地叠代作用于向量,那么特征向量的就会凸现出来。

特征值分解

设A有n个特征值及特征向量,则:

将上面的写到一起成矩阵形式:

若(x1,x2,...,xn)可逆,则左右两边都求逆,则方阵A可直接通过特征值和特征向量进行唯一的表示,令

Q=(x1,x2,...,xn)

Σ?=?diag(λ1,?λ2,?...,?λn)

,该表达式称为方阵的特征值分解,这样方阵A就被特征值和特征向量唯一表示。

一个变换方阵的所有特征向量组成了这个变换矩阵的一组基。所谓基,可以理解为坐标系的轴。我们平常用到的大多是直角坐标系,在线性代数中可以把这个坐标系扭曲、拉伸、旋转,称为基变换。我们可以按需求去设定基,但是基的轴之间必须是线性无关的,也就是保证坐标系的不同轴不要指向同一个方向或可以被别的轴组合而成,否则的话原来的空间就“撑”不起来了。从线性空间的角度看,在一个定义了内积的线性空间里,对一个N阶对称方阵进行特征分解,就是产生了该空间的N个标准正交基,然后把矩阵投影到这N个基上。N个特征向量就是N个标准正交基,而特征值的模则代表矩阵在每个基上的投影长度。特征值越大,说明矩阵在对应的特征向量上的方差越大,功率越大,信息量越多。不过,特征值分解也有很多的局限,比如说变换的矩阵必须是方阵。

在机器学习特征提取中,意思就是最大特征值对应的特征向量方向上包含最多的信息量,如果某几个特征值很小,说明这几个方向信息量很小,可以用来降维,也就是删除小特征值对应方向的数据,只保留大特征值方向对应的数据,这样做以后数据量减小,但有用信息量变化不大,PCA降维就是基于这种思路。

Matlab中通过eig函数就可求得特征值和特征向量矩阵。

>> B = [ 3     -2      -.9    2*eps

-2      4       1    -eps

-eps/4    eps/2      -1     0

-.5    -.5        .1       1   ]

B =

3.0000   -2.0000   -0.9000    0.0000

-2.0000   4.0000    1.0000      -0.0000

-0.0000   0.0000   -1.0000       0

-0.5000   -0.5000    0.1000    1.0000

>> [V D] = eig(B)

V =

0.6153   -0.4176   -0.0000   -0.1437

-0.7881   -0.3261   -0.0000    0.1264

-0.0000   -0.0000   -0.0000   -0.9196

0.0189    0.8481   1.0000      0.3432

D =

5.5616         0         0         0

0            1.4384         0            0

0               0         1.0000         0

0               0         0         -1.0000

D对角线的元素即为特征值(表示了伸缩的比例),D就是特征值分解公式中的Q,V的每一列与D没列对应,表示对应的特征向量,即特征值分解中的Σ。

时间: 2024-12-18 17:08:30

机器学习基础篇——矩阵特征值分解含义解析及应用的相关文章

矩阵特征值分解与奇异值分解含义解析及应用

此文有一半转载自他出,主要在这进行个整理,具体内容文中都有相关的转载链接. 特征值与特征向量的几何意义 矩阵的乘法是什么,别只告诉我只是"前一个矩阵的行乘以后一个矩阵的列",还会一点的可能还会说"前一个矩阵的列数等于后一个矩阵的行数才能相乘",然而,这里却会和你说--那都是表象. 矩阵乘法真正的含义是变换,我们学<线性代数>一开始就学行变换列变换,那才是线代的核心--别会了点猫腻就忘了本--对,矩阵乘法 就是线性变换,若以其中一个向量A为中心,则B的作用

讲一下numpy的矩阵特征值分解

主要还是调包: from numpy.linalg import eig 特征值分解:  A = P*B*PT  当然也可以写成 A = PT*B*P  其中B为对角元为A的特征值的对角矩阵. 首先A得正定,然后才能在实数域上分解, >>> A = np.random.randint(-10,10,(4,4)) >>> A array([[ 6, 9, -10, -1], [ 5, 9, 5, -5], [ -8, 7, -4, 4], [ -1, -9, 0, 6]]

Scalaz(1)- 基础篇:隐式转换解析策略-Implicit resolution

在正式进入scalaz讨论前我们需要理顺一些基础的scalaz结构组成概念和技巧.scalaz是由即兴多态(ad-hoc polymorphism)类型(typeclass)组成.scalaz typeclass在scala中的应用有赖于scala compiler的一项特别功能:隐式转换(implicit conversion),使程序表述更精简.由于隐式转换是一项compiler功能,在程序编译(compile)的时候是由compiler来进行类型转换代码的产生和替代的. 让我们先了解一下作

机器学习基础篇——协方差矩阵

协方差的定义 对于一般的分布,直接代入E(X)之类的就可以计算出来了,但真给你一个具体数值的分布,要计算协方差矩阵,根据这个公式来计算,还真不容易反应过来.这里用一个例子说明协方差矩阵是怎么计算出来的吧. 记住,X.Y是一个列向量,它表示了每种情况下每个样本可能出现的数.比如给定 则X表示x轴可能出现的数,Y表示y轴可能出现的.注意这里是关键,给定了4个样本,每个样本都是二维的,所以只可能有X和Y两种维度.所以 用中文来描述,就是: 协方差(i,j)=(第i列的所有元素-第i列的均值)*(第j列

机器学习基础篇——最大后验概率

最大后验估计(MAP) 最大后验估计是根据经验数据获得对难以观察的量的点估计.与最大似然估计类似,最大区别是,最大后验估计的融入了要估计量的先验分布在其中.故最大后验估计可以看做规则化的最大似然估计. 首先,回顾上篇中的最大似然估计,假设x为独立同分布的采样,θ为模型参数,f为所使用的模型.那么最大似然估计可以表示为: 现在,假设θ的先验分布为g.通过贝叶斯理论,对于θ的后验分布如下式所示: (贝叶斯公式:,公式中,事件Bi的概率为P(Bi),事件Bi已发生条件下事件A的概率为P(A│Bi),事

机器学习中的矩阵方法03:QR 分解

1. QR 分解的形式 QR 分解是把矩阵分解成一个正交矩阵与一个上三角矩阵的积.QR 分解经常用来解线性最小二乘法问题.QR 分解也是特定特征值算法即QR算法的基础.用图可以将分解形象地表示成: 其中, Q 是一个标准正交方阵, R 是上三角矩阵. 2. QR 分解的求解 QR 分解的实际计算有很多方法,例如 Givens 旋转.Householder 变换,以及 Gram-Schmidt 正交化等等.每一种方法都有其优点和不足.上一篇博客介绍了 Givens 旋转和 Householder

机器学习中的矩阵方法04:SVD 分解

机器学习中的矩阵方法04:SVD 分解 前面我们讲了 QR 分解有一些优良的特性,但是 QR 分解仅仅是对矩阵的行进行操作(左乘一个酉矩阵),可以得到列空间.这一小节的 SVD 分解则是将行与列同等看待,既左乘酉矩阵,又右乘酉矩阵,可以得出更有意思的信息.奇异值分解( SVD, Singular Value Decomposition ) 在计算矩阵的伪逆( pseudoinverse ),最小二乘法最优解,矩阵近似,确定矩阵的列向量空间,秩以及线性系统的解集空间都有应用. 1. SVD 的形式

[WebKit] JavaScriptCore解析--基础篇 (一)JSC与WebCore

先看一下官方的基本介绍,短短几句就塞满了关键字. SquirrelFish,正式名称是JavaScriptCore,包括register-based(基于寄存器的虚拟机), direct-threaded, high-level bytecode engine(字节码引擎).它使用基于内置copy propagation(复制性传播算法)的一次性编译器(one-pass compiler),能够延迟从语法树(Syntax Tree)上生成字节码(Bytecodes). 由此可见JavaScrip

[WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析

[WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析 标签: webkit内核JavaScriptCore 2015-03-26 23:26 2285人阅读 评论(1) 收藏 举报  分类: Webkit(34)  JavascriptCore/JIT(3)  版权声明:本文为博主原创文章,未经博主允许不得转载. 看到HorkeyChen写的文章<[WebKit] JavaScriptCore解析--基础篇(三)从脚本代码到JIT编译的代码实现>