国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
SVD與PCA

奇異值分解

奇異值分解,singular value decomposition(SVD)是線性代數(shù)中一種重要的矩陣分解。

記得大學(xué)時(shí)學(xué)習(xí)線性代數(shù)中的特征值特征向量時(shí),我就一直思考這個(gè)玩意算出來(lái)到底有啥用,難不成就是一群熱(xian)愛(ài)(de)專(dan)研(teng)的人弄出來(lái)的數(shù)學(xué)小把戲?然后隨著時(shí)間的推移,這些純理論的東西就基本忘光了。大學(xué)的知識(shí)往往都這樣的,和實(shí)際不接軌,學(xué)的時(shí)候不知道有啥用,等用的時(shí)候就忘的差不多了。

現(xiàn)在,在我學(xué)習(xí)線性代數(shù)后的第8年,我終于知道特征值這個(gè)玩意有啥用了。首先,先回憶下什么是特征值和特征向量吧。

特征值

對(duì)于一個(gè)方陣,其特征值和特征向量滿足:

Aν=λνAν=λν

求出所有的特征值和特征向量后,就得出了方陣A的特征值分解:

A=QΣQ?1A=QΣQ?1

其中 QQ 是特征向量按照與特征值的對(duì)應(yīng)順序組合而成 (ν1,ν2,..)(ν1,ν2,..) , ΣΣ 是由特征值組成的一個(gè)對(duì)角矩陣。那么對(duì)于方陣A的特征值分解的意義又何在呢?先看下面這個(gè)例子,對(duì)于矩陣A(為了簡(jiǎn)單起見(jiàn),設(shè)為對(duì)角矩陣):

A=???100000100001???A=(100000100001)

其特征值為100,10和1,當(dāng)一個(gè)向量與之相乘時(shí):

???100000100001??????xyz???=???100x10yz???(100000100001)(xyz)=(100x10yz)

這個(gè)式子有何意義呢?一個(gè)典型的場(chǎng)景是降維(Dimensionality Reduction)。如何降維呢?從上面可以看到,當(dāng)xyz發(fā)生變化時(shí),x的變化將被擴(kuò)大100倍,y的變化被擴(kuò)大10倍,而z則不會(huì)被擴(kuò)大。那么當(dāng)計(jì)算的結(jié)果不需要十分精確時(shí),z這個(gè)變量對(duì)于我們來(lái)說(shuō)意義是十分小的。當(dāng)處理的數(shù)據(jù)維度十分巨大的時(shí)候,計(jì)算量變得很大,這時(shí)候就可以通過(guò)降維來(lái)去除不是那么重要的維度(如本例中的z維度),這些維度對(duì)最終的計(jì)算結(jié)果的影響遠(yuǎn)遠(yuǎn)小于其它的維度。

這個(gè)讓我想起了高中物理競(jìng)賽時(shí)學(xué)的第一個(gè)知識(shí)點(diǎn),就是估算:當(dāng)題目中給的數(shù)據(jù)條件十分的多,導(dǎo)致計(jì)算變的十分復(fù)雜時(shí),需要選擇性的去除那些數(shù)量級(jí)較小的條件,使得計(jì)算量降低?,F(xiàn)在回想,其指導(dǎo)思想和降維是一樣的。

但是,特征值分解在現(xiàn)實(shí)生活中是行不通的(不由自主的想起了rework中話)。原因很簡(jiǎn)單,特征值分解局限于方陣,而現(xiàn)實(shí)生活中,往往都不是方陣。這時(shí)就需要奇異值分解了。

奇異值

現(xiàn)實(shí)世界里,為了實(shí)現(xiàn)類似特征值分解的計(jì)算,我們使用奇異值分解。奇異值分解適用于任何矩陣,如下所示,其中A是一個(gè)m*n的矩陣:

A=Um?mΣm?nVTn?nA=Um?mΣm?nVn?nT

其中

  • UU 是一個(gè)m*m的正交矩陣,其向量被稱為左奇異向量

  • VV 也是一個(gè)n*n的正交矩陣,其向量被成為右奇異向量

  • ΣΣ 是一個(gè)m*n的矩陣,其對(duì)角線上的元素為奇異值,其余元素皆為0

當(dāng)選取top k個(gè)奇異值時(shí),可以將矩陣降維成為:

Am?nUm?kΣk?kVTk?nAm?n≈Um?kΣk?kVk?nT

特征值與奇異值

奇異值可以通過(guò)特征值來(lái)得出:

  1. 求出 ATAATA 的特征值和特征向量, (ATA)νi=λiνi(ATA)νi=λiνi

  2. 計(jì)算奇異值 σi=λi??σi=λi

  3. 右奇異向量等于 νiνi

  4. 左奇異向量等于 1σiAνi1σiAνi

SVD in Spark示例

示例數(shù)據(jù)

1
2
3
4
1 0 0 0 2
0 0 3 0 0
0 0 0 0 0
0 4 0 0 0

示例程序


