使用 columntransformer 的 MinMaxScaler(转换后的列向前移动)
MinMax Scaler using column transformer ( the transformed columns are shifted front)
我正在尝试建立房价模型 - 高级回归技术数据集 (1460, 80)。它有 37 个数值特征和 43 个分类特征。
那我想先缩放数值特征。 One_hot_encode 分类特征。
我正在使用 MinMax 缩放器和 Column 转换器。
缩放数据后,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
所有类别功能都已移回。有没有办法保留获取列名的列名
还有
我应该先编码分类特征(one_hot_encode 或 label_encode),然后缩放(标准化或规范化)整个事物(编码数据)还是缩放然后编码
我建议先执行某种编码然后缩放所有 values.This 不仅可以帮助您保留列,而且这些编码值将在相同的比例下缩放。
我认为您可以 - 有时必须先进行缩放。我建议试试这个:
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 传递给拟合和转换函数。更重要的是,您不仅限于 QuantileTransformer。该代码应该适用于所有变形金刚。
编辑: 抱歉,快速旁注:如果您将仅具有一个特定特征的张量传递给 QuantileTransformer,则重塑操作是必需的。在多特征张量和另一个transformer的情况下,应该是有必要的。
我正在尝试建立房价模型 - 高级回归技术数据集 (1460, 80)。它有 37 个数值特征和 43 个分类特征。
那我想先缩放数值特征。 One_hot_encode 分类特征。 我正在使用 MinMax 缩放器和 Column 转换器。
缩放数据后,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
所有类别功能都已移回。有没有办法保留获取列名的列名
还有 我应该先编码分类特征(one_hot_encode 或 label_encode),然后缩放(标准化或规范化)整个事物(编码数据)还是缩放然后编码
我建议先执行某种编码然后缩放所有 values.This 不仅可以帮助您保留列,而且这些编码值将在相同的比例下缩放。
我认为您可以 - 有时必须先进行缩放。我建议试试这个:
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 传递给拟合和转换函数。更重要的是,您不仅限于 QuantileTransformer。该代码应该适用于所有变形金刚。
编辑: 抱歉,快速旁注:如果您将仅具有一个特定特征的张量传递给 QuantileTransformer,则重塑操作是必需的。在多特征张量和另一个transformer的情况下,应该是有必要的。