我有一组特征需要建模,其中一个特征是在100个不同点采样的直方图。因此,这个直方图特征实际上是100个不同的特征。我想通过对直方图特征执行PCA来减少建模问题的维度,但我不想在PCA中包括其他特征,以便保持我的模型的可解释性。
理想情况下,我想使用PCA形成一个管道来转换直方图特征和SVC来执行拟合,然后将其馈送到GridSearchCV以确定SVC超参数。在这种设置中,是否可以使PCA仅转换我的某些特征(即直方图箱)?最简单的方法是编辑PCA对象以接受特征掩码,但我肯定更喜欢使用现有功能。
编辑:
在实施@eickenberg的答案后,我意识到我还想要一个新PCA类的inverse_transform方法。该方法使用原始顺序中的列重新创建初始特征集。以下是提供给其他人参考的方法:
理想情况下,我想使用PCA形成一个管道来转换直方图特征和SVC来执行拟合,然后将其馈送到GridSearchCV以确定SVC超参数。在这种设置中,是否可以使PCA仅转换我的某些特征(即直方图箱)?最简单的方法是编辑PCA对象以接受特征掩码,但我肯定更喜欢使用现有功能。
编辑:
在实施@eickenberg的答案后,我意识到我还想要一个新PCA类的inverse_transform方法。该方法使用原始顺序中的列重新创建初始特征集。以下是提供给其他人参考的方法:
def inverse_transform(self, X):
if self.mask is not None:
# Inverse transform appropriate data
inv_mask = np.arange(len(X[0])) >= sum(~self.mask)
inv_transformed = self.pca.inverse_transform(X[:, inv_mask])
# Place inverse transformed columns back in their original order
inv_transformed_reorder = np.zeros([len(X), len(self.mask)])
inv_transformed_reorder[:, self.mask] = inv_transformed
inv_transformed_reorder[:, ~self.mask] = X[:, ~inv_mask]
return inv_transformed_reorder
else:
return self.pca.inverse_transform(X)
FunctionTransformer
吗?为什么不呢! - eickenberg