具有Scikit-Learn的连续变量和分类变量(整数类型)的特征预处理



主要目标如下:

  1. StandardScaler应用于连续变量

  2. LabelEncoderOnehotEncoder应用于分类变量

需要缩放连续变量,但同时,几个分类变量也是整数类型的。应用StandardScaler会导致不希望的效果。

另一侧,StandardScaler将扩展基于整数的分类变量,这也不是我们想要的。

由于连续变量和分类变量混合在单个Pandas数据框中,因此建议解决此类问题的建议工作流程是什么?

最好说明我的意思的最好示例是Kaggle自行车共享需求数据集,其中seasonweather是整数分类变量

查看 sklearn_pandas.DataFrameMapper meta-transformer。将其用作管道中的第一步,以执行列的数据工程操作:

mapper = DataFrameMapper(
  [(continuous_col, StandardScaler()) for continuous_col in continuous_cols] +
  [(categorical_col, LabelBinarizer()) for categorical_col in categorical_cols]
)
pipeline = Pipeline(
  [("mapper", mapper),
  ("estimator", estimator)]
)
pipeline.fit_transform(df, df["y"])

另外,您应该使用sklearn.preprocessing.LabelBinarizer而不是[LabelEncoder(), OneHotEncoder()]的列表。

在scikit-learn中查看columntransformer

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler,LabelBinarizer
numeric_columns=list(X.select_dtypes('float64').columns)
categorical_columns=list(X.select_dtypes('int64').columns)
pipeline=ColumnTransformer([
    ('num',StandardScaler(),numeric_columns),
    ('cat',LabelBinarizer(),categorical_columns),
])
new_X=pipeline.fit_transform(X)

相关内容

  • 没有找到相关文章

最新更新