【问题标题】:Implementing sklearn PCA on limited number of variables in a pipeline在管道中有限数量的变量上实施 sklearn PCA
【发布时间】:2021-12-07 09:07:24
【问题描述】:

我正在建立一个机器学习管道来对一些数据进行分类。一个数据源非常适合 PCA,构成了数据集的最后一个 n 维度。我想对这些变量使用 PCA,而不是前面的变量。从通过 stackexchange 搜索来看,这似乎也是一个常见的问题——人们只想将 PCA 应用于数据的一部分。

显然,我可以先进行 PCA,然后连接数据集,然后将其传递到管道,但是 PCA 应该是管道的一部分,否则来自测试样本的信息会渗入训练数据。

我想使用 sklearn 的 PCA 函数(但我也愿意接受建议),但它不需要任何参数来定义要对哪些变量进行 PCA,因此很难将其合并到管道中。

我目前的工作是通过定义一个新的 PCA 来选择所需的功能,如下所示:

class new_PCA(PCA):
    
    @staticmethod
    def reduce(X):
        return X.iloc[:,NUMBER_NONPCA_FEATURES:]

    # Define PCA for limited number of columns
    def _fit(self, X):
        part_X = self.reduce(X)
        PCA._fit(self,part_X)

    def transform(self, X):
        part_X = self.reduce(X)
        pca_part = PCA.transform(self, part_X)
        X_new = np.concatenate([X.iloc[:,:NUMBER_NONPCA_FEATURES],pca_part],axis=1)
        return X_new

    def score_samples(self, X):
        part_X = self.reduce(X)
        PCA.score_samples(self,part_X)

    def inverse_transform(self, X):
        part_X = self.reduce(X)
        PCA.inverse_transform(self,part_X)

所以基本的_fit() 方法和transform() 都被限制在当前变量中。这似乎可行,通过检查源代码,我认为这涵盖了将训练数据 (X) 作为输入的所有方法。

我只是有点担心我可能忽略了一些东西,这可能会在某处产生一些意想不到的后果。这看起来好吗?

【问题讨论】:

    标签: machine-learning pca dimensionality-reduction feature-engineering data-preprocessing


    【解决方案1】:

    您的解决方法不是必需的,因为 sklearn 已经涵盖了此用例。可以通过在pipeline 中包含ColumnTransformer 来实现针对不同功能的不同转换。

    考虑下面的例子:

    pipe = Pipeline(
        [
            ('ct', 
                ColumnTransformer(
                 [("PCA", PCA(), [0, 1, 2]),
                 ("pass", "passthrough", [3, 4, 5])])
            ),
             ('svc', SVC())
        ]
    )
    

    管道的 ColumnTransformer 阶段可以看作是一个连接点,它将进入的列分成子集并将指定的转换器应用于传递的列(这里作为索引传递,但也可以是列名)。
    在示例中,PCA 仅应用于索引为 0、1 和 2 的列,而列 3、4 和 5 被传递到管道的下一个阶段而不进行任何转换。

    【讨论】:

      猜你喜欢
      • 2021-03-02
      • 2021-09-21
      • 2020-12-29
      • 1970-01-01
      • 2018-09-11
      • 1970-01-01
      • 2018-07-18
      • 2020-03-06
      • 2017-08-04
      相关资源
      最近更新 更多