본문 바로가기

데이터 분석

Spark - Multilayer perceptron classifier

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.



■Spark Doc - Multilayer perceptron







Multilayer perceptron(MLP) 그림 요약







test sample


    Random forest 테스트에서 사용한 동일 데이터 형태

0 1:1 2:4 3:1 4:1 5:1 6:3
0 1:1 2:1 3:1 4:1 5:1 6:6
1 1:2 2:1 3:5 4:1 5:1 6:6
0 1:1 2:1 3:1 4:1 5:1 6:1
1 1:2 2:3 3:1 4:1 5:1 6:1

    ..

    ..

     ..







소스


        SparkSession spark = SparkSession.builder().master("local[2]").appName("aa")
                .config("spark.ui.enabled", "false")
                .config("spark.sql.crossJoin.enabled", "true").getOrCreate();
       
        String training_path = "/home/ksu/Downloads/trainingValues.txt";
        String test_path = "/home/ksu/Downloads/testValues.txt";             
       
        Dataset<Row> training_data = spark.read().format("libsvm").load(training_path);
        Dataset<Row> test_data = spark.read().format("libsvm").load(test_path);


        int[] layers = new int[] {6, 20, 20, 20, 3}; 아래 참고

              
        MultilayerPerceptronClassifier trainer = new MultilayerPerceptronClassifier()
          .setLayers(layers)
          .setBlockSize(128)
          .setSeed(1234L)
          .setMaxIter(100);

        MultilayerPerceptronClassificationModel model = trainer.fit(training_data);

        Dataset<Row> result = model.transform(test_data);
        Dataset<Row> predictionAndLabels = result.select("prediction", "label", "features");
        MulticlassClassificationEvaluator evaluator = new MulticlassClassificationEvaluator()

                                                                           .setMetricName("accuracy");
       
        System.out.println("Test set accuracy = " + evaluator.evaluate(predictionAndLabels));

        predictionAndLabels.show();

 






결과

 

Test set accuracy = 0.8571428571428571


+----------+-----+--------------------+
|prediction    |label|          features|
+----------+-----+--------------------+
|       2.0|  0.0|(6,[0,1,2,3,4,5],...|
|       0.0|  0.0|(6,[0,1,2,3,4,5],...|
|       0.0|  1.0|(6,[0,1,2,3,4,5],...|
|       0.0|  0.0|(6,[0,1,2,3,4,5],...|
|       1.0|  1.0|(6,[0,1,2,3,4,5],...|
|       1.0|  1.0|(6,[0,1,2,3,4,5],...|
|       0.0|  0.0|(6,[0,1,2,3,4,5],...|
|       0.0|  0.0|(6,[0,1,2,3,4,5],...|
|       0.0|  0.0|(6,[0,1,2,3,4,5],...|
|       1.0|  1.0|(6,[0,1,2,3,4,5],...|
|       0.0|  0.0|(6,[0,1,2,3,4,5],...|
|       1.0|  1.0|(6,[0,1,2,3,4,5],...|
|       1.0|  1.0|(6,[0,1,2,3,4,5],...|
|       0.0|  0.0|(6,[0,1,2,3,4,5],...|
|       0.0|  0.0|(6,[0,1,2,3,4,5],...|
|       1.0|  1.0|(6,[0,1,2,3,4,5],...|
|       2.0|  2.0|(6,[0,1,2,3,4,5],...|
|       2.0|  1.0|(6,[0,1,2,3,4,5],...|
|       2.0|  2.0|(6,[0,1,2,3,4,5],...|
|       2.0|  2.0|(6,[0,1,2,3,4,5],...|
+----------+-----+--------------------+
only showing top 20 rows



          정확성은 85.7%


          로 prediction <-> label 이 두개 정도 실제 데이터 값과 다르게 나옴






정확성 향상


int[] layers = new int[] {6, 20, 20, 20, 3};

▶이것은 6개의 특성들을 넣어서 사이즈가 20인 레이어 3개를 통과하여 데이터를 3 분류로 구분 한다는 뜻임




그리고,


가장 성능이 좋은 Hidden Layer 개수란?

1개의 Hidden Layer를 사용 대비 2개로 늘린다고 정확도가 올라간다고 할 수 없음


Layer가 깊어 질수록 local minimum에 빠져 나오기 힘들다는 문제 있음

대부분 1, 2개로 구성된 MLP를 많이 사용함.






그래서 !!!


int[] layers = new int[] {6, 10, 5, 3};


입력 출력은 변화가 없으니 레이어를 10, 5 두개로 바꿈


Test set accuracy = 0.9047619047619048로 정확도가 90.5%로 향상됨

 










'데이터 분석' 카테고리의 다른 글

Discrete Cosine Transform  (1) 2017.06.21
Spark - ML Pipelines  (0) 2017.06.01
Spark - Random Forest Regression  (0) 2017.05.24
Spark - Random Forest Classification  (3) 2017.05.23
Spark - Linear Regression  (0) 2017.05.19