Phân cụm bằng Mô hình hỗn hợp quy trình Dirichlet trong Java PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Phân cụm với Mô hình hỗn hợp quy trình Dirichlet trong Java

Trong các bài viết trước, chúng tôi đã thảo luận chi tiết về Mô hình hỗn hợp quy trình Dirichlet và cách chúng có thể được sử dụng trong phân tích cụm. Trong bài viết này, chúng tôi sẽ trình bày một cách triển khai Java của hai mô hình DPMM khác nhau: Mô hình Hỗn hợp Thông thường Đa biến Dirichlet có thể được sử dụng để phân cụm dữ liệu Gaussian và Mô hình Hỗn hợp Đa thức Dirichlet được sử dụng để phân nhóm các tài liệu. Mã Java có nguồn mở theo giấy phép GPL v3 và có thể được tải xuống miễn phí từ Github.

Cập nhật: Khung học máy của Datumbox hiện là nguồn mở và miễn phí tải về. Kiểm tra gói com.datumbox.framework.machinelearning.clustering để xem việc triển khai Mô hình hỗn hợp quy trình Dirichlet trong Java.

Triển khai mô hình hỗn hợp quy trình Dirichlet trong Java

Mã triển khai Mô hình hỗn hợp quy trình Dirichlet với Gibbs Sampler và sử dụng Apache Commons Math 3.3 làm thư viện ma trận. Nó được cấp phép theo GPLv3 vì vậy hãy thoải mái sử dụng, sửa đổi nó và phân phối lại nó một cách tự do và bạn có thể tải xuống bản triển khai Java từ Github. Lưu ý rằng bạn có thể tìm thấy tất cả các phần lý thuyết của phương pháp phân cụm trong 5 bài viết trước và các nhận xét chi tiết của Javadoc để thực hiện trong mã nguồn.

Dưới đây chúng tôi liệt kê mô tả cấp cao về mã:

1. Lớp DPMM

DPMM là một lớp trừu tượng và hoạt động giống như một cơ sở cho nhiều mô hình khác nhau, thực hiện Quy trình nhà hàng Trung Quốc và chứa Sụp đổ Gibbs Sampler. Nó có cụm phương thức công khai () nhận tập dữ liệu dưới dạng Danh sách các điểm và chịu trách nhiệm thực hiện phân tích cụm. Các phương thức hữu ích khác của lớp là getPointAssignments () được sử dụng để truy xuất các nhiệm vụ cụm sau khi phân nhóm hoàn tất và getClusterList () được sử dụng để lấy danh sách các cụm đã xác định. DPMM chứa Cụm lớp trừu tượng lồng nhau tĩnh; nó chứa một số phương pháp trừu tượng liên quan đến việc quản lý các điểm và ước lượng pdf sau được sử dụng để ước tính các bài tập cụm.

2. Lớp GaussianDPMM

GaussianDPMM là sự triển khai của Mô hình hỗn hợp chuẩn đa biến Dirichlet và mở rộng lớp DPMM. Nó chứa tất cả các phương pháp được yêu cầu để ước tính xác suất theo giả định Gaussian. Hơn nữa, nó chứa Cluster lớp lồng nhau tĩnh thực thi tất cả các phương thức trừu tượng của lớp DPMM.Cluster.

3. LớpDPMM đa thức

MultinomialDPMM triển khai Mô hình Hỗn hợp Dirichlet-Multinomial và mở rộng lớp DPMM. Tương tự như lớp GaussianDPMM, nó chứa tất cả các phương thức được yêu cầu để ước tính xác suất theo giả định Đa thức-Dirichlet và chứa Cụm lớp lồng nhau tĩnh thực thi các phương thức trừu tượng của DPMM.Cluster.

4. Lớp SRS

Lớp SRS được sử dụng để thực hiện Lấy mẫu Ngẫu nhiên Đơn giản từ một bảng tần số. Nó được sử dụng bởi Gibbs Sampler để ước tính các nhiệm vụ cụm mới trong mỗi bước của quy trình lặp lại.

5. Lớp điểm

Lớp Point đóng vai trò là một bộ lưu trữ dữ liệu của bản ghi cùng với id của nó.

6. Thư viện toán học Apache Commons

Apache Commons Math 3.3 lib được sử dụng cho các phép nhân Ma trận và nó là phần phụ thuộc duy nhất của việc triển khai của chúng tôi.

7. Lớp DPMMExample

Lớp này chứa các ví dụ về cách sử dụng triển khai Java.

Sử dụng triển khai Java

Người sử dụng mã có thể định cấu hình tất cả các tham số của mô hình hỗn hợp, bao gồm các loại mô hình và siêu tham số. Trong đoạn mã sau, chúng ta có thể thấy cách thuật toán được khởi tạo và thực thi:

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();

Dưới đây, chúng ta có thể thấy kết quả của việc chạy thuật toán trên một tập dữ liệu tổng hợp bao gồm 300 điểm dữ liệu. Các điểm được tạo ra ban đầu bởi 3 phân phối khác nhau: N ([10,50], I), N ([50,10], I) và N ([150,100], I).

biểu đồ phân tán1
Hình 1: Biểu đồ phân tán của tập dữ liệu demo

Thuật toán sau khi chạy trong 10 lần lặp, nó đã xác định được 3 trung tâm cụm sau: [10.17, 50.11], [49.99, 10.13] và [149.97, 99.81]. Cuối cùng vì chúng tôi xử lý mọi thứ theo cách Bayes, chúng tôi không chỉ có thể cung cấp các ước tính điểm đơn lẻ của các trung tâm cụm mà còn cả phân phối xác suất của chúng bằng cách sử dụng công thức phương trình.

bản đồ nhiệt scatterplot2
Hình 2: Biểu đồ phân tán xác suất của các trung tâm của cụm

Trong hình trên, chúng ta vẽ các xác suất đó; các khu vực màu đỏ cho thấy khả năng cao là trung tâm của một cụm và các khu vực màu đen cho thấy xác suất thấp.

Để sử dụng triển khai Java trong các ứng dụng thế giới thực, bạn phải viết mã bên ngoài để chuyển đổi tập dữ liệu ban đầu của bạn thành định dạng cần thiết. Hơn nữa, mã bổ sung có thể cần thiết nếu bạn muốn hình dung đầu ra như chúng ta thấy ở trên. Cuối cùng lưu ý rằng thư viện Apache Commons Math được bao gồm trong dự án và do đó không cần cấu hình bổ sung để chạy các bản trình diễn.

Nếu bạn sử dụng việc triển khai trong một dự án thú vị, hãy gửi cho chúng tôi một dòng và chúng tôi sẽ giới thiệu dự án của bạn trên blog của chúng tôi. Ngoài ra nếu bạn thích bài viết, hãy dành một chút thời gian và chia sẻ nó lên Twitter hoặc Facebook.

Dấu thời gian:

Thêm từ Hộp dữ liệu