SVD奇异值分解

SVD:Singular Value Decomposition

这里是对 X X X进行分解,最终能够得到 X = U S V T X=USV^T X=USVT这样三个矩阵

接下来我们将讨论数据的降维和将数据反向推回之后在几何上具有什么意义

使用matlab在三维空间上生成一条不太平整的线

x = linspace(1,20,20);
y = 2*x + 3;

for i = 1:20
    if(rand()>=0.5) 
        y(i) = y(i) + rand()*3;
    else
        y(i) = y(i) - rand()*3;
    end
end

z = 2*y + x;

for i = 1:20
    if(rand()>=0.5) 
        z(i) = z(i) + rand()*3;
    else
        z(i) = z(i) - rand()*3;
    end
end

然后使用svd降维

a = [x;y;z];
[u,s,v] = svd(a);

u u u ( 3 , 3 ) (3,3) (3,3) 的矩阵, s s s ( 3 , 20 ) (3,20) (3,20) 的矩阵, s s s ( 20 , 20 ) (20,20) (20,20) 的矩阵

有着关系: a = u ∗ s ∗ v T a=u*s*v^T a=usvT

当然也可以使用精简分解 svd(a,‘econ’)

当降维到 2 2 2维的时候:

v = v(:,1:2);
s = s(:,1:2);

Ans = u*s*v';
X = Ans(1,:);
Y = Ans(2,:);
Z = Ans(3,:);

变化之后 u u u ( 3 , 3 ) (3,3) (3,3) 的矩阵, s s s ( 3 , 2 ) (3,2) (3,2) 的矩阵, s s s ( 20 , 2 ) (20,2) (20,2) 的矩阵,当然,直接让第三个特征值为0也可以也就是 s ( 3 , 3 ) = 0 s(3,3)=0 s(3,3)=0,结果是一样的,降维的方法有两种,第一个就是取他的特征向量,取前几个特征向量,第二个就是让特征值为0

假设取了前 k k k个向量,所占信息多少计算方式为 ∑ i = 1 k s i i ∑ i = 1 n s i i \frac{\sum_{i=1}^{k}s_{ii}}{\sum_{i=1}^{n}s_{ii}} i=1nsiii=1ksii,也就是选中特征向量的特征值占所有特征值的百分之多少

这是压缩前和压缩之后的变化,在数据相关性很强的情况下,可见压缩一维影响并不是特别的大

请添加图片描述

请添加图片描述

压缩之后成为了一个平面

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

d3ac

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值