You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么PCA置换检验中所有置换数据的解释方差完全一致

问题原因
  • 核心错误是置换逻辑不符合要求:你当前的data.sample(frac=1)是整行打乱样本顺序,所有特征的取值对应关系没有发生任何变化,数据集的协方差矩阵和原数据完全相同,而PCA的解释方差完全由协方差矩阵的特征值决定,所以所有置换后的结果和原数据完全一致。
  • 额外错误:reset_index()操作会新增一列原行索引数据,不属于原始特征,会对PCA计算造成不必要的干扰。
  • 实验要求的是按列独立置换:即每一列特征单独打乱取值顺序,彻底破坏特征之间的相关性,才能得到随机数据集的解释方差基线。
修正代码
import pandas as pd
import numpy as np
from sklearn import datasets
from sklearn.decomposition import PCA

def exp_var_perm_data(data, n_permutations=1):
    """
        data: Assumed to be a pandas dataframe, object that has a .shape attribute
        n_permutations: Integer. Number of permutations to perform
    """
    df = pd.DataFrame(columns=["Dim%d" % i for i in range(0, data.shape[1])])
    for k in range(0,n_permutations):
        pca_permuted = PCA()
        # 按列独立置换:每列单独打乱顺序
        data_permuted = data.apply(np.random.permutation, axis=0)
        pca_permuted.fit(data_permuted)
        df.loc[k] = pca_permuted.explained_variance_ratio_
    return df

# 测试代码
iris_data = datasets.load_iris()
iris_data = iris_data.data

exp_var_perm = exp_var_perm_data(pd.DataFrame(iris_data), 10)
print(exp_var_perm)

修正后运行会得到每次置换都不同的解释方差结果,第一主成分的解释方差会远低于原数据的0.879,符合实验预期。

内容的提问来源于stack exchange,提问作者lrthistlethwaite

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:27:04