gpt4 book ai didi

python - scikit-learn 中的 PCA 投影和重建

转载 作者:太空狗 更新时间:2023-10-29 17:25:46 24 4
gpt4 key购买 nike

我可以通过以下代码在 scikit 中执行 PCA:X_train 有 279180 行和 104 列。

from sklearn.decomposition import PCA
pca = PCA(n_components=30)
X_train_pca = pca.fit_transform(X_train)

现在,当我想将特征向量投影到特征空间时,我必须执行以下操作:

""" Projection """
comp = pca.components_ #30x104
com_tr = np.transpose(pca.components_) #104x30
proj = np.dot(X_train,com_tr) #279180x104 * 104x30 = 297180x30

但我对这一步犹豫不决,因为 Scikit documentation说:

components_: array, [n_components, n_features]

Principal axes in feature space, representing the directions of maximum variance in the data.

在我看来,它已经被投影了,但是当我检查源代码时,它只返回特征向量。

怎样才是正确的投影方式呢?

最终,我的目标是计算重建的 MSE。

""" Reconstruct """
recon = np.dot(proj,comp) #297180x30 * 30x104 = 279180x104

""" MSE Error """
print "MSE = %.6G" %(np.mean((X_train - recon)**2))

最佳答案

你可以做到

proj = pca.inverse_transform(X_train_pca)

这样您就不必担心如何进行乘法。

您在 pca.fit_transformpca.transform 之后获得的通常称为每个样本的“加载”,这意味着您需要每个组件的多少使用 components_(特征空间中的主轴)的线性组合最好地描述它。

您瞄准的投影回到了原始信号空间。这意味着您需要使用组件和负载返回到信号空间。

所以这里分三步来消歧。在这里,您可以逐步了解使用 PCA 对象可以做什么以及它的实际计算方式:

  1. pca.fit 估计组件(在中心 Xtrain 上使用 SVD):

     from sklearn.decomposition import PCA
    import numpy as np
    from numpy.testing import assert_array_almost_equal

    #Should this variable be X_train instead of Xtrain?
    X_train = np.random.randn(100, 50)

    pca = PCA(n_components=30)
    pca.fit(X_train)

    U, S, VT = np.linalg.svd(X_train - X_train.mean(0))

    assert_array_almost_equal(VT[:30], pca.components_)
  2. pca.transform 按照您的描述计算负载

     X_train_pca = pca.transform(X_train)

    X_train_pca2 = (X_train - pca.mean_).dot(pca.components_.T)

    assert_array_almost_equal(X_train_pca, X_train_pca2)
  3. pca.inverse_transform 获取您感兴趣的信号空间中分量的投影

     X_projected = pca.inverse_transform(X_train_pca)
    X_projected2 = X_train_pca.dot(pca.components_) + pca.mean_

    assert_array_almost_equal(X_projected, X_projected2)

您现在可以评估投影损失

loss = np.sum((X_train - X_projected) ** 2, axis=1).mean()

关于python - scikit-learn 中的 PCA 投影和重建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36566844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com