繁体   English   中英

检索Spark Mllib StringIndexer列映射

[英]Retrieve Spark Mllib StringIndexer column mapping

如何从训练有素的Spark MLlib StringIndexerModel中获取映射?

val stringIndexer = new StringIndexer()
    .setInputCol("myCol")
    .setOutputCol("myColIdx")
val stringIndexerModel = stringIndexer.fit(data)
val res = stringIndexerModel.transform(data)

上面的代码将添加myColIdx在我的数据帧映射值myCol基于所述频率值的索引。 例如,最频繁的值-> 0,第二个最频繁的-> 1,依此类推...

如何从模型中检索该映射? 如果我对模型进行序列化/反序列化,映射是否将是稳定的(即,在转换后是否可以保证获得相同的结果)?

StringIndexerModel使用labels属性公开映射:

stringIndexerModel.labels: Array[String]

其中值对应于连续标签,例如:

val data = Seq("foo", "bar", "foo", "bar", "foobar", "bar").toDF("myCol")

您将获得以下labels

import org.apache.spark.ml.feature.IndexToString

Array(bar, foo, foobar)

bar索引为0.0, foo索引为1.0, foobar索引为2.0。 这是模型的属性,在保存模型时会saved

Pipeline使用时,还可以使用IndexToString ,它将使用列元数据将索引映射回标签。

indexToString.transform(stringIndexerModel.transform(data)).show
+------+--------+-------------+
| myCol|myColIdx|myColReversed|
+------+--------+-------------+
|   foo|     1.0|          foo|
|   bar|     0.0|          bar|
|   foo|     1.0|          foo|
|   bar|     0.0|          bar|
|foobar|     2.0|       foobar|
|   bar|     0.0|          bar|
+------+--------+-------------+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM