【问题标题】:When to use StringIndexer vs StringIndexer+OneHotEncoder?何时使用 StringIndexer 与 StringIndexer+OneHotEncoder?
【发布时间】:2021-08-31 17:03:37
【问题描述】:

您应该在什么情况下/在什么情况下使用 StringIndexer 与 StringIndexer+OneHotEncoder?

查看 sparkml 的 StringIndexer (https://spark.apache.org/docs/latest/ml-features#stringindexer) 和 OneHotEncoder (https://spark.apache.org/docs/latest/ml-features#onehotencoder) 的文档,我不清楚何时仅使用 StringIndexer 与 StringIndexer+OneHotEncoder(我一直在基准数据集上使用 StringIndexer并获得相当好的结果,但我认为这并不意味着这样做一定是“正确的”)。 ohe 文档引用了 StringIndexer > OneHotEncoder > VectorAssembler 暂存管道,但它的措辞方式使其看起来是可选的(与仅执行 StringIndexer > VectorAssembler 相比)。

谁能帮我澄清一下?

【问题讨论】:

    标签: apache-spark-mllib apache-spark-ml


    【解决方案1】:

    首先,必须在 OneHotEncoder 之前使用 StringIndexer,因为OneHotEncoder 需要一列类别索引作为输入。

    为了回答您的问题,StringIndexer 可能会偏向某些机器学习模型。例如,在将具有三个类别(0、1 和 2)的分类列的数据框传递给线性回归模型之后。值 1 和 2 之间的双倍关系可能会得出结论,而它只是一个不同的类别,一个不同的索引。当在特定位置具有零和一的向量时,可以传输所需的类别差异信息。所以最后,这取决于训练期间使用的模型,基于树的模型对 one-hot 编码很敏感,并且对 one-hot 编码向量变得更糟。

    您可以考虑阅读Create a Pipeline - Learning Spark,了解一种热编码背后的更多详细信息。

    【讨论】:

      猜你喜欢
      • 2021-02-02
      • 1970-01-01
      • 2022-01-28
      • 2017-09-25
      • 2017-10-26
      • 2016-07-06
      • 1970-01-01
      • 2021-05-10
      • 2019-05-16
      相关资源
      最近更新 更多