16

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

4

1 に答える 1

24

stages私自身の質問に答えて...クラスのメンバーを使用してこれを行う方法を示すspark.mlドキュメントの奥深くにある例を最終的に見つけましたPipelineModel。上記の例では、k-means クラスターの中心にアクセスするには、次のようにします。

val centers = fitKmeans.stages(2).asInstanceOf[KMeansModel].clusterCenters

ここfitKmeansで、 は PipelineModel であり、2パイプライン ステージの配列内の k-means モデルのインデックスです。

参照:このページのほとんどの例の最後の行。

于 2015-11-06T17:28:27.447 に答える