Я выполняю логистическую 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.