2016-04-25 54 views
1

我真的很想使用火花推动的新管道概念,但是由于IDF对象需要适合数据并进行转换,所以我不知道如何使用它。我想做这个;如何在火花管道中使用IDF?

Tokenizer tk = new Tokenizer() 
      .setInputCol("text") 
      .setOutputCol("words"); 
HashingTF tf = new HashingTF() 
      .setNumFeatures(1000) 
      .setInputCol(tk.getOutputCol()) 
      .setOutputCol("rawFeatures"); 
IDF idf = new IDF() 
      .setInputCol(tf.getOutputCol()) 
      .setOutputCol("IDFFeatures"); 
Pipeline pipe = new Pipeline() 
      .setStages(new PipeLineStage[] {tk, tf, idf}) 

但是除非我误解了这不适用于idf。

回答

2

这并不复杂,如果你检查Official Pipeline Example,它们的确如你所做。但是,您注意到大多数stagesEstimatorsTransformers)必须先安装,但在示例中它们不这样做,为什么?因为开发人员考虑到了这一点,并以一种方式对Pipeline类进行编程,使其为您完成此步骤(所有模型实例化,拟合,转换和预测均在内部完成)。

+0

这个答案是正确的,但是我的理解是IDF只能应用于训练集而不应用于测试集,因为IDF基于整个语料库的词频。在那种情况下,我如何才能操纵管道仅在培训阶段使用IDF? –

+0

@danieln您可以将DataFrame拆分为两个不同的数据框,并使用其中一个来提供流水线 –

+0

正确,但流水线仍然会将IDF应用于测试集。 –