2017-04-23 2 views
1

Wie bekomme ich das Mapping aus einem trainierten Spark MLlib StringIndexerModel?Abrufen von Spark Mllib StringIndexer Spaltenzuordnung

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

Der obige Code wird ein myColIdx meine Dataframe-Mapping-Werte in myCol auf einen Index Frequenz auf der Grundlage der Werte hinzufügen. d. h. der häufigste Wert -> 0, der zweithäufigste -> 1 usw.

Wie kann ich diese Zuordnung vom Modell abrufen? Wenn ich das Modell serialisiere/deserialisiere, wird das Mapping stabil sein (d. H. Werde ich nach der Transformation für dasselbe Ergebnis garantiert)?

Antwort

2

StringIndexerModel macht die Zuordnung labels Attribut:

stringIndexerModel.labels: Array[String] 

wo Werte entsprechen aufeinanderfolgenden Etiketten zum Beispiel für:

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

Sie erhalten folgende labels:

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

Array(bar, foo, foobar) 

mit bar als 0.0, foo als 1.0 und foobar als 2.0 indiziert. Dies ist die Eigenschaft des Modells und wird beibehalten, wenn das Modell saved lautet.

Bei Verwendung in Pipeline können Sie auch IndexToString verwenden, die Spaltenmetadaten verwenden, um Indizes zurück zu Beschriftungen zuzuordnen.

+------+--------+-------------+ 
| 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| 
+------+--------+-------------+ 
Verwandte Themen