Principal component analysis in Matlab

如何对特征维度超过20000的数据进行PCA?

当传统的PCA算法应用大非常高维的数据集时,会受到限制。例如,在生物信息学中的基因表达数据。但是通常我们仅需要前两个或者三个主蹭饭进行可视化数据。对于仅抽取前k个成分,我们可以使用基于sensible principal components 分析的PPCA(probabilistic PCA )。例如使用修改的PCA matlab脚本[ppca.m],其也可以应用到不完备的数据集。

data=rand(100,10); % artificial data set of 100 variables (e.g., genes) and 10 samples

    [pc,W,data_mean,xr,evals,percentVar] = ppca(data,3);  % download: ppca.m

    plot(pc(1,:),pc(2,:),'.');
      title('{\bf PCA}');
      xlabel(['PC 1 (',num2str(round(percentVar(1)*10)/10),'%)',]);
      ylabel(['PC 2 (',num2str(round(percentVar(2)*10)/10),'%)',]);

Update: A new Matlab package by Alexander Ilin includes a collection of several algorithms of PCA to use on high-dimensional data including missing data (Ilin and Raiko, 2010).

GNU R: For probabilistic PCA (PPCA) using GNU R, see the Bioconductor package pcaMethods, also published in Bioinformatics by W. Stacklies et al. (pdf)

1.参考文献:
http://www.nlpca.org/pca-principal-component-analysis-matlab.html

### TRPCA 实现概述 对于张量鲁棒主成分分析(TRPCA),该方法旨在处理高维数据中的低秩结构和稀疏噪声。通过分解给定的数据张量为一个低秩分量和一个稀疏扰动项,TRPCA能够有效地分离异常值并恢复潜在的低秩表示。 在MATLAB中实现TRPCA可以通过交替方向乘子法(ADMM)来完成优化过程[^1]。下面提供了一个简单的基于ADMM框架下的TRPCA算法示例: ```matlab function [L, S] = trpca(X, lambda, mu, tol, maxIter) % X: 输入观测到的数据矩阵/张量 % lambda: 控制S范数惩罚力度参数 % mu: ADMM更新步长因子 % tol: 收敛阈值 % maxIter: 最大迭代次数 [n1,n2,n3] = size(X); normX = norm(X,'fro'); Y = zeros(n1,n2,n3); % Lagrange multiplier L = zeros(n1,n2,n3); % Low-rank component initialization S = zeros(n1,n2,n3); % Sparse error term initialization for iter = 1:maxIter % Update L using singular value thresholding operator temp_L = reshape(L + Y/mu, n1*n2, n3); [~,~,V] = svd(temp_L); svt_result = prox_svt(temp_L, 1/mu); L = reshape(svt_result * V', n1, n2, n3); % Update S via element-wise soft-thresholding operation S = shrink(X-L+(Y/mu), lambda/mu); % Dual variable update step for augmented Lagrangian formulation Y = Y + mu*(X-(L+S)); % Check stopping criterion based on primal and dual residuals res_pri = norm(X-(L+S),'fro') / normX; res_dual = mu*norm((L-old_L),'fro') / normX; if mod(iter,10)==0 || iter==maxIter fprintf('Iteration:%d\t Primal Residual=%.4e\tDual Residual=%.4e\n',... iter,res_pri,res_dual); end if res_pri<tol && res_dual<tol break; end end function result = prox_svt(M, tau) [U,S,V] = svd(M); sigma = diag(S); dsigma = max(sigma-tau,0); result = U*diag(dsigma)*V'; end function y = shrink(x,kappa) y = sign(x).*max(abs(x)-kappa,0); end ``` 此代码片段展示了如何利用奇异值阈值化操作以及逐元素软阈值化技术分别求解$L$和$S$两个变量,并通过引入拉格朗日乘子$Y$来进行约束条件下的最优化计算。值得注意的是,在实际应用过程中可能还需要针对具体问题调整正则化参数$\lambda$以及其他超参设置以获得更优的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值