2

我希望能够使用 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 完成它?

4

0 回答 0