Возможно ли получить доступ к атрибутам оценки в трубопроводах spark.ml?

У меня есть искры.ml в Spark 1.5.1, который состоит из серии трансформаторов, за которыми следует оценка k-средних. Я хочу иметь доступ к KMeansModel.clusterCenters после установки конвейера, но не могу понять, как это сделать. Есть ли эквивалент spark.ml функции sklearn pipeline.named_steps?

Я нашел этот ответ, который дает два варианта. Первый работает, если я беру k-образную модель из моего конвейера и подгоняю ее отдельно, но этот вид побеждает цель конвейера. Второй вариант не работает - я получаю error: value getModel is not a member of org.apache.spark.ml.PipelineModel.

EDIT: Пример конвейера:

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 -средств, содержащейся в этом конвейере? Как отмечалось выше, когда он не содержится в конвейере, это можно сделать с помощью fitKmeans.clusterCenters.

Ответы

Ответ 1

Отвечая на мой собственный вопрос... Я, наконец, наткнулся на примере глубоко в spark.ml документации, которая показывает, как сделать это с помощью stages члена PipelineModel класса. Итак, в приведенном выше примере, чтобы получить доступ к кластерным центрам k-сред, выполните следующие действия:

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

где fitKmeans - это PipelineModel, а 2 - индекс модели k fitKmeans в массиве этапов конвейера.

Ссылка: последняя строка большинства примеров на этой странице.