【发布时间】:2014-07-30 05:59:40
【问题描述】:
我有一组要建模的特征,其中一个实际上是在 100 个不同点采样的直方图。因此,这个直方图特征实际上是 100 个不同的特征。我想通过对直方图特征执行 PCA 来减少建模问题的维度,但是我不想在 PCA 中包含其他特征以保持模型的可解释性。
理想情况下,我想与 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)
【问题讨论】:
标签: python scikit-learn