我有三个数据帧(不同的变量),我试图在 python 中运行 PCA。它们的尺寸是:
df1 = 17行×60212列(17是模型名称,60212是数据)
df2 = 17 行 × 60077 列
df3 = 17 行 × 61513 列
我最大的问题是,当尝试连接数据点时,数据点不对齐,因此 NaN 会出现在单元格中,当我删除它们时,所有数据都会消失。没有重叠点。所以我想知道是否应该对数据帧进行单独的 PCA。然后从那里开始。
选项 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)