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

Python 使用PySpark管道在数字和分类上运行StandardScaler的顺序是什么?,python,pyspark,apache-spark-sql,Python,Pyspark,Apache Spark Sql,我正在对分类和数字特征进行逻辑回归 我想创建一个管道,它进行一些转换,但在数字列上也包括一个StandardScaler,而不是分类列 以下是我的管道当前的外观: # Categorical Features (which are all strings) stringindexers = [StringIndexer( inputCol=column, outputCol=colu

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

我想创建一个管道,它进行一些转换,但在数字列上也包括一个
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。并使用新列后缀保存新列


这似乎表明这是scikit学习的正确方法,但我不知道如何对ML Pyspark进行学习。

找到解决方案了吗?将分类变量转换为一个热编码变量。因此,如果您有5个
feature\u col\u X
值,那么您将得到
feature\u col\u X\u val\u 1、feature\u colu X\u val\u 2。。。特征颜色X值4
。这些COL的值将为1或0。因此,您可以简单地运行标准scaler,它不会有任何区别。我想。也就是说,您可以对整个管道运行标准scaler(因此它位于列表的末尾)@Shubh-Other-was将在列表的前面运行标准scaler。因此,在数值上运行标准的scaler,然后添加您的分类,并使用向量汇编函数将它们组合到一个向量列中,在该向量列上训练您的模型,因此将是
[数值向量汇编程序、标准向量汇编程序、stringindexer、onehotencoder、vetorassembler]
。我再次认为,对我来说,最终,我只是把一切都变成了数字。不推荐这里的答案很好,如果你能像我提到的那样将其重新用于pyspark,你找到解决方案了吗?将你的分类变量转换成一个热编码的。因此,如果您有5个
feature\u col\u X
值,那么您将得到
feature\u col\u X\u val\u 1、feature\u colu X\u val\u 2。。。特征颜色X值4
。这些COL的值将为1或0。因此,您可以简单地运行标准scaler,它不会有任何区别。我想。也就是说,您可以对整个管道运行标准scaler(因此它位于列表的末尾)@Shubh-Other-was将在列表的前面运行标准scaler。因此,在数值上运行标准的scaler,然后添加您的分类,并使用向量汇编函数将它们组合到一个向量列中,在该向量列上训练您的模型,因此将是
[数值向量汇编程序、标准向量汇编程序、stringindexer、onehotencoder、vetorassembler]
。我再次认为,对我来说,最终,我只是把一切都变成了数字。不推荐这里的答案是好的,如果你能像我提到的那样为pyspark重新调整它的用途