sklearn.decomposition.PCA
(主成分分析,PCA)
PCA
(Principal Component Analysis,主成分分析)是 sklearn.decomposition
提供的一种 线性降维技术,常用于 数据降维、特征选择、可视化 和 噪声去除,广泛应用于 模式识别、图像处理、数据可视化 等领域。
1. PCA
作用
- 用于降维:将高维数据映射到低维空间,保留数据的主要特征。
- 数据压缩:通过选择主要的主成分,减少特征的数量,同时尽量保持数据的原始信息。
- 特征选择:找出对数据最有用的特征(即主成分)。
2. PCA
代码示例
(1) 训练 PCA
from sklearn.decomposition import PCA
import numpy as np
# 生成数据(100 个样本,5 个特征)
X = np.random.rand(100, 5)
# 训练 PCA 模型,降到 2 维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
print("降维后的数据形状:", X_pca.shape)
解释
n_components=2
:将数据降到 2 维。fit_transform(X)
:训练模型并将数据转换为主成分空间。
3. PCA
主要参数
PCA(n_components=2, whiten=False, svd_solver='auto', random_state=None)
参数 | 说明 |
---|---|
n_components | 主成分数(默认 None ,保留所有成分,指定整数时表示降到指定维度) |
whiten | 是否白化数据(默认 False ,如果为 True ,则使每个主成分的方差为 1) |
svd_solver | SVD 求解器('auto' 、'full' 、'arpack' 、'randomized' ) |
random_state | 随机种子(控制随机性,确保结果复现) |
4. 选择最佳主成分数 (n_components
)
import matplotlib.pyplot as plt
# 计算累积解释方差
pca = PCA().fit(X)
plt.plot(np.cumsum(pca.explained_variance_ratio_))
plt.xlabel("主成分数")
plt.ylabel("累计解释方差")
plt.title("PCA 解释方差")
plt.show()
解释
cumsum(pca.explained_variance_ratio_)
:显示不同主成分数量下,数据解释方差的累计值。- 根据“拐点”选择合适的
n_components
。
5. 查看每个主成分的方差贡献
print("各主成分的方差贡献比例:", pca.explained_variance_ratio_)
解释
explained_variance_ratio_
:返回各主成分对数据方差的贡献比例,通常前几个主成分解释了数据的 大部分方差。
6. PCA 结果可视化
import seaborn as sns
# 可视化降维后的数据
sns.scatterplot(x=X_pca[:, 0], y=X_pca[:, 1])
plt.title("PCA 降维结果")
plt.show()
解释
X_pca[:, 0]
和X_pca[:, 1]
:可视化降到 2 维后的数据。
7. PCA
与数据重建
# 使用 PCA 进行降维并重建数据
X_reconstructed = pca.inverse_transform(X_pca)
print("原始数据与重建数据的差异:", np.sum((X - X_reconstructed) ** 2))
解释
inverse_transform
:使用主成分反向映射回原始数据空间。- 误差较小时,表示降维后的数据较好地保留了信息。
8. PCA
vs. KernelPCA
方法 | 适用情况 | 主要区别 |
---|---|---|
PCA | 适用于线性数据 | 线性降维,数据仍然是正交的 |
KernelPCA | 适用于非线性数据 | 通过核技巧进行非线性降维 |
示例
from sklearn.decomposition import KernelPCA
# 核 PCA(使用 RBF 核)
kpca = KernelPCA(n_components=2, kernel="rbf")
X_kpca = kpca.fit_transform(X)
print("核 PCA 降维后的数据形状:", X_kpca.shape)
9. 适用场景
- 数据可视化(如将高维数据降到 2 维或 3 维,便于可视化)。
- 降维与压缩(如减少特征数量,去除噪声)。
- 特征选择(如保留方差贡献较大的特征,去除冗余特征)。
- 数据预处理(如在机器学习中使用 PCA 降维来提高模型效率和性能)。
10. 结论
PCA
是一种线性降维方法,适用于特征选择、数据压缩、可视化等任务,通过主成分分析可以 减少特征维度,同时尽量保留数据的方差。它特别适用于 高维数据的可视化和降噪。