PCA投影和重构在scikit-learn中

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

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

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

""" 投影 """comp = pca.components_ #30x104com_tr = np.transpose(pca.components_) #104x30proj = np.dot(X_train,com_tr) #279180x104 * 104x30 = 297180x30

但我对这一步有些犹豫,因为Scikit的文档中提到:

components_: array, [n_components, n_features]

特征空间中的主轴,表示数据中最大方差的方向。

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

正确的投影方法是什么?

最终,我的目标是计算重构的均方误差(MSE)。

""" 重构 """recon = np.dot(proj,comp) #297180x30 * 30x104 = 279180x104"""  MSE 误差 """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 #这个变量应该是X_train而不是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()

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注