机器学习_用SVD奇异值分解给数据降维

 本想把PCA和SVD写在一起,可上篇PCA还没写清楚就已经4页word了。再把SVD和特征工程的内容加上,实在是太长了,一下说太多也记不住,于是重开一篇。
 SVD用到的原理和 PCA非常相似,就不再此赘述了,如果对特征值、特征向量相关问题不清楚请参见前篇《机器学习_用PCA主成分分析给数据降维》

1. 原理

 先回忆一下特征值分解:把向量x往特征向量方向上分解,然后每个方向上做伸缩,最后再把结果加起来即可。也可以理解为将向量x转到正交坐标系,在各个坐标轴的方向上缩放后,再转换回原来的坐标系。只有方阵才能做特征值分解,因此我们在PCA中不是直接对数据做分解,而是对参数的协方差矩阵做分解。
 我们知道,任何矩阵都可以分解为三个矩阵的乘积 A=U * Sigma * VT,也就是奇异值分解.其中 U 和VT 均是酉阵(正交阵在复数域的推广),而 Sigma 为增广对角阵。从直观上讲,U 和 VT 可视为旋转操作,Sigma 可视为缩放操作。因此奇异值分解的含义就是说,若将矩阵看做一个变换,那么任何这样的变换可以看做是两个旋转和一个缩放变换的复合,这点和特征值分解基本一样。它也可以通过对Sigma的调整实现降维,通过U和VT在高维和低维间转换。相比特征值分解,奇异值分解可处理的不只是协方差矩阵(方阵),还可以直接处理数据。


图片引自百度百科

 但SVD也有一些问题,比如数据多的时候,奇异值分解的计算量会很大,不像PCA做特征值分解时,矩阵的大小只和属性个数相关。

2. 例程

(1) 功能

对矩阵A做SVD分解;降维;原始数据转到低维度;降维后的数据恢复到原来维度,看数据损失。

(2) 代码

from numpy import linalg
import array
import numpy as np

A=np.mat([[1,2,3],[4,5,6]])  
U,Sigma,VT=linalg.svd(A)  
print("U",U)
print("Sigma",Sigma)
print("VT",VT)
Sigma[1]=0 # 降维
print("Sigma",Sigma)

S = np.zeros((2,3))
S[:2, :2] = np.diag(Sigma)
print("A conv:", np.dot(np.dot(A.T, U), S)) # 原始数据转到低维
print("A':", np.dot(np.dot(U, S), VT)) # 恢复原始维度

(3) 运行结果

('U', matrix([[-0.3863177 , -0.92236578],
        [-0.92236578,  0.3863177 ]]))
('Sigma', array([ 9.508032  ,  0.77286964]))
('VT', matrix([[-0.42866713, -0.56630692, -0.7039467 ],
        [ 0.80596391,  0.11238241, -0.58119908],
        [ 0.40824829, -0.81649658,  0.40824829]]))
('Sigma', array([ 9.508032,  0.      ]))
('A conv:', matrix([[-38.7526545 ,   0.        ,   0.        ],
        [-51.19565893,   0.        ,   0.        ],
        [-63.63866337,   0.        ,   0.        ]]))
("A':", matrix([[ 1.57454629,  2.08011388,  2.58568148],
        [ 3.75936076,  4.96644562,  6.17353048]]))

(4) 分析

 SVD分解矩阵A,A是一个2x3(mn,其中m是行数)的矩阵,把它分解成三个矩阵的乘积:A=U * Sigma * VT,其中U的大小是2x2(mm),VT为33(nn),Sigma为min(m,n),从矩阵乘法的角度上看,Sigma的大小应该是m*n,由于它是对角阵,为了简化,这里只取了对角线上元素。
 Sigma奇异值为(9.508032,0.77286964),两值差异很大,说明转换后特征主要集中在一个维度上,于是降维,Sigma调整 为(9.508032,0)。将原始矩阵A转置后乘U和调整后的Sigma,实现了对A的降维。最后,将调整后的Sigma与U,VT相乘,映射回原始维度,变为矩阵A’,对比之下,A’与A的也差不太多。不过把两维降成一维还是挺夸张的,在此只为举例,大家领会精神吧。
 这里比较重的是:观察Sigma,决定保留前几项?svd()函数对求出的奇异值和奇异向量按大小做了排序,其中值明显大的前N项,说明有N个“综合参数”最重要,因此,可以将数据降成N维。可降维度的多少,主要还是看数据的相关性,相关性越大,越适合降维。

3. 具体应用

(1) 图片压缩

 把图片的像素放一个矩阵里,做SVD分解,只保留Sigma中值大的前N项。则存储时只需保存三个矩阵,假设原图大小100x100,N为5,则原图要10000点存储,而拆分后100x5+100x5+5=1005,图像大小变为原来的1/10。

(2) 数据降维

 矩阵中记20人试吃这5种套餐的评价(5x20),先对整体数据做SVD分解,假设保留Sigma的前3项,把原矩阵转置并和U,Sigma相乘,矩阵就从520维变成了35维。再套用各种学习算法时,数据就大大缩减了(从高维到低维投影)。不过20个维度变为3个维度后,属性意义也不像之前那么直观了,我们可以使用VT矩阵把数据恢复到原来的维度。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,264评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,549评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,389评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,616评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,461评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,351评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,776评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,414评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,722评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,760评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,537评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,381评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,787评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,030评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,304评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,734评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,943评论 2 336

推荐阅读更多精彩内容