如何在ColumnTransformer的管道中实现逆变换?

Jai*_*era 8 python pipeline scikit-learn

我想了解如何在管道中应用逆变换,而不是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)
Run Code Online (Sandbox Code Playgroud)

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

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

PS:这样做的目的是解释模型的质心。

小智 2

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

有两种方法可以访问 tf 中的子变压器:

tf.transformers_[1][1] # second transformer, 2nd item being the actual class
tf.named_transformers_['scaler']
Run Code Online (Sandbox Code Playgroud)

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