多个数据帧并尝试在它们上使用 PCA

问题描述 投票:0回答:1

我有三个数据帧(不同的变量),我试图在 python 中运行 PCA。它们的尺寸是:

df1 = 17行×60212列(17是模型名称,60212是数据)

df2 = 17 行 × 60077 列

df3 = 17 行 × 61513 列

我最大的问题是,当尝试连接数据点时,数据点不对齐,因此 NaN 会出现在单元格中,当我删除它们时,所有数据都会消失。没有重叠点。所以我想知道是否应该对数据帧进行单独的 PCA。然后从那里开始。

python dataframe pca
1个回答
0
投票

选项 1:执行单独的 PCA

您可以使用 sklearn StandardScaler 和 PCA 来实现此目的:

from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

您需要对它们进行标准化,使它们具有相同的权重并单独计算 PCA:

def perform_pca(df, n_components):
    scaler = StandardScaler()
    standardized_data = scaler.fit_transform(df)
    pca = PCA(n_components=n_components)
    principal_components = pca.fit_transform(standardized_data)
    return principal_components, pca.explained_variance_ratio_

pcs_df1, var_ratio_df1 = perform_pca(df1, n_components=5)
pcs_df2, var_ratio_df2 = perform_pca(df2, n_components=5)
pcs_df3, var_ratio_df3 = perform_pca(df3, n_components=5)

然后与numpy结合:

combined_pcs = np.hstack([pcs_df1, pcs_df2, pcs_df3])

第二个选项是估算缺失 (NaN) 值:

如果缺失值应该带有有意义的上下文,您可以使用均值插补、KNN 插补或其他类似矩阵分解等方法来插补它们......

然后对它们应用PCA:

与熊猫结合:

combined_df = pd.concat([df1, df2, df3], axis=1)

估算值示例:

from sklearn.impute import SimpleImputer

imputer = SimpleImputer(strategy='mean')
combined_df_imputed = imputer.fit_transform(combined_df)

对其运行 PCA:

pca = PCA(n_components=10)
principal_components = pca.fit_transform(combined_df_imputed)
© www.soinside.com 2019 - 2024. All rights reserved.