You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在scikit-learn Pipeline中复用支持inverse_transform的Transformer

解决方案

你可以通过实现一个通用的逆转换包装器来实现需求,不需要修改原有转换器逻辑,也不用重复拟合,同时可以随时获取原transform方法的输出:

from sklearn.pipeline import Pipeline
from sklearn.decomposition import PCA
from sklearn.preprocessing import FunctionTransformer
import numpy as np
import matplotlib.pyplot as plt

# 通用逆转换包装器,接收已拟合的转换器,调用其inverse_transform作为transform逻辑
class InverseTransformer(FunctionTransformer):
    def __init__(self, estimator):
        super().__init__(func=estimator.inverse_transform)

# 初始化PCA转换器,只需要实例化一次
pca = PCA(n_components=3)

# 构建Pipeline
pipe = Pipeline([
    ("pca", pca),
    # 直接传入已拟合的pca实例,复用同一个转换器
    ("pca_inv", InverseTransformer(pca))
])

X = np.random.uniform(0,5,(100,10))+np.arange(10)
# 拟合流水线
reconstructed_X = pipe.fit_transform(X)
# 随时可以获取压缩后的特征
compressed_X = pipe.named_steps['pca'].transform(X)

# 绘图
# 原始数据
plt.plot(X.T)
plt.show()
# 重建后数据
plt.plot(reconstructed_X.T)
plt.show()

方案优势

  • 不需要修改原转换器的实现逻辑,适配所有支持inverse_transform方法的sklearn转换器
  • 同一个转换器实例只拟合一次,没有冗余计算
  • 可以随时通过pipe.named_steps['步骤名']拿到对应转换器,调用其transform方法获取压缩后的输出
  • 代码逻辑清晰,符合sklearn的API设计规范

效果图

  • 原始数据:
    原始数据
  • 转换逆转换后的数据:
    转换逆转换后的数据

内容的提问来源于stack exchange,提问作者Jeanot Zubler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 16:15:06