※시작하기에 앞서
▶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"); //데이터 로드 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});
|
결과는 당연히 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 |