Clustering dengan Model Campuran Proses Dirichlet di Java PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Clustering dengan Model Campuran Proses Dirichlet di Jawa

Dalam artikel sebelumnya kami membahas secara rinci Model Campuran Proses Dirichlet dan bagaimana mereka dapat digunakan dalam analisis cluster. Pada artikel ini kami akan menyajikan implementasi Java dari dua model DPMM yang berbeda: Model Campuran Normal Dirichlet Multivariat yang dapat digunakan untuk mengelompokkan data Gaussian dan Model Campuran Dirichlet-Multinomial yang digunakan untuk mengelompokkan dokumen. Kode Java bersumber terbuka di bawah lisensi GPL v3 dan dapat diunduh secara gratis dari Github.

Pembaruan: Kerangka Pembelajaran Mesin Datumbox sekarang open-source dan bebas untuk Download. Lihatlah paket com.datumbox.framework.machinelearning.clustering untuk melihat implementasi Model Campuranch Prosesch Dirichlet di Jawa.

Implementasi Model Campuranch Proses Dirichlet di Jawa

Kode mengimplementasikan Model Campuran Prosesch Dirichlet dengan Gibbs Sampler dan menggunakan Apache Commons Math 3.3 sebagai perpustakaan matriks. Ini dilisensikan di bawah GPLv3 sehingga merasa bebas untuk menggunakannya, memodifikasinya dan mendistribusikannya kembali secara bebas dan Anda dapat mengunduh implementasi Java dari Github. Perhatikan bahwa Anda dapat menemukan semua bagian teoretis dari metode pengelompokan dalam 5 artikel sebelumnya dan komentar Javadoc yang terperinci untuk implementasi dalam kode sumber.

Di bawah ini kami mencantumkan deskripsi tingkat tinggi pada kode:

1. kelas DPMM

DPMM adalah kelas abstrak dan bertindak seperti basis untuk berbagai model yang berbeda, mengimplementasikan Proses Restoran Cina dan berisi Sampler Gibbs yang runtuh. Ini memiliki cluster metode publik () yang menerima dataset sebagai Daftar Poin dan bertanggung jawab untuk melakukan analisis cluster. Metode berguna lainnya dari kelas adalah getPointAssignments () yang digunakan untuk mengambil tugas klaster setelah pengelompokan selesai dan getClusterList () yang digunakan untuk mendapatkan daftar klaster yang teridentifikasi. DPMM berisi Cluster kelas abstrak bertingkat statis; ini berisi beberapa metode abstrak tentang pengelolaan poin dan estimasi pdf posterior yang digunakan untuk estimasi tugas cluster.

2. kelas GaussianDPMM

GaussianDPMM adalah implementasi dari Model Campuran Normal Dirichlet Multivariate dan memperluas kelas DPMM. Ini berisi semua metode yang diperlukan untuk memperkirakan probabilitas berdasarkan asumsi Gaussian. Selain itu berisi Cluster kelas bersarang statis yang mengimplementasikan semua metode abstrak dari kelas DPMM.Cluster.

3. Kelas MultinomialDPMM

MultinomialDPMM mengimplementasikan Model Campuran Dirichlet-Multinomial dan memperluas kelas DPMM. Demikian pula dengan kelas GaussianDPMM, itu berisi semua metode yang diperlukan untuk memperkirakan probabilitas di bawah asumsi Multinomial-Dirichlet dan berisi Cluster kelas bersarang statis yang mengimplementasikan metode abstrak DPMM.Cluster.

4. kelas SRS

Kelas SRS digunakan untuk melakukan Simple Random Sampling dari tabel frekuensi. Ini digunakan oleh Gibbs Sampler untuk memperkirakan tugas cluster baru di setiap langkah dari proses iteratif.

5. Poin kelas

Kelas Point berfungsi sebagai tuple yang menyimpan data catatan beserta idnya.

6. Lib Matematika Apache Commons

Apache Commons Math 3.3 lib digunakan untuk perkalian Matrix dan itu adalah satu-satunya ketergantungan dari implementasi kami.

7. Kelas DPMMExample

Kelas ini berisi contoh bagaimana menggunakan implementasi Java.

Menggunakan implementasi Java

Pengguna kode dapat mengkonfigurasi semua parameter dari model campuran, termasuk jenis model dan hyperparameter. Dalam cuplikan kode berikut, kita dapat melihat bagaimana algoritma diinisialisasi dan dijalankan:

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

Di bawah ini kita dapat melihat hasil menjalankan algoritma pada dataset sintetis yang terdiri dari 300 titik data. Poin awalnya dihasilkan oleh 3 distribusi yang berbeda: N ([10,50], I), N ([50,10], I) dan N ([150,100], I).

sebar1
Gambar 1: Plot sebar dataset demo

Algoritma setelah berjalan selama 10 iterasi, mengidentifikasi 3 pusat cluster berikut: [10.17, 50.11], [49.99, 10.13] dan [149.97, 99.81]. Akhirnya karena kami memperlakukan semuanya dengan cara Bayesian, kami tidak hanya dapat memberikan estimasi titik tunggal dari pusat cluster tetapi juga distribusi probabilitas mereka dengan menggunakan rumus persamaan.

scatterplot2-peta panas
Gambar 2: Plot sebar probabilitas pusat-pusat cluster

Pada gambar di atas kami merencanakan probabilitas tersebut; area merah menunjukkan probabilitas tinggi sebagai pusat cluster dan area hitam menunjukkan probabilitas rendah.

Untuk menggunakan implementasi Java dalam aplikasi dunia nyata Anda harus menulis kode eksternal yang mengubah dataset asli Anda ke dalam format yang diperlukan. Selain itu kode tambahan mungkin diperlukan jika Anda ingin memvisualisasikan output seperti yang kita lihat di atas. Akhirnya perhatikan bahwa perpustakaan Apache Commons Math termasuk dalam proyek dan dengan demikian tidak diperlukan konfigurasi tambahan untuk menjalankan demo.

Jika Anda menggunakan implementasi dalam proyek yang menarik, silakan hubungi kami dan kami akan menampilkan proyek Anda di blog kami. Juga jika Anda menyukai artikel ini, silakan luangkan waktu dan bagikan di Twitter atau Facebook.

Stempel Waktu:

Lebih dari kotak data