使用PySpark管道在数字和分类上运行StandardScaler的顺序是什么?

2024-09-30 00:34:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在对分类和数字特征进行逻辑回归

我想创建一个管道,它进行一些转换,但也包括数值列上的StandardScaler,但不包括分类列

以下是我的管道当前的外观:

# Categorical Features (which are all strings)
stringindexers = [StringIndexer(
                            inputCol=column, 
                            outputCol=column+"_Index") for column in categorical_columns]
onehotencoder_categorical = OneHotEncoderEstimator(
    inputCols = [column + "_Index" for column in categorical_columns],
    outputCols = [column + "_Vec" for column in categorical_columns])

categorical_columns_class_vector = [col + "_Vec" for col in categorical_columns]
categorical_numerical_inputs = categorical_columns_class_vector + numerical_columns

# Assembler for all columns
assembler = VectorAssembler(inputCols = categorical_numerical_inputs, 
                            outputCol="features")

pipeline = Pipeline(
    stages=[*stringindexers,
            onehotencoder_categorical,
            assembler,
            StandardScaler(
                withStd=True,
                withMean=False,
                inputCol="features",
                outputCol="scaledFeatures")
           ]
            )
pipeline.fit(df_pivot_sample).transform(df_pivot_sample).limit(2).toPandas()

但是,这会将标准缩放器应用于所有列,包括那些已从分类特征转换而来的列

如何构造上述管道,以便仅对数值列执行StandardScaler?我需要更改向量汇编程序的顺序吗

我是否应该更改汇编程序,使其仅在缩放数字列后执行assmebler。并使用新列后缀保存新列

这个answer似乎表明这是scikit学习的正确方式,但我不知道如何为ML Pyspark学习


Tags: columnsinfor管道分类columnnumerical数字

热门问题