Spark 1.5.1 に spark.ml パイプラインがあります。これは、一連の変換器とそれに続く k-means 推定器で構成されています。パイプラインのフィッティング後にKMeansModel .clusterCentersにアクセスできるようにしたいのですが、方法がわかりません。sklearnのpipeline.named_steps機能に相当するspark.mlはありますか?
2つのオプションを提供するこの回答を見つけました。最初の方法は、k-means モデルをパイプラインから取り出して個別に適合させた場合に機能しますが、それではパイプラインの目的が少し損なわれます。2 番目のオプションは機能しません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
。