我在 Spark 1.5.1 中有一个 spark.ml 管道,它由一系列转换器和一个 k-means 估计器组成。我希望能够在安装管道后访问KMeansModel .clusterCenters,但不知道如何。是否有 spark.ml 等效于 sklearn 的 pipeline.named_steps 功能?
我找到了这个答案,它提供了两种选择。如果我将 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
.