语言:中文 最后更新:2026-05-02 English: English
PCA 为 centered dense data 估计一组正交低维基,捕捉最大方差方向。它支持 CPU、CuPy/CUDA 和 Torch CUDA。
from statgpu.unsupervised import PCA对中心化数据 X_c = X - mean(X),PCA 求解:
保留 k 个 components 时,也等价于在正交投影中最小化 rank-k 平方重构误差:
二者等价,因为中心化后的总方差是固定的。
-
svd_solver="covariance"计算 $$ \Sigma = \frac{X_c^\top X_c}{n - 1} $$ 再用eigh求解 $$ \Sigma v_j = \lambda_j v_j . $$ -
svd_solver="full"计算 $$ X_c = U S V^\top $$ 使用V.T的行作为 components。 -
svd_solver="auto"在n_samples >= n_features时使用 covariance/eigh,否则使用 full SVD。 -
svd_solver="randomized"使用随机投影、power iteration 和小矩阵 SVD 近似 leading right singular vectors。 - explained variance 计算为 $$ \operatorname{explained_variance}_j = \frac{s_j^2}{n - 1}. $$
-
explained_variance_ratio_是 retained variance 除以 centered total variance。
n_components:保留的 components 数量;None保留所有可行 components。svd_solver:"auto"、"full"、"covariance"或"randomized"。whiten:为True时,transform 后的 scores 会除以sqrt(explained_variance_)。random_state、n_oversamples、iterated_power:randomized solver 控制参数。device:"auto"、"cpu"、"cuda"或"torch"。
import numpy as np
from statgpu.unsupervised import PCA
X = np.random.default_rng(0).normal(size=(2000, 50))
pca_cpu = PCA(n_components=10, svd_solver="covariance", device="cpu")
Z_cpu = pca_cpu.fit_transform(X)
pca_gpu = PCA(n_components=10, svd_solver="covariance", device="cuda")
Z_gpu = pca_gpu.fit_transform(X)PCA 没有统计推断意义上的 strict inference 模式。这里的 exact/approx 指分解算法:
full和covariance是 dense 输入上的 exact solver,误差来自浮点计算。randomized是 approximate truncated SVD,由random_state、n_oversamples和iterated_power控制。- component 符号不可识别,
v和-v表示同一主成分。
components_mean_explained_variance_explained_variance_ratio_singular_values_n_components_n_features_in_
为什么 components 和 sklearn 差一个符号? Eigenvector 和 singular vector 的符号不唯一。验证时应使用 sign-aware comparison 或比较子空间。
whitening 做了什么?
它把 transformed scores 按 1 / sqrt(explained_variance_) 缩放,使拟合模型下的 component scores 近似单位方差。
- 测试:
dev/tests/test_unsupervised_pca.py。 - Benchmark:
dev/benchmarks/benchmark_unsupervised.py。 - Baseline:sklearn PCA,以及早期 unsupervised matrix 中可用的 statsmodels/R PCA 对比。
- 最新 Phase 2 摘要:
results/unsupervised_phase2_verify_summary_20260502_210000.md。
- Pearson, K. (1901). On lines and planes of closest fit to systems of points in space. The London, Edinburgh, and Dublin Philosophical Magazine and Journal of Science, Series 6, 2(11), 559-572. https://doi.org/10.1080/14786440109462720
- Jolliffe, I. T. (2002). Principal Component Analysis (2nd ed.). Springer Series in Statistics. Springer. https://doi.org/10.1007/b98835
- Halko, N., Martinsson, P. G., & Tropp, J. A. (2011). Finding structure with randomness: Probabilistic algorithms for constructing approximate matrix decompositions. SIAM Review, 53(2), 217-288. https://doi.org/10.1137/090771806