본문 바로가기

데이터 분석

Spark - Naive Bayes (단어를 이용한 문서 구별)

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





※시작하기에 앞서


▶Naive Bayes : 여러 클래스 중 어떤 클래스에 가장 잘 분류되는 지에 대한 분류기법으로 베이즈의 정리 사용


분류의 문제를 풀기 위해 확률과정을 사용

 






두 종류의 문서들이 있다고 한다.




어떤 문서 하나가 어느쪽에 속하는지 판별할 수 있을까?




Spark MLlib에서 지원하는 Naive Bayes 알고리즘을 이용해 보자.






문서 종류


    1. 과학     2. 역사




의 두종류의 문서들이 있다고 가정하고






5개 정도의 문서들을 확인해 보니!!


 

 문서 단어

 종류

 (1)문서

 원자  원자

 과학

 (2)문서

 원자  원자  분자

 과학

 (3)문서

 분자  분자  분자

 과학

 (4)문서

 이순신  거북선  전쟁

 역사

 (5)문서

 원자 원자 원자

 과학







이며, 예로 (2)문서의 경우 포함단어 분포가 아래와 같다.



      (2)문서  =>  원자(2번)     분자(1번)     이순신(0번)     거북선(0번)     전쟁(0번)








(1) ~ (5) 의 문들을 확인해 보면 아래와 같다.


 

 카테고리(Label)

 원자단어

 분자단어

이순신단어

거북선단어

전쟁단어

 (1)문서

 과학 -> 0

 2

 0

 0

 0

 0

 (2)문서

 과학 -> 0

 2

 1

 0

 0

 0

 (3)문서

 과학 -> 0

 0

 3

 0

 0

 0

 (4)문서

 역사 -> 1

 0

 0

 1

 1

 1

 (5)문서

 과학 -> 0

 3

 0

 0

 0

 0




이것으로 Naive Bayes 테스트를 위한 Data는 준비 되었다.







데이터는 아래와 같다.



  0, 2 0 0 0 0

  0, 2 1 0 0 0

  0, 0 3 0 0 0

  1, 0 0 1 1 1

  0, 3 0 0 0 0







Source Test


[ Naive Bayes Spark Test ]



아래 샘플 데이터는 테스트임으로 딴지는 노노!!



임의의 문서에 원자 단어 1회 / 이순신 단어 3회 / 거북선 단어 3회 / 전쟁 단어 3회 발생한다면


과연 어느 종류의 문서일까?









        SparkConf sconf = new SparkConf().setMaster("local[2]").setAppName("odinRawdataSearch").set("spark.ui.port", "4041");   
        jsc = new JavaSparkContext(sconf);


       

        //데이터 로드

        RDD trainData = MLUtils.loadLabeledPoints(jsc.sc(), "/home/ksu/test.data");


        //Naive Bayes 학습

        NaiveBayesModel trained = NaiveBayes.train(trainData); // (3)
       

        //임의의 문서

        Vector testData = Vectors.dense(new double[]{1, 0, 3, 3, 3});

        double result = trained.predict(testData);
               
        System.out.println(result);

 





결과는 당연히 1 (카테고리 0은 과학 1은 역사) 로 역사 문서일 것이라고 판단하게 된다.





이것으로 Spark의 Naive Bayes를 이용한 문서구분 테스트였습니다.



끝~~~







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

Spark - Linear Regression  (0) 2017.05.19
MSE, RMSE  (0) 2017.05.19
mahout - 설치 및 User 기준 추천  (0) 2017.05.11
Spark - Collaborative Filtering (영화 추천)  (0) 2017.05.10
Spark - Gaussian Mixture Model Example  (0) 2017.05.01