日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Sparse Principal Component Analysis via Rotation and Truncation

發布時間:2024/10/12 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Sparse Principal Component Analysis via Rotation and Truncation 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 對以往一些SPCA算法復雜度的總結
  • Notation
  • 論文概述
  • 原始問題
  • 問題的變種
  • 算法
    • 固定\(X\),計算\(R\)
    • 固定\(R\),求解\(X\)\(Z =VR^{\mathrm{T}}\)
  • \(T-\ell_0\)(新的初始問題)
  • T-sp 考慮稀疏度的初始問題
  • T-en 考慮Energy的問題
  • 代碼

SPCArt算法,利用旋轉(正交變換更為恰當,因為沒有體現出旋轉這個過程),交替迭代求解sparse PCA。

對以往一些SPCA算法復雜度的總結


注:\(r\)是選取的主成分數目,\(m\)為迭代次數,\(p\)為樣本維度,\(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\)個載荷向量(loadings,按照特征值降序排列)
\(\forall 旋轉矩陣(正交矩陣)R \in \mathbb{R}^{r \times r}\)
\(V_{1:r}R\)也是彼此正交的,張成同一子空間的向量組。

原始問題


如果能解出來,當然好,可是這是一個很難求解的問題,所以需要改進。

問題的變種

\(V_{1:r}\)直接用\(V\)表示了,為了符號的簡潔。


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

算法


這是一個交替迭代算法,我們來分別討論。

固定\(X\),計算\(R\)

當固定\(X\),之后,問題就退化為:

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

上述最小化問題,可以變換為
\(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)\)
\(R = WQ^{\mathrm{T}}\)(注意\(W^{\mathrm{T}}RQ\)是正交矩陣)。

固定\(R\),求解\(X\)\(Z =VR^{\mathrm{T}}\)

1-范數


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

經過轉換,上述問題還等價于:
\(max_{X_i} \quad Z_i^{\mathrm{T}}X_i-\lambda\|X_i\|_1 \quad i=1,2,\ldots,r\)

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

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


\(R\)的求解問題沒有變化,考慮\(R\)固定的時候,求解\(X\)

等價于:

\(\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}\),此時函數值為\(\lambda^2\)
\(X_{ij}^* = 0\),值為\(Z_{ij}^2\),所以,為了最小化值,取:
\(min \{Z_{ij}^2,\lambda^2\}\),也就是說,
\(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 考慮稀疏度的初始問題


\(\lambda \in \{0, 1, 2,\ldots,p-1\}\)
\(R\)的求法如出一轍,依舊只需考慮在\(R\)固定的情況下,如何求解\(X\)的情況。

等價于:

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

T-en 考慮Energy的問題

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

文章到此并沒有結束,還提及了一些衡量算法優劣的指標,但是這里就不提了。大體的思想就在上面,我認為這篇論文好在,能夠把各種截斷方法和實際優化問題結合在一起,很不錯。

代碼

def Compute_R(X, V):W, D, Q_T = np.linalg.svd(X.T @ V)return W @ Q_Tdef T_S(V, R, k): #k in [0,1)Z = V @ R.Tsign = np.where(Z < 0, -1, 1)truncate = np.where(np.abs(Z) - k < 0, 0, np.abs(Z) - k)X = sign * truncateX = X / np.sqrt((np.sum(X ** 2, 0)))return Xdef T_H(V, R, k): #k in [0,1) 沒有測試過這個函數Z = V @ R.TX = np.where(np.abs(Z) > k, Z, 0)X = X / np.sqrt((np.sum(X ** 2, 0)))return Xdef T_P(V, R, k): #k belongs to {0, 1, 2, ..., (p-1)} 沒有測試過這個函數Z = V @ R.TZ[np.argsort(np.abs(Z), 0)[:k], np.arange(Z.shape[1])] = 0X = Z / np.sqrt((np.sum(Z ** 2, 0)))return Xdef Main(C, r, Max_iter, k): #用T_S截斷 可以用F范數判斷是否收斂,為了簡單直接限定次數value, V_T = np.linalg.eig(C)V = V_T[:r].TR = np.eye(r)while Max_iter > 0:Max_iter -= 1X = T_S(V, R, k)R = Compute_R(X, V)return X.T

結果,稀疏的程度大點,反而效果還好點。

轉載于:https://www.cnblogs.com/MTandHJ/p/10527957.html

總結

以上是生活随笔為你收集整理的Sparse Principal Component Analysis via Rotation and Truncation的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。