Ho una pipeline spark.ml in Spark 1.5.1 che consiste in una serie di trasformatori seguita da uno stimatore k-means. Voglio essere in grado di accedere allo KMeansModel .clusterCenters dopo aver installato la pipeline, ma non riesco a capire come. Esiste un equivalente spark.ml della caratteristica pipeline.named_steps di sklearn?È possibile accedere agli attributi dello stimatore nelle pipeline spark.ml?
Ho trovato this answer che offre due opzioni. Il primo funziona se prendo il mio modello k-means dalla mia pipeline e lo adattare separatamente, ma in qualche modo sconfigge lo scopo di una pipeline. La seconda opzione non funziona: ricevo error: value getModel is not a member of org.apache.spark.ml.PipelineModel
.
EDIT: Esempio gasdotto:
import org.apache.spark.ml.feature.{HashingTF, IDF, Tokenizer}
import org.apache.spark.ml.clustering.{KMeans, KMeansModel}
import org.apache.spark.ml.Pipeline
// create example dataframe
val sentenceData = sqlContext.createDataFrame(Seq(
("Hi I heard about Spark"),
("I wish Java could use case classes"),
("K-means models are neat")
)).toDF("sentence")
// initialize pipeline stages
val tokenizer = new Tokenizer().setInputCol("sentence").setOutputCol("words")
val hashingTF = new HashingTF().setInputCol("words").setOutputCol("features").setNumFeatures(20)
val kmeans = new KMeans()
val pipeline = new Pipeline().setStages(Array(tokenizer, hashingTF, kmeans))
// fit the pipeline
val fitKmeans = pipeline.fit(sentenceData)
Così ora fitKmeans
è di tipo org.apache.spark.ml.PipelineModel
. La mia domanda è: come posso accedere ai centri di cluster calcolati dal modello k-means contenuto in questa pipeline? Come notato sopra, quando non contenuto in una pipeline, questo può essere fatto con fitKmeans.clusterCenters
.
Quello che stai chiedendo non è chiaro! Ti piacerebbe riformulare con un [MCVE] (http://stackoverflow.com/help/mcve)? – eliasah
@eliasah Ok, aggiunto un esempio. – hilarious