public static void main(String[] args) {
    SparkConf conf = new SparkConf().setAppName("SVDTest").setMaster("local[2]");
    JavaSparkContext sc = new JavaSparkContext(conf);
    JavaRDD<String> data = sc.textFile("/home/yurnom/data/svd.txt");
    JavaRDD<Vector> rows = data.map(s -> {
        double[] values = Arrays.asList(SPACE.split(s))
              .stream()
              .mapToDouble(Double::parseDouble)
              .toArray();
        return Vectors.dense(values);
    });
    RowMatrix mat = new RowMatrix(rows.rdd());
    //第一個(gè)參數(shù)3意味著取top 3個(gè)奇異值,第二個(gè)參數(shù)true意味著計(jì)算矩陣U,第三個(gè)參數(shù)意味小于1.0E-9d的奇異值將被拋棄
    SingularValueDecomposition<RowMatrix, Matrix> svd = mat.computeSVD(3, true, 1.0E-9d);
    RowMatrix U = svd.U(); //矩陣U
    Vector s = svd.s(); //奇異值
    Matrix V = svd.V(); //矩陣V
    System.out.println(s);
    System.out.println("-------------------");
    System.out.println(V);
}

示例結(jié)果


[4.0,3.0,2.23606797749979]
-------------------
0.0   0.0  -0.44721359549995787  
-1.0  0.0  0.0                  
0.0   1.0  0.0                  
0.0   0.0  0.0                  
0.0   0.0  -0.8944271909999159  

主成分分析

主成分分析,Principal components analysis(PCA)是一種分析、簡(jiǎn)化數(shù)據(jù)集的技術(shù)。主成分分析經(jīng)常用于減少數(shù)據(jù)集的維數(shù),同時(shí)保持?jǐn)?shù)據(jù)集中的對(duì)方差貢獻(xiàn)最大的特征。其方法主要是通過(guò)對(duì)協(xié)方差矩陣進(jìn)行特征分解,以得出數(shù)據(jù)的主成分(即特征向量)與它們的權(quán)值(即特征值)。

wiki上PCA的數(shù)學(xué)定義是:一個(gè)正交化線性變換,把數(shù)據(jù)變換到一個(gè)新的坐標(biāo)系統(tǒng)中,使得這一數(shù)據(jù)的任何投影的第一大方差在第一個(gè)坐標(biāo)(稱為第一主成分)上,第二大方差在第二個(gè)坐標(biāo)(第二主成分)上,依次類推。如下圖所示,通過(guò)變化將X-Y坐標(biāo)系映射到signal和noise上:

上圖中通過(guò)坐標(biāo)變化后,找出方差最大的方向?yàn)榈谝粋€(gè)坐標(biāo)(signal),然后在其正交的平面上找出方差最大的方向?yàn)榈诙€(gè)坐標(biāo)(noise)。這樣就可以通過(guò)選取top k個(gè)坐標(biāo)方向來(lái)達(dá)到對(duì)維度(特征)的提煉。其數(shù)學(xué)表達(dá)如下,其中A矩陣表示m行n維的數(shù)據(jù),P表示坐標(biāo)系的變換:

Am?nPm?n=A?m?nAm?nPm?n=A~m?n

PCA將上述中的維度n進(jìn)行提煉,降維成k(k<n),數(shù)學(xué)表達(dá)如下:

Am?nPm?k=A?m?kAm?nPm?k=A~m?k

SVD在PCA中的使用

前文中提到SVD的降維公式:

Am?nUm?kΣk?kVTk?nAm?n≈Um?kΣk?kVk?nT

若將兩邊同時(shí)乘以 Vn?kVn?k ,則得到:

Am?nVn?kUm?kΣk?kVTk?nVn?kAm?nVn?k≈Um?kΣk?kVk?nTVn?k

由于 Vn?kVn?k 為正交矩陣,所以:

Am?nVn?kUm?kΣk?kA?m?kAm?nVn?k≈Um?kΣk?k≈A~m?k

就這樣通過(guò)SVD神奇的實(shí)現(xiàn)了PCA的坐標(biāo)系變換和特征的提煉。此外,SVD還可以進(jìn)行數(shù)據(jù)的壓縮,如下:

UTk?mAm?nUTk?mUm?kΣk?kVTk?nUk?mTAm?n≈Uk?mTUm?kΣk?kVk?nT

同樣由于 Un?kUn?k 為正交矩陣,所以:

UTk?mAm?nΣk?kVTk?nA?k?nUk?mTAm?n≈Σk?kVk?nT≈A~k?n

如此則將m行數(shù)據(jù)壓縮成k行數(shù)據(jù),其含義就是去除那些十分相近的數(shù)據(jù)。

PCA in Spark示例

示例程序

1
2
3
4
5
6
//(接上述代碼)
RowMatrix mat = new RowMatrix(rows.rdd());
Matrix pc = mat.computePrincipalComponents(3); //將維度降為3
RowMatrix projected = mat.multiply(pc); //坐標(biāo)系轉(zhuǎn)換+維度提煉
System.out.println(projected.numRows());
System.out.println(projected.numCols());

示例結(jié)果

1
2
4
3

參考資料

(轉(zhuǎn)載本站文章請(qǐng)注明作者和出處 程序員的自我修養(yǎng) – SelfUp.cn ,請(qǐng)勿用于任何商業(yè)用途)
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
主成分分析(PCA)和奇異值分解(SVD)
矩陣特征值分解與奇異值分解含義解析及應(yīng)用
機(jī)器學(xué)習(xí)中的數(shù)學(xué)(5)
【推薦系統(tǒng)】特征值分解(譜分解)和奇異值分解(SVD),即在PCA上的應(yīng)用
Stanford機(jī)器學(xué)習(xí)-數(shù)據(jù)降維
降維算法原理篇:主成分分析PCA、奇異值分解SVD、因子分析法FA、獨(dú)立成分分析ICA等原理詳推
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服