什么是 PCA?
PCA(Principal Component Analysis, 主成分分析)是一种常用的数据降维技术。它通过找到一组新的互不相关的正交轴(主成分),将高维数据映射到低维空间。这些新轴是按照数据的方差大小排列的,首个主成分捕获了数据中最大的信息量,其后的每个主成分依次捕获了剩余数据中最大的信息量。
PCA 的主要目标有以下几个:
- 降维:在保持数据主要信息的情况下,减少数据的维度,减少数据的复杂性和冗余。
- 特征提取:将原始特征映射到新的特征空间,使新特征能够更好地描述数据。
- 噪声消除:降低数据维度的同时,可以消除高维数据中的噪声。
PCA 的贡献率是什么?
PCA 的每个主成分(Principal Component)都代表了原始数据中某一部分的方差,贡献率是指某个主成分所解释的方差占数据总方差的比例。公式如下:
贡献率=主成分的方差比上数据总方差
贡献率越高,表示该主成分包含的数据信息越多。因此,我们可以使用前几个主成分来代替原始的所有特征,以减少数据维度。
PCA 的贡献率有以下几个特点:
-
累积贡献率:前
k
个主成分的贡献率之和,被称为累积贡献率。它衡量的是前k
个主成分能够解释的数据方差比例。通常,我们希望累积贡献率能够达到 90% 或更高,以确保在降维的同时保留大部分信息。 -
排序规则:PCA 的主成分是按照贡献率从大到小排序的。第一个主成分拥有最高的贡献率,接下来每个主成分的贡献率依次递减。
如何计算 PCA 的贡献率?
在 Python 中,我们可以使用 sklearn
库中的 PCA
模块来计算贡献率。以下是一个简单的代码示例:
import numpy as np
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler# 假设有一个 10 个样本、5 个特征的示例数据
data = np.random.randn(10, 5)# 数据标准化
scaler = StandardScaler()
data_scaled = scaler.fit_transform(data)# 使用 PCA
pca = PCA(n_components=5)
pca.fit(data_scaled)# 获取每个主成分的贡献率
explained_variance_ratio = pca.explained_variance_ratio_# 输出贡献率
for i, ratio in enumerate(explained_variance_ratio):print(f"主成分 {i + 1} 的贡献率: {ratio:.4f}")# 输出总贡献率
cumulative_variance = np.cumsum(explained_variance_ratio)
print(f"总贡献率: {sum(explained_variance_ratio):.2f}")
输出结果