[英]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.