Java PlatoBlockchain Data Intelligence에서 Dirichlet 프로세스 혼합 모델을 사용한 클러스터링. 수직 검색. 일체 포함.

Java에서 Dirichlet Process Mixture Model을 사용한 클러스터링

이전 기사에서 우리는 디 리클 렛 공정 혼합물 모델 그리고 클러스터 분석에 어떻게 사용될 수 있는지. 이 기사에서는 Java 구현을 제시합니다. 두 가지 DPMM 모델: 가우시안 데이터를 군집하는 데 사용할 수있는 Dirichlet 다변량 정규 혼합 모형 및 문서를 군집하는 데 사용되는 Dirichlet- 다항식 혼합 모형. Java 코드는 GPL v3 라이센스에 따라 오픈 소스이며 무료로 다운로드 할 수 있습니다 깃허브.

업데이트 : Datumbox Machine Learning Framework는 이제 오픈 소스이며 무료로 제공됩니다. 다운로드. com.datumbox.framework.machinelearning.clustering 패키지를 확인하여 Java에서 Dirichlet Process Mixture Models의 구현을 확인하십시오.

Java에서 Dirichlet Process Mixture Model 구현

이 코드는 Gibbs Sampler와 함께 Dirichlet Process Mixture Model을 구현하고 Apache Commons Math 3.3을 매트릭스 라이브러리로 사용합니다. GPLv3에 따라 라이센스가 부여되었으므로 자유롭게 사용하고 수정하고 자유롭게 재배포하면 Java 구현을 다운로드 할 수 있습니다. 깃허브. 이전 5 기사에서 클러스터링 방법의 모든 이론적 부분과 소스 코드에서 구현하기위한 자세한 Javadoc 주석을 찾을 수 있습니다.

아래는 코드에 대한 높은 수준의 설명입니다.

1. DPMM 클래스

DPMM은 추상 클래스이며 다양한 모델의 기반으로 작동합니다. 중식 레스토랑 프로세스 그리고 포함 축소 된 깁스 샘플러. 데이터 세트를 포인트 목록으로 수신하고 클러스터 분석을 수행하는 공용 메소드 cluster ()가 있습니다. 클래스의 다른 유용한 메소드는 클러스터링이 완료된 후 클러스터 할당을 검색하는 데 사용되는 getPointAssignments ()와 식별 된 클러스터 목록을 가져 오는 데 사용되는 getClusterList ()입니다. DPMM은 정적 중첩 추상 클래스 Cluster를 포함합니다. 여기에는 군집 할당의 추정에 사용되는 점 관리 및 사후 pdf 추정과 관련된 몇 가지 추상적 인 방법이 포함되어 있습니다.

2. GaussianDPMM 클래스

GaussianDPMM은 Dirichlet Multivariate Normal Mixture Model의 구현이며 DPMM 클래스를 확장합니다. 여기에는 가우스 가정 하에서 확률을 추정하는 데 필요한 모든 방법이 포함되어 있습니다. 또한 DPMM.Cluster 클래스의 모든 추상 메서드를 구현하는 정적 중첩 클래스 Cluster가 포함되어 있습니다.

3. 다항식 DPMM 클래스

MultinomialDPMM은 Dirichlet-Multinomial Mixture Model을 구현하고 DPMM 클래스를 확장합니다. GaussianDPMM 클래스와 마찬가지로 Multinomial-Dirichlet 가정 하에서 확률을 추정하는 데 필요한 모든 메소드와 DPMM.Cluster의 추상 메소드를 구현하는 정적 중첩 클래스 Cluster를 포함합니다.

4. SRS 수업

SRS 클래스는 주파수 테이블에서 단순 랜덤 샘플링을 수행하는 데 사용됩니다. Gibbs Sampler는 반복 프로세스의 각 단계에서 새 클러스터 할당을 추정하는 데 사용됩니다.

5. 포인트 클래스

Point 클래스는 레코드의 데이터를 ID와 함께 저장하는 튜플의 역할을합니다.

6. 아파치 커먼즈 수학 라이브러리

Apache Commons Math 3.3 lib는 Matrix 곱셈에 사용되며 이는 구현의 유일한 종속성입니다.

7. DPMMExample 클래스

이 클래스에는 Java 구현 사용법에 대한 예제가 포함되어 있습니다.

Java 구현 사용

코드 사용자는 모델 유형 및 하이퍼 파라미터를 포함한 혼합 모델의 모든 매개 변수를 구성 할 수 있습니다. 다음 코드 스 니펫에서 알고리즘이 초기화되고 실행되는 방식을 확인할 수 있습니다.

List<Point> pointList = new ArrayList<>();
//add records in pointList

//Dirichlet Process parameter
Integer dimensionality = 2;
double alpha = 1.0;

//Hyper parameters of Base Function
int kappa0 = 0;
int nu0 = 1;
RealVector mu0 = new ArrayRealVector(new double[]{0.0, 0.0});
RealMatrix psi0 = new BlockRealMatrix(new double[][]{{1.0,0.0},{0.0,1.0}});

//Create a DPMM object
DPMM dpmm = new GaussianDPMM(dimensionality, alpha, kappa0, nu0, mu0, psi0);

int maxIterations = 100;
int performedIterations = dpmm.cluster(pointList, maxIterations);

//get a list with the point ids and their assignments
Map<Integer, Integer> zi = dpmm.getPointAssignments();

아래에서 300 개의 데이터 포인트로 구성된 합성 데이터 세트에서 알고리즘을 실행 한 결과를 볼 수 있습니다. 점은 원래 N ([3], I), N ([10,50], I) 및 N ([50,10], I)의 150,100 가지 분포로 생성되었습니다.

산점도 1
그림 1 : 데모 데이터 세트의 산포도

10 번의 반복 실행 후 알고리즘은 [3, 10.17], [50.11, 49.99] 및 [10.13, 149.97]의 99.81 개의 클러스터 센터를 식별했습니다. 마지막으로 모든 것을 베이지안 방식으로 처리하기 때문에 클러스터 센터의 단일 점 추정뿐만 아니라 공식 방정식.

산점도 2-히트 맵
그림 2 : 군집 중심 확률의 산점도

위의 그림에서 우리는 이러한 확률을 보여줍니다. 빨간색 영역은 군집 중심 일 가능성이 높고 검은 색 영역은 가능성이 낮음을 나타냅니다.

실제 애플리케이션에서 Java 구현을 사용하려면 원래 데이터 세트를 필수 형식으로 변환하는 외부 코드를 작성해야합니다. 또한 위에서 본 것처럼 출력을 시각화하려면 추가 코드가 필요할 수 있습니다. 마지막으로 Apache Commons Math 라이브러리가 프로젝트에 포함되어 있으므로 데모를 실행하기위한 추가 구성이 필요하지 않습니다.

흥미로운 프로젝트에서 구현을 사용하는 경우 우리에게 라인을 드롭하면 블로그에 프로젝트가 표시됩니다. 또한 기사가 마음에 들면 잠시 시간을내어 Twitter 나 Facebook에서 공유하십시오.

타임 스탬프 :

더보기 데이텀 박스