如何使用 StandardScaler 逆向非标准化 PCA 重建?

How to un-standardize PCA reconstructions using StandardScaler inverse?

我正在尝试 运行 使用 sklearn 对海洋温度数据进行 PCA 分析。首先,我使用 StandardScaler 来标准化数据,然后我 运行 PCA 并创建重建。在那之前我可以让代码正常工作。但是,我无法弄清楚如何将 StandardScaler 的逆应用回 PCA 重建,以便它们回到原始 space 并且我可以将重建与原始非标准化数据进行比较。我复制了下面使用的代码的一小段摘录,以及下面收到的错误。 None 我在网上找到的潜在修复方法确实有效。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

data = array[:,[1,4]] # data has dimensions [88 (depths) x 26 (instances)]
        
# pre processing the data
scal = StandardScaler()   
data_t = scal.fit_transform(data)
    
  
# pca analysis
pca = PCA(n_components=2)
principalComponents_2 = pca.fit_transform(np.transpose(data_t))  #find the loadings.
PCAFit_2 = scal.inverse_transform(pca.inverse_transform(principalComponents_2)) #reconstruct the data and then apply the standardscaler inverse tranformation.

错误:

ValueError: operands could not be broadcast together with shapes (26,88) (26,) (26,88) 

IIUC:

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

X, _ = load_iris(return_X_y=True)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

pca = PCA(2)
X_pca = pca.fit_transform(X_scaled)

X_orig = np.dot(X_pca, pca.components_)
X_orig_backscaled = scaler.inverse_transform(X_orig)

print("                    Original:", X[0])
print("                      Scaled:", X_scaled[0])
print("                   PCA space:", X_pca[0])
print("           Original from PCA:", X_orig[0])
print("Original from PCA backscaled:", X_orig_backscaled[0])

                    Original: [5.1 3.5 1.4 0.2]
                      Scaled: [-0.90068117  1.01900435 -1.34022653 -1.3154443 ]
                   PCA space: [-2.26470281  0.4800266 ]
           Original from PCA: [-0.99888895  1.05319838 -1.30270654 -1.24709825]
Original from PCA backscaled: [5.01894899 3.51485426 1.46601281 0.25192199]