0

大きなデータ分析アプリケーションの1つでHadoopでSpark Mllibを使用しています。 私は41の機能と1つのラベルの機能セットを持っています。トレーニング中に、フィーチャー・エンジニアとフィーチャー・エンジニアをミックスしてマッチさせ、自分のシナリオに最適な最小限のフィーチャーセットを探したいと思います。多くの機能を備えたJavaRDDの中から選択的な機能を使用する

これはトレーニングとモデルの精度のテストで使用する機能をトレーニング時に選択します。

私はこの

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); 

は今、データセットを搭載したモデルを訓練する前に、私が使用したい選択機能のデータをフィルタリングします。誰か私にJavaRDD<LabeledPoint>のこれを行う方法を提案することはできますか?

詳細が必要な場合は、お気軽にお問い合わせください。

答えて

0

気にしないでください。私は自分自身で答えを考え出した。

私はこれをやってみたいと思っている人のために、このようなことをしました。

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を戻します。

詳細については、お気軽にお問い合わせください。

関連する問題