--- html: toc: true offline: true export_on_save: html: true --- # EM Clustering Operator --- ## Operator 설명 - k개의 cluster로 분할하기 위해 반복적으로 두 단계(기댓값 단계,최대화 단계)를 수행한다. - EM 알고리즘은 매개변수에 관한 추정값으로 로그가능도(log likelihood)의 기댓값을 계산하는 기댓값 (E) 단계와 이 기댓값을 최대화하는 변수값을 구하는 최대화 (M) 단계를 번갈아가면서 적용한다. 최대화 단계에서 계산한 변수값은 다음 기댓값 단계의 추정값으로 쓰인다. ## Operator 파라미터 설명 - k_value: cluster의 개수 (required) - maxIter: EMClustering을 한번 수행할 때 수행되는 최대 반복 횟수. EMClustering 시도 횟수(required) ## 작동순서 1. 입력 DataFrame의 유효성 검사를 진행한다. (K값, maxIter, Numeric Columns) 2. 입력 DataFrame을 Vectors로 변환 후 featurs 칼럼에 재생성한다. 3. Spark ml의 GaussianMixture 알고리즘을 사용한다. (expectation maximization 수행) 4. 출력 DataFrame을 생성한다. ## Operator 모듈 테스트 결과 ### 입력 데이터 |a1| a2| a3| a4| |:---:|:---:|:---:|:---:| |5.1|3.5|1.4|0.2| |4.9|3.0|1.4|0.2| |4.7|3.2|1.3|0.2| |4.6|3.1|1.5|0.2| |5.0|3.6|1.4|0.2| |5.4|3.9|1.7|0.4| |4.6|3.4|1.4|0.3| |5.0|3.4|1.5|0.2| |4.4|2.9|1.4|0.2| |4.9|3.1|1.5|0.1| |5.4|3.7|1.5|0.2| |4.8|3.4|1.6|0.2| |4.8|3.0|1.4|0.1| |4.3|3.0|1.1|0.1| |5.8|4.0|1.2|0.2| ### 결과 데이터 |index| a1| a2| a3| a4|cluster| |:---:|:---:|:---:|:---:|:---:|:---:| | 1|5.1|3.5|1.4|0.2| 0| | 2|4.9|3.0|1.4|0.2| 0| | 3|4.7|3.2|1.3|0.2| 0| | 4|4.6|3.1|1.5|0.2| 0| | 5|5.0|3.6|1.4|0.2| 0| | 6|5.4|3.9|1.7|0.4| 1| | 7|4.6|3.4|1.4|0.3| 0| | 8|5.0|3.4|1.5|0.2| 0| | 9|4.4|2.9|1.4|0.2| 0| | 10|4.9|3.1|1.5|0.1| 0| | 11|5.4|3.7|1.5|0.2| 0| | 12|4.8|3.4|1.6|0.2| 0| | 13|4.8|3.0|1.4|0.1| 0| | 14|4.3|3.0|1.1|0.1| 1| | 15|5.8|4.0|1.2|0.2| 1| - 결과 데이터의 cluster column에서 각 data들이 할당된 cluster를 보여준다. - K 값을 2로 설정하였으므로 위와 같이 2개의 cluster에 data들이 할당되는 것을 알 수 있다. - parameter는 다음과 같이 설정하였다. ```scala val eMClusteringInfo = EMClusteringInfo.newBuilder() .setKValue(2) .setMaxIter(100) .build ```