2016-11-28 7 views
0

org.apache.spark.ml.classification.MultilayerPerceptronClassifier를 사용하여 다중 클래스 분류를하려고합니다. 아래에 내가 사용한 코드가 있습니다. 필자는 262 개의 기능을 가지고 있으며 MultilayerPerceptronClassifier에 기능 컬럼을 제공해야합니다. 누군가가 MultilayerPerceptronClassifier에 기능을 제공하는 방법을 설명 할 수 있습니까?Apache Spark MultilayerPerceptronClassifier 설정

setFeaturesCol() 메서드를 사용하여 기능을 제공 할 수 있지만 사용할 수 없기 때문에 실행할 수 없습니다. 한 번에 하나의 기능 만 추가 할 수 있지만 262 개의 기능이 있습니다.

import org.apache.commons.lang3.ArrayUtils; 
import org.apache.spark.SparkConf; 
import org.apache.spark.api.java.JavaSparkContext; 
import org.apache.spark.sql.Row; 
import org.apache.spark.sql.SQLContext; 
import org.apache.spark.ml.classification.MultilayerPerceptronClassificationModel; 
import org.apache.spark.ml.classification.MultilayerPerceptronClassifier; 
import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator; 
import org.apache.spark.sql.DataFrame; 

public class NN { 

    final static String RESPONSE_VARIABLE = "Activity"; 
    public static void main(String args[]){ 
     // Load training data 
     SparkConf sparkConf = new SparkConf(); 
     sparkConf.setAppName("test-client").setMaster("local[2]"); 
     sparkConf.set("spark.driver.allowMultipleContexts", "true"); 
     JavaSparkContext javaSparkContext = new JavaSparkContext(sparkConf); 
     SQLContext sqlContext = new SQLContext(javaSparkContext); 

     // Convert data in csv format to Spark data frame 
     DataFrame trainDataFrame = sqlContext.read().format("com.databricks.spark.csv") 
       .option("inferSchema", "true") 
       .option("header", "true") 
       .load("/home/thamali/Desktop/Project/csv/libsvm/train.csv"); 

     DataFrame testDataFrame = sqlContext.read().format("com.databricks.spark.csv") 
       .option("inferSchema", "true") 
       .option("header", "true") 
       .load("/home/thamali/Desktop/Project/csv/libsvm/train.csv"); 

     String [] predictors = trainDataFrame.columns(); 
     predictors = ArrayUtils.removeElement(predictors, RESPONSE_VARIABLE); 


// specify layers for the neural network: 
// input layer of size 4 (features), two intermediate of size 5 and 4 
// and output of size 3 (classes) 
     int[] layers = new int[] {262, 50, 40, 12}; 
// create the trainer and set its parameters 
     MultilayerPerceptronClassifier trainer = new MultilayerPerceptronClassifier() 
       .setLayers(layers) 
       .setBlockSize(128) 
       .setSeed(1234L) 
       .setMaxIter(100); 
// train the model 
     MultilayerPerceptronClassificationModel model = trainer.fit(trainDataFrame); 
// compute accuracy on the test set 
     DataFrame result = model.transform(testDataFrame); 
     DataFrame predictionAndLabels = result.select("prediction", "label"); 
     MulticlassClassificationEvaluator evaluator = new MulticlassClassificationEvaluator() 
       .setMetricName("accuracy"); 
     System.out.println("Accuracy = " + evaluator.evaluate(predictionAndLabels)); 
    } 

} 

답변

0

Apache spark vector Assembler를 사용하여 필요한 모든 기능을 포함하는 벡터를 만들 수 있습니다.