В каком порядке я запускаю StandardScaler для цифр c и категориальных с помощью PySpark Pipeline? - PullRequest
0 голосов
/ 12 марта 2020

Я выполняю логистическую c регрессию по сочетанию категориальных и числовых c функций.

Я хочу создать конвейер, который выполняет некоторые преобразования, но также включает StandardScaler в числовые столбцы c, но не категориальные столбцы.

Вот как выглядит мой конвейер:

# 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 только для столбцов с цифрами c? Нужно ли менять порядок векторного ассемблера.

Если мне нужно изменить ассемблер, делать ассемблер только после того, как я масштабирую числовые столбцы c. И сохранить новые столбцы с новым суффиксом столбца?

Этот ответ , кажется, указывает, что это правильный путь для малыша go для scikit-learn, но я не знаю, как сделай это для ML Pyspark.

...