1. 程式人生 > >Spark MLlib 偽逆演算法

Spark MLlib 偽逆演算法

數學概念

1.矩陣的逆

定義
設A是數域上的一個n階方陣,若在相同數域上存在另一個n階矩陣B,使得: AB=BA=I。 則我們稱B是A的逆矩陣,而A則被稱為可逆矩陣。

條件
A是可逆矩陣的充分必要條件:A是非奇異矩陣(當|A|0時,也就是A的行列式不等於0時,A稱為非奇異矩陣)

性質
- 矩陣A可逆的充要條件是A的行列式不等於0。
- 可逆矩陣一定是方陣。
- 如果矩陣A是可逆的,A的逆矩陣是唯一的。
- 可逆矩陣也被稱為非奇異矩陣、滿秩矩陣。
- 兩個可逆矩陣的乘積依然可逆。
- 可逆矩陣的轉置矩陣也可逆。
- 矩陣可逆當且僅當它是滿秩矩陣。

求逆方法


伴隨矩陣法
矩陣A 可逆,A1=A|A|其中A是伴隨矩陣。
初等變換法

2.偽逆矩陣

定義
偽逆矩陣又稱廣義逆,由於奇異矩陣或者非方陣不存在逆矩陣。

方法
直接求解
pinv(A)=(ATA)1AT

SVD分解
S1.[U,S,V]=svd(A)
S2.將S中的非零元素求倒;
S3.svdInvA=VSTUT;

QR求解

SparkSVD分解演算法

建立RowMatrix,檔案test.txt可以寫入:

1 2 6 4 
5 3 8 2 
4 9 5 4 
3 7 9 4

程式碼

val rdd = sc.textFile("file/test.txt"
) .map(_.split(' ') .map(_.toDouble)) .map(line => Vectors.dense(line)); val rm = new RowMatrix(rdd); val SVD = rm.computeSVD(2, computeU = true); println(SVD);

參考文獻:

[1]. 數學概念
[2]. 求偽逆的三種方法
[3]. Spark MLlib機器學習實戰 王曉華著. 清華大學出版社