본문 바로가기

데이터 분석

Spark - Gaussian Mixture Model Example

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

가우시안 혼합 모델(Gaussian Mixture Model)


▶데이터마이닝, 패턴 인식, 머신 러닝, 통계분석 등에 광범위하게 쓰인다


모델의 파라미터들은 EM 알고리즘을 통해 구함


EM알고리즘은 2단계 / 1단계 샘플이 어느 가우시언에 속하는지 추정 / 2단계 매개변수 집합을 추정


K-Means 알고리즘에서는 유클리디언(Euclidean) 거리 함수를 사용하는 반면에 EM 알고리즘은 log-likelihood 함수를 사용하여 모델의 적합성을 평가


K-Means가 거리 기반 군집 방법인 것에 비하여 EM은 확률 기반 군집(Probability-based clustering)





Spark Sample Test


Spark Gaussian Mixture Model


각 가우스 i = 1..k에서 확률 w (i)로 점을 그려주는 k 개의 가우시안으로 구성


mu (i)와 sigma (i)는 각각의 가우시안 분포 i = 1..k에 대한 각각의 평균과 공분산




Sample


 2.59470454e+00 2.12298217e+00
 1.15807024e+00 -1.46498723e-01
 2.46206638e+00 6.19556894e-01
 -5.54845070e-01 -7.24700066e-01
 -3.23111426e+00 -1.42579084e+00
 3.02978115e+00 7.87121753e-01
 1.97365907e+00 1.15914704e+00
 -6.44852101e+00 -3.18154314e+00
 1.30963349e+00 1.62866434e-01
 4.26482541e+00 2.15547996e+00
 3.79927257e+00 1.50572445e+00
 4.17452609e-01 -6.74032760e-01
..

..

..

 





Source

● 데이터 로딩
String path = "data/mllib/gmm_data.txt"; JavaRDD<String> data = jsc.textFile(path); JavaRDD<Vector> parsedData = data.map( new Function<String, Vector>() { public Vector call(String s) { String[] sarray = s.trim().split(" "); double[] values = new double[sarray.length]; for (int i = 0; i < sarray.length; i++) { values[i] = Double.parseDouble(sarray[i]); } return Vectors.dense(values); } } ); parsedData.cache();
GaussianMixture를 사용하여 데이터를 두 개의 클래스로 GaussianMixtureModel gmm = new GaussianMixture().setK(2).run(parsedData.rdd());



결과

for (int j = 0; j < gmm.k(); j++) {

System.out.printf("weight=%f\nmu=%s\nsigma=\n%s\n", gmm.weights()[j], gmm.gaussians()[j].mu(), gmm.gaussians()[j].sigma()); }


weight=0.481115
mu=[0.07216446143880562,0.016666002049897922]
sigma=
4.77550446695817 1.8740333845838861
1.8740333845838861 0.9138948949196656

weight=0.518885
mu=[-0.10460959883873233,0.04290498889372796]
sigma=
4.911130251912797 -2.008943030663285
-2.008943030663285 1.0122638020598331




System.out.println(gmm.predict(parsedData).collect());


[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, .. 



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

mahout - 설치 및 User 기준 추천  (0) 2017.05.11
Spark - Collaborative Filtering (영화 추천)  (0) 2017.05.10
Spark - K-means  (0) 2017.05.01
머신러닝 유형  (0) 2017.04.28
이산형 연속형 분포  (0) 2017.04.20