为了对数据进行逆变换,您需要记住用于变换每一列的编码器。一种可行的方法是将
LabelEnprers保存在对象内部的dict中。工作方式:
- 当您调用
fit
每个列的编码器时,已保存并保存 - 当您打电话时,
transform
他们习惯了转换数据 - 当您打电话时,
inverse_transform
他们习惯于进行逆变换
示例代码:
class MultiColumnLabelEnprer: def __init__(self, columns=None): self.columns = columns # array of column names to enpre def fit(self, X, y=None): self.enprers = {} columns = X.columns if self.columns is None else self.columns for col in columns: self.enprers[col] = LabelEnprer().fit(X[col]) return self def transform(self, X): output = X.copy() columns = X.columns if self.columns is None else self.columns for col in columns: output[col] = self.enprers[col].transform(X[col]) return output def fit_transform(self, X, y=None): return self.fit(X,y).transform(X) def inverse_transform(self, X): output = X.copy() columns = X.columns if self.columns is None else self.columns for col in columns: output[col] = self.enprers[col].inverse_transform(X[col]) return output然后可以像这样使用它:
multi = MultiColumnLabelEnprer(columns=['city','size'])df = pd.Dataframe({'city': ['London','Paris','Moscow'], 'size': ['M', 'M', 'L'], 'quantity':[12, 1, 4]})X = multi.fit_transform(df)print(X)# city size quantity# 0 0 1 12# 1 2 1 1# 2 1 0 4inv = multi.inverse_transform(X)print(inv)# city size quantity# 0 London M 12# 1 Paris M 1# 2 Moscow L 4可能有一个单独的实现
fit_transform,将调用
LabelEnprers的相同方法。只要确保在需要逆变换时将编码器摆在附近即可。



