我在Spark 1.5.1中有一個spark.ml管道,它由一系列變壓器組成,後面跟着一個k均值估計器。我想在裝配管道之後能夠訪問KMeansModel .clusterCenters,但無法弄清楚。有沒有sparkle.m相當於sklearn的pipeline.named_steps功能?是否可以訪問spark.ml管道中的估計器屬性?
我發現this answer它給出了兩個選項。如果我將k-means模型從我的管道中分離出來並單獨安裝,那麼第一件作品就會失敗,但這樣做會挫敗管道的目的。第二個選項不起作用 - 我得到error: value getModel is not a member of org.apache.spark.ml.PipelineModel
。
編輯:實例管道:
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)
所以現在fitKmeans
是org.apache.spark.ml.PipelineModel
類型。我的問題是,如何訪問由此管道中包含的k-means模型計算出的聚類中心?如上所述,當管道中包含而不是時,可以使用fitKmeans.clusterCenters
完成此操作。
你在問什麼不清楚!你會關心一個[MCVE](http://stackoverflow.com/help/mcve)嗎? – eliasah
@eliasah好的,增加了一個例子。 – hilarious