降维_奇异值分解(SVD)

一.奇异值分解定义

将一个非零的m\times n实矩阵A,A\in R^{m\times n},表示为如下三个实矩阵的乘积形式的运算,即进行矩阵的因子分解:

A=U\Sigma V^T

其中,Um阶正交矩阵,Vn阶正交矩阵,\Sigma是由降序排列的非负对角元素组成的m\times n矩形对角矩阵,用符号描述如下:

UU^T=I,VV^T=I\\ \Sigma=diag(\sigma_1,\sigma_2,...,\sigma_p),\sigma_1\geq\sigma_2\geq\cdots\geq\sigma_p\geq 0,p=min(m,n)

二.奇异值分解定理

任意m\times n的实矩阵都可以进行奇异值分解,这便是奇异值分解定理,下面构造性的证明

2.1求\Sigma,V

由于Am\times n阶的矩阵,所以A^TA是一个n\times n实对称矩阵,故可以对其做正交分解使得:

V^T(A^TA)V=\Lambda

其中,V为n阶正交实矩阵,\Lambdan阶对角阵,其对角线元素由A^TA的特征值构成,且这些特征值非负,下面简单说明,假设\lambdaA^TA的一个特征值,x是对应的特征向量,那么

||Ax||^2=x^TA^TAx=\lambda x^Tx=\lambda ||x||^2

所以:

\lambda=\frac{||Ax||^2}{||x||^2}>0

我们可以通过调整正交矩阵V的排列损失使得对应的特征值形成降序排列:

\lambda_1\geq\lambda_2\geq \cdots \geq\lambda_p\geq 0

接着计算奇异值:

\sigma_j=\sqrt{\lambda_j},j=1,2,...,q

假设A的秩为r,则A^TA的秩也为r,所以有:

\lambda_1\geq\lambda_2\geq \cdots \geq\lambda_r> 0,\lambda_{r+1}=\lambda_{r+2}=\cdots=\lambda_p=0

相应的,我们令:

V_1=[v_1,...,v_r],V_2=[v_{r+1},...,v_p]

则:

V=[V_1\ V_2]

同样地,我们令:

\Sigma_1=diag(\sigma_1,...,\sigma_r)

对其余部分填充0,使得:

\Sigma=\begin{bmatrix} \Sigma_1 & 0\\ 0 & 0 \end{bmatrix}

2.2 求U

接下来构造m阶正交实对称矩阵U,我们令:

u_j=\frac{1}{\sigma_j}Av_j,j=1,2,...,r

令:

U_1=[u_1,...,u_r]

那么,如下关系就可以成立了:

AV_1=U_1\Sigma_1

接下来,再为U_1扩充m-r个标准正交向量,令[u_{r+1},...,u_m]N(A^T)的一组正交基,并令:

U_2=[u_{r+1},...,u_m]\\ U=[U_1\ U_2]

所以:

U\Sigma V^T=\begin{bmatrix} U_1 & U_2 \end{bmatrix} \begin{bmatrix} \Sigma_1 & 0\\ 0 & 0 \end{bmatrix} \begin{bmatrix} V_1^T\\ V_2^T \end{bmatrix}=U_1\Sigma_1V_1^T=AV_1V_1^T=A

三.紧奇异值分解与截断奇异值分解

3.1紧奇异值分解

上面第二节的分解方式称为完全奇异分解,大家可以发现,如果r<p,我们完全没有必要对U_1以及V_1进行扩充,因为通过U_1,\Sigma_1,V_1就可以无损还原A,即:

A=U_1\Sigma_1V_1^T

这便是紧奇异分解

3.2截断奇异值分解

另外,我们也可以只取最大的k个奇异值(k<r)对应的部分去近似A,这便是截断奇异值分解,即:

A\simeq U_k\Sigma_kV_k^T

这里,U_k是一个m\times k的矩阵,由U的前k列得到,V_kn\times k矩阵,由V的前k列得到,\Sigma_kk阶对角矩阵,由\Sigma的前kk列得到,下面通过对图像的SVD分解不同截断来加深理解,参考自>>>

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

plt.figure(figsize = (18,4))
im = plt.imread('./source/19_降维_svd_demo.jpg')
ks=[800,500,200,100,50,10]#分别截取不同的k
for idx,k in enumerate(ks):
    svd_image = []
    for ch in range(3):#注意,有RGB三个维度,每个维度对应一个矩阵做SVD分解
        im_ch = im[:,:,ch]
        U,D,VT = np.linalg.svd(im_ch)
        imx = np.matmul(np.matmul(U[:,:k],np.diag(D[:k])),VT[:k,:])
        # 将像素值约束到合理范围
        imx = np.where(imx<0,0,imx)
        imx = np.where(imx>255,255,imx)
        svd_image.append(imx.astype('uint8'))
    img = np.stack((svd_image[0], svd_image[1], svd_image[2]), 2)
    plt.subplot(1,len(ks),idx+1)
    plt.imshow(img)
    plt.axis('off')
    plt.title("k="+str(k))

显然,k越小图片越模糊...,另外我们可以发现k=800k=50的画质差距并不大,间接反映出奇异值从大到小,其实衰减很快,所以仅保留少许的k即可还原一个不错的图片效果

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

推荐阅读更多精彩内容