使用Apache Spark ML,如何转换(用于预测)没有标签的数据集?

时间:2018-08-07 17:55:22

标签: apache-spark apache-spark-mllib apache-spark-ml

我确定我在理解Spark ML的管道方面存在差距。

我有一个针对一组数据进行训练的管道,其模式为“标签”,“注释”(两个字符串)。我的管道转换了“标签”,添加了“ indexedLabel”,并通过标记化然后HashingTF(以“ vectorizedComment”结尾)对“注释”进行了矢量化处理。管道以LogisticRegression结尾,标签列为“ indexedLabel”以及“ vectorizedComment”的功能列。

效果很好!我可以适应我的管道并获得一个管道模型,该模型可以整天用“ label”,“ comment”转换数据集! 但是,我的目标是能够抛出仅“评论”的数据集,因为“标签”仅用于训练模型目的。

我有信心在理解管道预测的工作原理方面存在差距-有人可以为我指出这一点吗?

1 个答案:

答案 0 :(得分:1)

标签的转换可以在管道外部(即之前)进行。仅在培训期间才需要标签,而在管道/模型的实际使用中则不需要标签。通过在管道中执行标签转换,任何数据帧都需要具有不希望的标签列。

小例子:

val indexer = new StringIndexer()
  .setInputCol("label")
  .setOutputCol("indexedLabel")

val df2 = indexer.fit(df).transform(df)

// Create pipeline with other stages and use df2 to fit it

或者,您可以有两个单独的管道。一种包括在训练过程中使用的标签转换,另一种没有标签转换。确保其他阶段在两个管道中引用相同的对象。

val indexer = new StringIndexer()
  .setInputCol("label")
  .setOutputCol("indexedLabel")

// Create feature transformers and add to the pipelines

val pipelineTraining = new Pipeline().setStages(Array(indexer, ...))
val pipelineUsage = new Pipeline().setStages(Array(...))