使用列转换器的 MinMax Scaler转换后的列向前移动

问题描述

我正在尝试建立一个关于房价的模型 - 高级回归技术数据集 (1460,80)。它有 37 个数值特征和 43 个分类特征。

我想先缩放数值特征。 One_hot_encode 分类特征。 我正在使用 MinMax 缩放器和列转换器。

缩放数据后,DataFrame 不保留列名

这是我的代码

columns_transform_sc=make_column_transformer((MinMaxScaler(),['MSSubClass','LotFrontage','LotArea','OverallQual','OverallCond','YearBuilt','YearRemodAdd','MasVnrArea','BsmtFinSF1','BsmtFinSF2','BsmtUnfSF','TotalBsmtSF','1stFlrsF','2ndFlrsF','LowQualFinSF','GrLivArea','BsmtFullBath','BsmtHalfBath','FullBath','HalfBath','bedroomAbvGr','KitchenAbvGr','TotRmsAbvGrd','Fireplaces','GarageYrBlt','GarageCars','GarageArea','WoodDeckSF','OpenPorchSF','EnclosedPorch','3SsnPorch','ScreenPorch','PoolArea','MiscVal','MoSold','YrSold']),remainder="passthrough")

sc_df=columns_transform_sc.fit_transform(x_train)

我将原始数据帧的(x_train)列用于缩放数据帧(sc_df)。

sc_df=pd.DataFrame(sc_df,index=x_train.index,columns=x_train.columns)

我面临的问题是列转换器将它转换的所有列移到前面并将直通列移回,并且我无法使用 x_train.columns 替换 sc_df.columns

enter image description here

enter image description here

所有类别功能都已移回。有没有办法保留获取列名的列名

还有 我应该先编码分类特征(one_hot_encode 或 label_encode),然后缩放(标准化或标准化)整个事物(编码数据也是如此)还是缩放然后编码

解决方法

我建议先执行某种编码,然后缩放所有值。这不仅可以帮助您保留列,而且这些编码值将在相同比例下缩放。

,

我认为您可以 - 有时必须先进行缩放。我建议试试这个:

qt = QuantileTransformer(n_quantiles=50,output_distribution='normal',random_state=0)
df.Betrag = qt.fit_transform(df.Betrag.values.reshape(-1,1))

注意:您可以使用已知的标准语法将一列直接替换为一段列,用于选择 Pandas DataFrame 列的子集:

age_sex = titanic[["Age","Sex"]]

在这种情况下,如果我们假设这些列是确定的列,您可以将 age_sex 传递给 fit 和 transform 函数。更重要的是,您不仅限于 QuantileTransformer。代码应该适用于所有 Transformer。

编辑: 抱歉,简短的旁注:如果您将一个只有一个特定特征的张量传递给 QuantileTransformer,则重塑操作是必要的。在多特征张量和另一个转换器的情况下,应该是必要的。