IndexToString

  与StringIndexer相对的是,IndexToString将标签索引列映射回原来的字符串标签。一个通用的使用案例是使用
StringIndexer将标签转换为索引,然后通过索引训练模型,最后通过IndexToString将预测的标签索引恢复成字符串标签。

例子

  假设我们有下面的DataFrame,它的列名为idcategoryIndex

  1. id | categoryIndex
  2. ----|---------------
  3. 0 | 0.0
  4. 1 | 2.0
  5. 2 | 1.0
  6. 3 | 0.0
  7. 4 | 0.0
  8. 5 | 1.0

  把categoryIndex作为输入列,originalCategory作为输出列,使用IndexToString我们可以恢复原来的标签。

  1. id | categoryIndex | originalCategory
  2. ----|---------------|-----------------
  3. 0 | 0.0 | a
  4. 1 | 2.0 | b
  5. 2 | 1.0 | c
  6. 3 | 0.0 | a
  7. 4 | 0.0 | a
  8. 5 | 1.0 | c

  下面是程序调用的例子。

  1. import org.apache.spark.ml.feature.{IndexToString, StringIndexer}
  2. val df = spark.createDataFrame(Seq(
  3. (0, "a"),
  4. (1, "b"),
  5. (2, "c"),
  6. (3, "a"),
  7. (4, "a"),
  8. (5, "c")
  9. )).toDF("id", "category")
  10. val indexer = new StringIndexer()
  11. .setInputCol("category")
  12. .setOutputCol("categoryIndex")
  13. .fit(df)
  14. val indexed = indexer.transform(df)
  15. val converter = new IndexToString()
  16. .setInputCol("categoryIndex")
  17. .setOutputCol("originalCategory")
  18. val converted = converter.transform(indexed)
  19. converted.select("id", "originalCategory").show()