99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀奇異值分解(SVD)原理詳解及推導(dǎo)
奇異值分解(SVD)原理詳解及推導(dǎo)
2017-12-22
收藏

奇異值分解(SVD)原理詳解及推導(dǎo)

在網(wǎng)上看到有很多文章介紹SVD的,講的也都不錯(cuò),但是感覺還是有需要補(bǔ)充的,特別是關(guān)于矩陣和映射之間的對(duì)應(yīng)關(guān)系。前段時(shí)間看了國外的一篇文章,叫A Singularly Valuable Decomposition The SVD of a Matrix,覺得分析的特別好,把矩陣和空間關(guān)系對(duì)應(yīng)了起來。本文就參考了該文并結(jié)合矩陣的相關(guān)知識(shí)把SVD原理梳理一下。

SVD不僅是一個(gè)數(shù)學(xué)問題,在工程應(yīng)用中的很多地方都有它的身影,比如前面講的PCA,掌握了SVD原理后再去看PCA那是相當(dāng)簡單的,在推薦系統(tǒng)方面,SVD更是名聲大噪,將它應(yīng)用于推薦系統(tǒng)的是Netflix大獎(jiǎng)的獲得者Koren,可以在Google上找到他寫的文章;用SVD可以很容易得到任意矩陣的滿秩分解,用滿秩分解可以對(duì)數(shù)據(jù)做壓縮??梢杂?a href='/map/svd/' style='color:#000;font-size:inherit;'>SVD來證明對(duì)任意M*N的矩陣均存在如下分解:

這個(gè)可以應(yīng)用在數(shù)據(jù)降維壓縮上!在數(shù)據(jù)相關(guān)性特別大的情況下存儲(chǔ)X和Y矩陣比存儲(chǔ)A矩陣占用空間更??!

在開始講解SVD之前,先補(bǔ)充一點(diǎn)矩陣代數(shù)的相關(guān)知識(shí)。

正交矩陣

正交矩陣是在歐幾里得空間里的叫法,在酉空間里叫酉矩陣,一個(gè)正交矩陣對(duì)應(yīng)的變換叫正交變換,這個(gè)變換的特點(diǎn)是不改變向量的尺寸和向量間的夾角,那么它到底是個(gè)什么樣的變換呢?看下面這張圖

假設(shè)二維空間中的一個(gè)向量OA,它在標(biāo)準(zhǔn)坐標(biāo)系也即e1、e2表示的坐標(biāo)是中表示為(a,b)'(用'表示轉(zhuǎn)置),現(xiàn)在把它用另一組坐標(biāo)e1'、e2'表示為(a',b')',存在矩陣U使得(a',b')'=U(a,b)',則U即為正交矩陣。從圖中可以看到,正交變換只是將變換向量用另一組正交基表示,在這個(gè)過程中并沒有對(duì)向量做拉伸,也不改變向量的空間位置,加入對(duì)兩個(gè)向量同時(shí)做正交變換,那么變換前后這兩個(gè)向量的夾角顯然不會(huì)改變。上面的例子只是正交變換的一個(gè)方面,即旋轉(zhuǎn)變換,可以把e1'、e2'坐標(biāo)系看做是e1、e2坐標(biāo)系經(jīng)過旋轉(zhuǎn)某個(gè)斯塔角度得到,怎么樣得到該旋轉(zhuǎn)矩陣U呢?如下

正交陣U行(列)向量之間都是單位正交向量。上面求得的是一個(gè)旋轉(zhuǎn)矩陣,它對(duì)向量做旋轉(zhuǎn)變換!也許你會(huì)有疑問:剛才不是說向量空間位置不變嗎?怎么現(xiàn)在又說它被旋轉(zhuǎn)了?對(duì)的,這兩個(gè)并沒有沖突,說空間位置不變是絕對(duì)的,但是坐標(biāo)是相對(duì)的,加入你站在e1上看OA,隨著e1旋轉(zhuǎn)到e1',看OA的位置就會(huì)改變。如下圖:

如圖,如果我選擇了e1'、e2'作為新的標(biāo)準(zhǔn)坐標(biāo)系,那么在新坐標(biāo)系中OA(原標(biāo)準(zhǔn)坐標(biāo)系的表示)就變成了OA',這樣看來就好像坐標(biāo)系不動(dòng),把OA往順時(shí)針方向旋轉(zhuǎn)了“斯塔”角度,這個(gè)操作實(shí)現(xiàn)起來很簡單:將變換后的向量坐標(biāo)仍然表示在當(dāng)前坐標(biāo)系中。

旋轉(zhuǎn)變換是正交變換的一個(gè)方面,這個(gè)挺有用的,比如在開發(fā)中需要實(shí)現(xiàn)某種旋轉(zhuǎn)效果,直接可以用旋轉(zhuǎn)變換實(shí)現(xiàn)。正交變換的另一個(gè)方面是反射變換,也即e1'的方向與圖中方向相反,這個(gè)不再討論。

總結(jié):正交矩陣的行(列)向量都是兩兩正交的單位向量,正交矩陣對(duì)應(yīng)的變換為正交變換,它有兩種表現(xiàn):旋轉(zhuǎn)和反射。正交矩陣將標(biāo)準(zhǔn)正交基映射為標(biāo)準(zhǔn)正交基(即圖中從e1、e2到e1'、e2')

特征值分解——EVD

