Sparse Principal Component Analysis via Rotation and Truncation

SPCArt算法,利用旋轉(zhuǎn)(正交變換更為恰當(dāng),因?yàn)闆](méi)有體現(xiàn)出旋轉(zhuǎn)這個(gè)過(guò)程),交替迭代求解sparse PCA。

對(duì)以往一些SPCA算法復(fù)雜度的總結(jié)

在這里插入圖片描述

注:
r
是選取的主成分?jǐn)?shù)目,
m
為迭代次數(shù),
p
為樣本維度,
n
為樣本數(shù)目。本文算法,需要先進(jìn)行SVD,并未在上表中給出。

Notation

在這里插入圖片描述

論文概述

A = U\Sigma V^{\mathrm{T}}
V_{1:r}=[V_1,V_2,\ldots, V_r] \in \mathbb{R}^{p\times r}就是普通PCA的前r個(gè)載荷向量(loadings,按照特征值降序排列)
\forall 旋轉(zhuǎn)矩陣(正交矩陣)R \in \mathbb{R}^{r \times r}
V_{1:r}R也是彼此正交的,張成同一子空間的向量組。

原始問(wèn)題

在這里插入圖片描述

如果能解出來(lái),當(dāng)然好,可是這是一個(gè)很難求解的問(wèn)題,所以需要改進(jìn)。

問(wèn)題的變種

V_{1:r}直接用V表示了,為了符號(hào)的簡(jiǎn)潔。

在這里插入圖片描述

變成這個(gè)問(wèn)題之后,我們所追求的便是
X
了,
X_i
,就是我們要的載荷向量,顯然,這個(gè)問(wèn)題所傳達(dá)出來(lái)的含義是:
1.我們希望
XR
V
相差不大,意味著
X_i
近似正交且張成同一個(gè)子空間。
2.
\|X_i\|_1
作為懲罰項(xiàng),可以起到稀疏化的作用(這是1-范數(shù)的特點(diǎn))。

算法

在這里插入圖片描述

這是一個(gè)交替迭代算法,我們來(lái)分別討論。

固定X,計(jì)算R

當(dāng)固定X,之后,問(wèn)題就退化為:

在這里插入圖片描述

這個(gè)問(wèn)題在Sparse Principal Component Analysis(Zou 06)這篇論文里面也有提到。

上述最小化問(wèn)題,可以變換為
max \quad tr(V^{\mathrm{T}}XR), \quad s.t. \quad R^{\mathrm{T}}R=I
X^{\mathrm{T}}V=WDQ^{\mathrm{T}}
就是要最大化:
tr(QDW^{\mathrm{T}}R)=tr(DW^{\mathrm{T}}RQ)\leq tr(D)
當(dāng)R = WQ^{\mathrm{T}}(注意W^{\mathrm{T}}RQ是正交矩陣)。

固定R,求解XZ =VR^{\mathrm{T}}

1-范數(shù)

在這里插入圖片描述

注意:
\|VR^{\mathrm{T}}-X\|_F^2=\|(V-XR)R^{\mathrm{T}}\|_F^2
,所以這個(gè)問(wèn)題和原始問(wèn)題是等價(jià)的。

經(jīng)過(guò)轉(zhuǎn)換,上述問(wèn)題還等價(jià)于:
max_{X_i} \quad Z_i^{\mathrm{T}}X_i-\lambda\|X_i\|_1 \quad i=1,2,\ldots,r

通過(guò)分析(蠻簡(jiǎn)單的,但是不好表述),可以得到:
X_i^*=S_\lambda(Z_i)/\|S_\lambda(Z_i)\|_2

T-\ell_0(新的初始問(wèn)題)

在這里插入圖片描述

R
的求解問(wèn)題沒(méi)有變化,考慮
R
固定的時(shí)候,求解
X

等價(jià)于:

\mathop{min}\limits_{X_{ij},Z_{ij}} \quad (Z_{ij}-X_{ij})^2+\lambda^2\|X_{ij}\|_0
顯然,若X_{ij}^* \neq 0,X_{ij}^*=Z_{ij},此時(shí)函數(shù)值為\lambda^2
X_{ij}^* = 0,值為Z_{ij}^2,所以,為了最小化值,?。?br> min \{Z_{ij}^2,\lambda^2\},也就是說(shuō),
X_{ij}=0 \quad if\:Z_{ij}^2>\lambda^2 否則, X_{ij}=Z_{ij}
X_i^*=H_\lambda(Z_i)/\|H_\lambda(Z_i)\|_2

T-sp 考慮稀疏度的初始問(wèn)題

在這里插入圖片描述

\lambda \in \{0, 1, 2,\ldots,p-1\}

R
的求法如出一轍,依舊只需考慮在
R
固定的情況下,如何求解
X
的情況。

等價(jià)于:

max \quad Z_i^{\mathrm{T}}X_i 在條件不變的情況下。
證明挺簡(jiǎn)單的,但不好表述,就此別過(guò)吧。
最優(yōu)解是:X_i^*=P_\lambda(Z_i)/\|P_\lambda(Z_i)\|_2

T-en 考慮Energy的問(wèn)題

X_i = E_\lambda(Z_i)/\|E_\lambda(Z_i)\|_2

文章到此并沒(méi)有結(jié)束,還提及了一些衡量算法優(yōu)劣的指標(biāo),但是這里就不提了。大體的思想就在上面,我認(rèn)為這篇論文好在,能夠把各種截?cái)喾椒ê蛯?shí)際優(yōu)化問(wèn)題結(jié)合在一起,很不錯(cuò)。

代碼

def Compute_R(X, V):
    
    W, D, Q_T = np.linalg.svd(X.T @ V)
    
    return W @ Q_T

def T_S(V, R, k): #k in [0,1)
    
    Z = V @ R.T
    sign = np.where(Z < 0, -1, 1)
    truncate = np.where(np.abs(Z) - k < 0, 0, np.abs(Z) - k)
    X = sign * truncate
    X = X / np.sqrt((np.sum(X ** 2, 0)))
    
    return X

def T_H(V, R, k): #k in [0,1)  沒(méi)有測(cè)試過(guò)這個(gè)函數(shù)
    
    Z = V @ R.T
    X = np.where(np.abs(Z) > k, Z, 0)
    X = X / np.sqrt((np.sum(X ** 2, 0)))
    
    return X

def T_P(V, R, k): #k belongs to {0, 1, 2, ..., (p-1)}    沒(méi)有測(cè)試過(guò)這個(gè)函數(shù)
    
    Z = V @ R.T
    Z[np.argsort(np.abs(Z), 0)[:k], np.arange(Z.shape[1])] = 0
    X = Z / np.sqrt((np.sum(Z ** 2, 0)))
    
    return X
    
    
def Main(C, r, Max_iter, k):  #用T_S截?cái)? 可以用F范數(shù)判斷是否收斂,為了簡(jiǎn)單直接限定次數(shù)
    
    value, V_T = np.linalg.eig(C)
    V = V_T[:r].T
    R = np.eye(r)
    while Max_iter > 0:
        
        Max_iter -= 1
        X = T_S(V, R, k)
        R = Compute_R(X, V)
        
    return X.T
      

結(jié)果,稀疏的程度大點(diǎn),反而效果還好點(diǎn)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容