【问题标题】:Calculating Principal Components from new data in Python在 Python 中从新数据计算主成分
【发布时间】:2018-09-08 10:01:56
【问题描述】:

我正在使用以下代码对虹膜数据进行主成分分析:

from sklearn import datasets
iris = datasets.load_iris() 
dat = pd.DataFrame(data=iris.data, columns=['sl', 'sw', 'pl', 'pw'])

from sklearn.preprocessing import scale
stddat = scale(dat)

from sklearn.decomposition import PCA
pca = PCA(n_components=2)
pc_out = pca.fit_transform(stddat)
pcdf = pd.DataFrame(data = pc_out , columns = ['PC-1', 'PC-2'])
print(pcdf.head())

输出:

       PC-1      PC-2
0 -2.264542  0.505704
1 -2.086426 -0.655405
2 -2.367950 -0.318477
3 -2.304197 -0.575368
4 -2.388777  0.674767

现在我想确定 PC-1 的一组新值“sl”、“sw”、“pl”和“pw”,例如:4.8、3.1、1.3、0.2。我怎样才能做到这一点?我找不到使用 sklearn 库的任何方法。

编辑:如 cmets 中所述,我可以使用命令 pca.transform(new_data) 获取新数据的 PC 值。但是,我对获取变量 loadings 很感兴趣,这样我就可以在以后使用这些数字从任何地方确定 PC 值,而不仅仅是在当前环境中。

loadings 我的意思是“每个标准化原始变量应该乘以得到分量分数的权重”(来自https://en.wikipedia.org/wiki/Principal_component_analysis)。我在文档页面上找不到执行此操作的方法:http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html

【问题讨论】:

  • pc_out = pca.transform(new_data) 不能用于新数据吗?
  • 除了上述评论之外,您还可以使用基于类的缩放器来复制新数据的缩放(同样是 transform)。
  • 我可以在这里从 pca 获取可变载荷值吗?我检查了此页面上的方法但找不到它:scikit-learn.org/stable/modules/generated/…

标签: python scikit-learn pca


【解决方案1】:

这是transform 可用的函数here

    def transform(self, X):
        """Apply dimensionality reduction to X.
        X is projected on the first principal components previously extracted
        from a training set.
        Parameters
        ----------
        X : array-like, shape (n_samples, n_features)
            New data, where n_samples is the number of samples
            and n_features is the number of features.
        Returns
        -------
        X_new : array-like, shape (n_samples, n_components)
        Examples
        --------
        >>> import numpy as np
        >>> from sklearn.decomposition import IncrementalPCA
        >>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
        >>> ipca = IncrementalPCA(n_components=2, batch_size=3)
        >>> ipca.fit(X)
        IncrementalPCA(batch_size=3, copy=True, n_components=2, whiten=False)
        >>> ipca.transform(X) # doctest: +SKIP
        """
        check_is_fitted(self, ['mean_', 'components_'], all_or_any=all)

        X = check_array(X)
        if self.mean_ is not None:
            X = X - self.mean_
        X_transformed = np.dot(X, self.components_.T)
        if self.whiten:
            X_transformed /= np.sqrt(self.explained_variance_)
        return X_transformed

变量加载是您从pca.components_ 获得的组件。确保您的 mean_0 并且 whitenFalse,然后您可以简单地获取该矩阵并在任何您想要转换矩阵/向量的地方使用它。

【讨论】:

  • pca.components_ 是我想要的。谢谢。
猜你喜欢
  • 1970-01-01
  • 2015-07-03
  • 1970-01-01
  • 2013-03-28
  • 1970-01-01
  • 1970-01-01
  • 2014-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多