클러스터링 알고리즘 분류
▶ 하드 클러스터링 - 각 데이터 포인트가 하나의 클러스터에 속함 ▶ 소프트 클러스터링 - 각 데이터 포인트가 두개 이상의 클러스터에 속함 |
K-means 한계
▶클러스터의 밀도가 다른 경우 ▶구형모양 등 |
K-평균
▶ 대표적인 하드 클러스터링 ▶ 데이터를 k개의 상호 배타적인 클러스터로 분할, 포인트에서 클러스터 센터까지의 거리에 따라 결정 ▶ 클러스터 수를 알고 있음 ▶ 대용량 데이터의 빠른 클러스터링
|
Spark MLlib 을 이용한 테스트
※Sample Data
0.0 0.0 0.0 |
※Test Source
※ 테스트 요약 : 데이터를 읽어서 2개의 클러스터로 나누고 각각의 포인트를 확인하고 샘플데이터의 영역 확인
● Sample Load
String path = "data/mllib/kmeans_data.txt"; JavaRDD<String> data = jsc.textFile(path);
●데이터를 RDD로 변환
JavaRDD<Vector> parsedData = data.map( new Function<String, Vector>() { public Vector call(String s) { String[] sarray = s.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();
● 클러스터 개수와 반복 횟수 정의 int numClusters = 2; int numIterations = 20; KMeansModel clusters = KMeans.train(parsedData.rdd(), numClusters, numIterations);
● 클러스터 센터 출력
for (Vector center: clusters.clusterCenters()) { System.out.println(" " + center); }
=> 결과값 [0.1,0.1,0.1] / [9.099999999999998,9.099999999999998,9.099999999999998]
● 가장 가까운 센터와의 제곱 거리의 합
double cost = clusters.computeCost(parsedData.rdd());
=> 결과값 0.11999999999994547
=> 실제로 몇 개의 클러스터로 나눌지 알 수 없으므로 여러 가지 값의 K로 클러스터 간의 거리가 더이상 줄어들지 않을 때까지
시도해 보는 것으로 이때 사용
● 클러스터 포함영역 확인
System.out.println( clusters.predict(parsedData).collect() );
=> [0, 0, 0, 1, 1, 1]
샘플데이터는 총 6개 Row로 0.0, 0.0, 0.0 의 포함된 영역은 0이며 다음 값들의 영역 순으로 출력
'데이터 분석' 카테고리의 다른 글
mahout - 설치 및 User 기준 추천 (0) | 2017.05.11 |
---|---|
Spark - Collaborative Filtering (영화 추천) (0) | 2017.05.10 |
Spark - Gaussian Mixture Model Example (0) | 2017.05.01 |
머신러닝 유형 (0) | 2017.04.28 |
이산형 연속형 분포 (0) | 2017.04.20 |