【问题标题】:PySpark: combining output of two VectorAssemblersPySpark:组合两个 VectorAssembler 的输出
【发布时间】:2021-08-17 13:28:00
【问题描述】:

使用 pyspark,我创建了两个 VectorAssembler,第一个具有多个数字列('colA'、'colB'、'colC'),第二个具有多个分类列('colD'、'colE'、I在每一列上应用了 OneHotEncoder)。

我可以单独创建这些 VectorAssembler。如何将输出组合成单个向量列(以便将其输入 Xgboost 模型)?

我尝试了以下方法,但得到“TypeError: can only concatenate str (not "list") to str”

# my dataframe with all columns is df

# VectorAssembler 1: with 3 numeric columns 
numeric_cols = ['colA', 'colB', 'colC']
assembler = VectorAssembler(
    inputCols= numeric_cols,
    outputCol="numericFeatures"
)


# VectorAssembler 2: with 2 categorical columns
categ_cols = ['colD', 'colE']
indexers = [
    StringIndexer(inputCol=c, outputCol="{0}_indexed".format(c))
    for c in categ_cols
]
encoders = [
    OneHotEncoder(
        inputCol=indexer.getOutputCol(),
        outputCol="{0}_encoded".format(indexer.getOutputCol())) 
    for indexer in indexers
]
assemblerCateg = VectorAssembler(
    inputCols = [encoder.getOutputCol() for encoder in encoders],
    outputCol = "categFeatures"
)


pipeline = Pipeline(stages = [assembler] + indexers + encoders + [assemblerCateg])
df2 = pipeline.fit(df).transform(df)

【问题讨论】:

    标签: python pyspark pipeline apache-spark-ml


    【解决方案1】:

    解决了!只需在管道之前使用另一个 VectorAssembler(最后):

    assemblerAll = VectorAssembler(inputCols= ["numericFeatures", "categFeatures"], outputCol="allFeatures")
    pipeline = Pipeline(stages = [assembler] + indexers + encoders + [assemblerCateg] + [assemblerAll])
    

    【讨论】:

      猜你喜欢
      • 2016-06-21
      • 1970-01-01
      • 2018-08-31
      • 1970-01-01
      • 2017-03-23
      • 1970-01-01
      • 2013-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多