Возможно ли получить доступ к атрибутам оценки в трубопроводах 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
в массиве этапов конвейера.
Ссылка: последняя строка большинства примеров на этой странице.