目录
一、PCA数学本质:正交投影的几何之美
1.1 方差最大化原理
目标函数:
求解过程:通过特征值分解得到主成分方向
1.2 奇异值分解(SVD)实现
矩阵分解公式:
-
V的列向量即为主成分方向
-
Σ对角线元素为奇异值的平方根
1.3 方差贡献率计算
import numpy as np
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
digits = load_digits()
X = digits.data
pca = PCA().fit(X)
explained_variance = pca.explained_variance_ratio_
plt.figure(figsize=(10,6))
plt.plot(np.cumsum(explained_variance))
plt.xlabel('主成分数量')
plt.ylabel('累计方差解释率')
plt.axhline(0.95, color='r', linestyle='--')
plt.grid(True)
二、Scikit-Learn实战:从入门到精通
2.1 基础应用模板
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
# 构建标准化+PCA流程
pca_pipe = Pipeline([
('scaler', StandardScaler()),
('pca', PCA(n_components=0.95))
])
X_reduced = pca_pipe.fit_transform(X)
print(f"原始维度: {X.shape[1]}")
print(f"降维后维度: {X_reduced.shape[1]}")
2.2 主成分可视化
plt.figure(figsize=(10,8))
plt.scatter(X_reduced[:,0], X_reduced[:,1],
c=digits.target, cmap='tab10', alpha=0.6)
plt.colorbar(label='数字类别')
plt.xlabel('第一主成分')
plt.ylabel('第二主成分')
plt.title('MNIST数据PCA降维可