使用具有许多功能的 JavaRDD 中的选择性功能

Use selective features out of a JavaRDD with many features

我在一个大数据分析应用程序中使用 Spark Mllib 和 Hadoop。 我有一组包含 41 个特征和一个标签的特征。现在,在训练时,我想将我的特征混合并匹配给特征工程师,并找到最适合我的场景的最小特征集。

为此,我想在训练时select在训练和测试模型准确性时使用哪些特征。

我正在做这个

JavaRDD<LabeledPoint>[] splits = data.randomSplit(new double[] { 0.5, 0.5 });
JavaRDD<LabeledPoint> trainingData = splits[0];
JavaRDD<LabeledPoint> testData = splits[1];

然后使用该数据训练不同的模型。

modelLR = new LogisticRegressionWithLBFGS().setNumClasses(numClasses).run(trainingData.rdd());
modelRF = RandomForest.trainClassifier(trainingData, numClasses, categoricalFeaturesInfo, numTrees, featureSubsetStrategy, impurity, maxDepth, maxBins, seed);
modelNB = NaiveBayes.train(trainingData.rdd(), 1.0);
modelGBT = GradientBoostedTrees.train(trainingData, boostingStrategy);
modelDT = DecisionTree.trainClassifier(trainingData, numClasses, categoricalFeaturesInfo, impurity, maxDepth, maxBins);

现在,在使用数据集训练模型之前,我想过滤数据以获得我想要使用的 select 个特征。有人可以建议我用 JavaRDD<LabeledPoint> 做这个的方法吗?

如果需要更多详细信息,请随时询问。

没关系。我自己想出了答案。

对于任何有兴趣这样做的人,我做了类似的事情。

public static JavaRDD<LabeledPoint> filterData(JavaRDD<LabeledPoint> data, String filterString) {
        return data.map(new Function<LabeledPoint, LabeledPoint>() {
            @Override
            public LabeledPoint call(LabeledPoint point) throws Exception {
                double label = point.label();
                double[] features = point.features().toArray();
                String[] featuresInUse = filterString.split(",");
                double[] filteredFeatures = new double[featuresInUse.length];
                for (int i = 0; i < featuresInUse.length; i++) {
                    filteredFeatures[i] = features[Integer.parseInt(VectorizationProperties.getProperty(featuresInUse[i]))];
                }
                LabeledPoint newPoint = new LabeledPoint(label, Vectors.dense(filteredFeatures));
                System.out.println(newPoint);
                return newPoint;
            }
        });
    }

这将过滤每条记录并返回过滤后的 JavaRDD。

请随时询问任何需要进一步了解的详细信息。