【问题标题】:Convert all nominal variables to categorical variables in pyspark将所有名义变量转换为pyspark中的分类变量
【发布时间】:2018-03-21 11:01:16
【问题描述】:

我只是想将我的 PySpark 数据帧中的所有 String 类型变量转换为分类变量,以便我可以在数据帧上运行决策树。由于资源限制,我不能使用 pandas,只能使用 PySpark 库。我已将VectorIndexer 确定为一种可能的解决方案,但是,我不明白如何转换documentation 所说的所有String 类型的列是可能的。

有人可以帮助我了解如何执行此操作的语法吗?我追求的是这样的:

featureIndexer = VectorIndexer(inputCol=<list of input columns>, outputCol=<list of output columns>, maxCategories=10).fit(df)

或让VectorIndexer 自行确定哪些需要引导,文档似乎表明它可以做到。

featureIndexer = VectorIndexer(df, maxCategories=10).fit(df)

提前致谢。

【问题讨论】:

    标签: python apache-spark pyspark apache-spark-mllib pyspark-sql


    【解决方案1】:

    VectorIndexer 将向量类型的列作为输入,但是,听起来您有一个包含字符串的列。在这种情况下,我建议使用StringIndexerOneHotEncoder

    StringIndexer 会将标签字符串列转换为标签索引列(双精度)。然后OneHotEncoder 会将此列转换为代表每个类别的多列,以用作类别特征。

    之后,所有这些特征都可以用VectorAssembler 组合成一个向量。我建议使用管道将所有阶段与分类器放在一起。

    Here 是不同可用功能转换的文档以及它们如何工作的示例。

    【讨论】:

    • 感谢您的快速回复,我有点想我也搞砸了。您能否建议我如何转换所有列?我尝试将列名作为列表传递给 inputCol 参数,但这导致了错误。原因是我有大约 50 个奇怪的字符串列需要转换并且不想手动完成所有操作。非常感谢!
    • @words_of_wisdom 你可以看一下this 使用管道一次转换多列的答案。
    猜你喜欢
    • 1970-01-01
    • 2021-01-01
    • 2018-05-18
    • 2019-11-24
    • 2011-05-26
    • 1970-01-01
    • 2011-10-31
    • 2019-02-08
    • 2019-11-15
    相关资源
    最近更新 更多