很多文章說到奇異值分解的時候總是大概羅列下它的功能,並沒有對功能及物理意義進行過多的闡述,現在我來對奇異值進行整理一下。
一 奇異值分解
對任意的矩陣A∈Fmn,rank(A)=r(矩陣的秩),總可以取A的如下分解:,其中U和V是正交矩陣。分別為左右奇異值向量。
U是m×m階酉矩陣;Σ是m×n階非負實數對角矩陣;而V*,即V的共軛轉置,是n×n階酉矩陣。這樣的分解就稱作M的奇異值分解。Σ對角線上的元素Σii即為M的奇異值。
V的列(columns)組成一套對M的正交"輸入"或"分析"的基向量。這些向量是M*M的特征向量。
U的列(columns)組成一套對M的正交"輸出"的基向量。這些向量是MM*的特征向量。
Σ對角線上的元素是奇異值,可視為是在輸入與輸出間進行的標量的"膨脹控制"。這些是M*M及 MM*的特征值的非零平方根,並與U和V的行向量相對應。
觀察一個4×5的矩陣
M矩陣的奇異值分解如下UΣV *
注意矩陣Σ的所有非對角元素為0。矩陣U和V * 都是酉矩陣,它們乘上各自的共軛轉置都等於單位矩陣。如下所示。在這個例子中,由於U和V * 都是酉矩陣,所以他門都是正交矩陣。
由於Σ有一個對角元素是o,所以這個奇異值分解不是唯一的。例如,例如V使得
能得到M的另一個奇異值分解。
二 奇異值分解的幾何意義
研究將一個空間映射到不同空間,特別是不同維數的空間時候,例如超定或欠定方程組所表示的情況,就需要用矩陣的奇異值來描述算子對空間的作用了。
現在給定一個二維平面上的單位圓,在映射A的變化下(矩陣可以看成一種線性變化)
Matlab程序:
結果:
V是一個正交矩陣,我們現在讓他把變化一下:(其實V就是一個簡簡單單的旋轉,沒有涉及到維數的變換)
S是一個3x2矩陣,他自然也是一種變化:
由上面可以看出,s是將原來的坐標進行拉長奇異值倍。而最后的(0,0表示原點坐標),變化如圖:
其實S就是將平面上的單位圓拉升到三維空間上的橢圓。
U是一個3x3的矩陣,自然表示在三維空間的旋轉了。如下圖:
總結:若X是n維單位球面上的一點,則Ax是一個n維橢圓面上的點,其中橢圓的n個半軸上正好是A的n個奇異值。
簡而言之:在二維空間下,奇異值將單位圓變成了橢圓。兩個奇異值正好是橢圓的長軸和短軸。逆向,不就實現了降維了么?
三 奇異值在圖形降噪方面的應用
如果我們單純的用奇異值對一個矩陣圖片進行奇異值分解,然后取其所有奇異值,那么這個過程是不會損失能量的,但是如果我們有意識的去除后面奇異值非常小的部分(奇異值默認是從大到小往下排列的)是不是就會損失一部分能量,有的人會問我,這個和降噪有什么必然的聯系嗎。
廢話,當然有了,要不我寫這個干嗎。
廢話不多說,先上matlab程序:
clear all;
close all;
clc;
a=imread('D:\Documents\MATLAB\shuaige.png');%本人帥照
%a=mat2gray(a)
a= rgb2gray(a);%灰度處理
imshow(mat2gray(a))%顯示原圖
[m,n]=size(a);
a=double(a);%把a里的數搞成雙精度浮點型
r=rank(a);%求秩
[s,v,d]=svd(a);%對圖片進行svd分解
%re=s*v*d';
re=s(:,:)*v(:,1:1)*d(:,1:1)';%取最大的那個奇異值,其他強制其為0,可以改變V和d的值,以便選取奇異值
figure;
imshow(mat2gray(re));%顯示圖片
imwrite(mat2gray(re),'1.jpg')
當我們直接對圖片灰度化處理:(很明顯,依然那么那么帥,哈哈)
現在我們取最大的那個奇異值得出的照片:(我屮艸芔茻,這什么生物,懵逼.GIF)
現在我們改成前20個最大的奇異值得出的照片:(帥氣初現,有木有?哈哈)
那么用100試一試?(我這張帥照最大只能取到179):(perfect)
總結:我們總是認為噪聲都是那些奇異值特別小的點造成的,這樣我們設置一個閥值θ,如果奇異值大於θ,我們就取θ,否則就省略之,這樣是不是就對矩陣進行降噪的了?
四 奇異值分解在推薦系統的應用
我知道我寫的一定沒有我下面上傳的好,所以我選擇上傳。。。。。
淺顯易懂。拿來主義一波。
原文鏈接:http://wenku.baidu.com/view/6bbc396633687e21ae45a910
謝謝大家