在討論SVD之前先討論矩陣的特征值分解(EVD),在這里,選擇一種特殊的矩陣——對(duì)稱陣(酉空間中叫hermite矩陣即厄米陣)。對(duì)稱陣有一個(gè)很優(yōu)美的性質(zhì):它總能相似對(duì)角化,對(duì)稱陣不同特征值對(duì)應(yīng)的特征向量兩兩正交。一個(gè)矩陣能相似對(duì)角化即說明其特征子空間即為其列空間,若不能對(duì)角化則其特征子空間為列空間的子空間。現(xiàn)在假設(shè)存在mxm的滿秩對(duì)稱矩陣A,它有m個(gè)不同的特征值,設(shè)特征值為

對(duì)應(yīng)的單位特征向量為

則有

進(jìn)而

所以可得到A的特征值分解(由于對(duì)稱陣特征向量兩兩正交,所以U為正交陣,正交陣的逆矩陣等于其轉(zhuǎn)置)

這里假設(shè)A有m個(gè)不同的特征值,實(shí)際上,只要A是對(duì)稱陣其均有如上分解。

矩陣A分解了,相應(yīng)的,其對(duì)應(yīng)的映射也分解為三個(gè)映射?,F(xiàn)在假設(shè)有x向量,用A將其變換到A的列空間中,那么首先由U'先對(duì)x做變換:

U是正交陣U'也是正交陣,所以U'對(duì)x的變換是正交變換,它將x用新的坐標(biāo)系來表示,這個(gè)坐標(biāo)系就是A的所有正交的特征向量構(gòu)成的坐標(biāo)系。比如將x用A的所有特征向量表示為:

則通過第一個(gè)變換就可以把x表示為[a1 a2 ... am]':

緊接著,在新的坐標(biāo)系表示下,由中間那個(gè)對(duì)角矩陣對(duì)新的向量坐標(biāo)換,其結(jié)果就是將向量往各個(gè)軸方向拉伸或壓縮:

從上圖可以看到,如果A不是滿秩的話,那么就是說對(duì)角陣的對(duì)角線上元素存在0,這時(shí)候就會(huì)導(dǎo)致維度退化,這樣就會(huì)使映射后的向量落入m維空間的子空間中。

最后一個(gè)變換就是U對(duì)拉伸或壓縮后的向量做變換,由于U和U'是互為逆矩陣,所以U變換是U'變換的逆變換。

因此,從對(duì)稱陣的分解對(duì)應(yīng)的映射分解來分析一個(gè)矩陣的變換特點(diǎn)是非常直觀的。假設(shè)對(duì)稱陣特征值全為1那么顯然它就是單位陣,如果對(duì)稱陣的特征值有個(gè)別是0其他全是1,那么它就是一個(gè)正交投影矩陣,它將m維向量投影到它的列空間中。

根據(jù)對(duì)稱陣A的特征向量,如果A是2*2的,那么就可以在二維平面中找到這樣一個(gè)矩形,是的這個(gè)矩形經(jīng)過A變換后還是矩形:

這個(gè)矩形的選擇就是讓其邊都落在A的特征向量方向上,如果選擇其他矩形的話變換后的圖形就不是矩形了!

奇異值分解——SVD

上面的特征值分解的A矩陣是對(duì)稱陣,根據(jù)EVD可以找到一個(gè)(超)矩形使得變換后還是(超)矩形,也即A可以將一組正交基映射到另一組正交基!那么現(xiàn)在來分析:對(duì)任意M*N的矩陣,能否找到一組正交基使得經(jīng)過它變換后還是正交基?答案是肯定的,它就是SVD分解的精髓所在。

現(xiàn)在假設(shè)存在M*N矩陣A,事實(shí)上,A矩陣將n維空間中的向量映射到k(k<=m)維空間中,k=Rank(A)?,F(xiàn)在的目標(biāo)就是:在n維空間中找一組正交基,使得經(jīng)過A變換后還是正交的。假設(shè)已經(jīng)找到這樣一組正交基:

則A矩陣將這組基映射為:

如果要使他們兩兩正交,即

根據(jù)假設(shè),存在

所以如果正交基v選擇為A'A的特征向量的話,由于A'A是對(duì)稱陣,v之間兩兩正交,那么

這樣就找到了正交基使其映射后還是正交基了,現(xiàn)在,將映射后的正交基單位化:

因?yàn)?

所以有

所以取單位向量

由此可得

當(dāng)k < i <= m時(shí),對(duì)u1,u2,...,uk進(jìn)行擴(kuò)展u(k+1),...,um,使得u1,u2,...,um為m維空間中的一組正交基,即

同樣的,對(duì)v1,v2,...,vk進(jìn)行擴(kuò)展v(k+1),...,vn(這n-k個(gè)向量存在于A的零空間中,即Ax=0的解空間的基),使得v1,v2,...,vn為n維空間中的一組正交基,即

則可得到

繼而可以得到A矩陣的奇異值分解:

現(xiàn)在可以來對(duì)A矩陣的映射過程進(jìn)行分析了:如果在n維空間中找到一個(gè)(超)矩形,其邊都落在A'A的特征向量的方向上,那么經(jīng)過A變換后的形狀仍然為(超)矩形!

vi為A'A的特征向量,稱為A的右奇異向量,ui=Avi實(shí)際上為AA'的特征向量,稱為A的左奇異向量。下面利用SVD證明文章一開始的滿秩分解:

利用矩陣分塊乘法展開得:

可以看到第二項(xiàng)為0,有

則A=XY即是A的滿秩分解。

整個(gè)SVD的推導(dǎo)過程就是這樣,后面會(huì)介紹SVD推薦系統(tǒng)中的具體應(yīng)用,也就是復(fù)現(xiàn)Koren論文中的算法以及其推導(dǎo)過程。


數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請(qǐng)參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }