1. 关于主成分分析基础内容、库的参数设置等等、请参考以下文章
https://blog.csdn.net/qq7835144/article/details/103436685
https://zhuanlan.zhihu.com/p/443232256
2. 最简单的pca降维使用
# 假设 X 是你的 100条512 维数据
# 请替代为实际的数据,确保 X 的形状为 (样本数量, 特征维度)
X = numpy.random.rand(100, 512) # 替代为实际的数据
# 创建 PCA 模型,选择降维到的维度(这里选择 60 维)
pca = PCA(n_components=60)
# 拟合数据并进行降维
pca.fit(X)
X_pca = pca.transform(X)
# 或者合并使用 X_pca = pca.fit_transform(X)
注:这里的 n_components,设置为浮点数时,含义是主成分的方差和所占的最小比例阈值;为整数时代表降低到多少维度
3. 首次降维处理后保存降维模型,重新加载后继续降维
# 保存 PCA 模型到文件
# 这里的 pca 是由语句 pca = PCA(n_components = 0.95) 得来
joblib.dump(pca, 'pca_model.joblib')
# 加载 PCA 模型
loaded_pca_model = joblib.load('pca_model.joblib')
4. 根据 累积方差解释率 的阈值设定,来主动选取降维大小
pca = PCA()
pca.fit(X)
# 获取方差解释率: 获取每个主成分的方差解释率,以及累积方差解释率。
explained_variance_ratio = pca.explained_variance_ratio_
cumulative_variance_ratio = explained_variance_ratio.cumsum()
# 选择降维大小: 根据累积方差解释率选择降维的大小。
desired_variance_ratio = 0.92 # 选择一个阈值
selected_components = len(cumulative_variance_ratio[cumulative_variance_ratio < desired_variance_ratio]) + 1
# 使用选择的主成分数量进行降维
pca_selected = PCA(n_components=selected_components)
X_pca = pca_selected.fit_transform(X)
注:这条语句selected_components = len(cumulative_variance_ratio[cumulative_variance_ratio < desired_variance_ratio]) + 1含义:
cumulative_variance_ratio < desired_variance_ratio
:这部分创建了一个布尔数组,其中的元素是累积方差解释率是否小于设定的desired_variance_ratio
阈值。这个阈值通常是一个预先定义的百分比,比如0.95,表示我们希望保留至少95%的方差。
cumulative_variance_ratio[cumulative_variance_ratio < desired_variance_ratio]
:通过使用布尔数组来索引,我们得到了满足条件的那些累积方差解释率。
len(cumulative_variance_ratio[cumulative_variance_ratio < desired_variance_ratio])
:这部分计算满足条件的累积方差解释率的数量,也就是所选的主成分数量。
+ 1
:由于数组的索引从0开始,我们需要加1来得到实际的主成分数量。总体来说,这一行代码的作用是计算保留累积方差解释率达到
desired_variance_ratio
的主成分数量。举例:
- 假设
cumulative_variance_ratio
是[0.2, 0.5, 0.7, 0.95]
,而desired_variance_ratio
是0.8
,那么cumulative_variance_ratio < desired_variance_ratio
的结果将是[True, True, False, False]
。- 接着,
cumulative_variance_ratio[cumulative_variance_ratio < desired_variance_ratio]
这一部分使用布尔数组来索引cumulative_variance_ratio
数组,只选择那些满足条件的累积方差解释率。在我们的例子中,结果将是[0.2, 0.5]
。- 最后,
len(cumulative_variance_ratio[cumulative_variance_ratio < desired_variance_ratio])
计算了这个选择的主成分数量,即数组的长度,也就是满足条件的累积方差解释率的个数。在我们的例子中,长度是2
。- 然后
+ 1
是因为 Python 的索引是从 0 开始的,所以我们需要加 1 才能得到主成分的数量。这样就得到了selected_components
,即所选的主成分数量3。