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重新调整它的用途