将所有名义变量转换为 pyspark 中的分类变量

Convert all nominal variables to categorical variables in pyspark

我正在寻找一种方法将我的 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)

提前致谢。

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

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

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

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