我在Spark 1.5.1中有一个spark.ml流水线,由一系列变压器组成,后跟一个k-means评估器。我想在拟合管道后能够访问KMeansModel.clusterCenters ,但不知道如何做到。是否有spark.ml相当于sklearn的pipeline.named_steps功能的等效项?
我找到了这个答案,其中给出了两个选项。如果我将k-means模型从管道中取出并单独拟合,则第一个选项有效,但这会有点违背流水线的目的。第二个选项无法使用-我得到了
编辑:管道的示例:
我找到了这个答案,其中给出了两个选项。如果我将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
。