【问题标题】:How to implement inverse transformation in a pipeline of a ColumnTransformer?如何在 ColumnTransformer 的管道中实现逆变换?
【发布时间】:2021-02-09 02:05:39
【问题描述】:

我想了解如何在管道中应用逆变换,而不是直接使用StandardScaler 函数。

我使用的代码如下:

import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder, StandardScaler

categoric = X.select_dtypes(['object']).columns
numeric =   X.select_dtypes(['int']).columns

tf = ColumnTransformer([('onehot', OneHotEncoder(), categoric),
                        ('scaler', StandardScaler(), numeric)])

X_preprocessed = tf.fit_transform(X)

model = KMeans(n_clusters=2, random_state=24)
model.fit(X_preprocessed)

在获得给定模型的输出(在本例中为 KMeans)后,我如何才能取回任何 X 数据帧的 numeric 值的原始比例?

我知道 StandardScaler 有一种方法 (.inverse_transformation) 可以做到这一点,但我的问题是在使用带有 ColumnTransformer 的管道时出现的。

P.S.:这样做的目的是解释模型的质心。

【问题讨论】:

  • 是否可以在原始管道中添加一个额外的空步骤以便能够使用 inverse_transform?

标签: python scikit-learn pipeline


【解决方案1】:

您可能已经找到了解决方案,但我遇到了类似的问题。我正在使用熊猫,并希望 ColumnTransformer 再次返回一个数据框。我通过将列名按顺序放回列变换器中使用的顺序来做到这一点,但我想确保它是正确的,所以我想反转转换并检查它是否返回原始数据帧,因此没有错误标记任何列。

有两种方法可以访问 tf 中的子转换器:

tf.transformers_[1][1] # second transformer, 2nd item being the actual class
tf.named_transformers_['scaler']

然后,您可以为该特定子变压器调用 inverse_transform。这只使您能够使用其中一个转换器进行逆运算,因此您必须通过再次将两者的结果附加到 1 帧中来重建数据集。

【讨论】:

    猜你喜欢
    • 2019-06-15
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 2021-12-13
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    相关资源
    最近更新 更多