使用scikit-learn对连续变量和分类变量(整数类型)进行预处理

Jam*_*ong 9 python machine-learning pandas scikit-learn categorical-data

主要目标如下:

1)适用StandardScaler于连续变量

2)应用LabelEncoderOnehotEncoder分类变量

连续变量需要缩放,但同时,一些分类变量也是整数类型.应用StandardScaler会导致不良影响.

另一方面,StandardScaler将扩展基于整数的分类变量,这也不是我们的.

由于连续变量和分类变量混合在一个PandasDataFrame中,所以推荐的工作流程是什么来解决这类问题?

说明我的观点的最好例子是Kaggle Bike Sharing Demand数据集,其中seasonweather是整数分类变量

use*_*924 11

查看sklearn_pandas.DataFrameMapper元变压器.使用它作为管道中执行逐列数据工程操作的第一步:

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"])
Run Code Online (Sandbox Code Playgroud)

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

  • `sklearn_pandas.DataFrameMapper` 非常棒,绝对值得一看。谢谢你让我知道。但根据文档,“LabelBinarizer”应该用在目标变量具有多个值的情况下,而不是多个变量每个都有一组不同的值,对吧?不知道我是否明白了。 (2认同)