我希望能够使用 Spark 2.0+ 的管道功能来构建我的模型,但我不知道如何将 LSA/SVD 合并到我的管道中。我知道 RDD 上的功能,但我不相信可以将其合并到 Spark.ml 管道中。
我希望能够做这样的事情:
Pipeline pipeline = new Pipeline();
// Break down the long description into word tokens
Tokenizer tokenizer = new Tokenizer()
.setInputCol("long_description")
.setOutputCol("words");
// Use hashing trick to get word counts
HashingTF hashingTF = new HashingTF()
.setNumFeatures(numWords)
.setInputCol(tokenizer.getOutputCol())
.setOutputCol("hash");
// Take the inverse document frequency weights
IDF idf = new IDF()
.setInputCol(hashingTF.getOutputCol())
.setOutputCol("wordFeatures");
// *** THIS IS NOT POSSIBLE ***
SVD svd = new SVD()
.setInputCol(idf.getOutputCol())
.setOutputCol("svdFeatures");
// Combine all relevant feature columns into one feature vector
VectorAssembler assembler = new VectorAssembler()
.setInputCols(new String[]{...})
.setOutputCol("features");
// RandomForest Time!
RandomForestClassifier rf = new RandomForestClassifier()
.setFeaturesCol(assembler.getOutputCol())
.setLabelCol("labels")
.setNumTrees(numTrees);
pipeline.setStages(new PipelineStage[]{tokenizer, hashingTF, idf, svd, assembler, rf});
我知道使用 PCA 可以做到这一点。有没有办法用 SVD/LSA 完成它?