Java PlatoBlockchain Veri Zekasında Dirichlet Süreç Karışım Modeli ile Kümeleme. Dikey Arama. Ai.

Java'da Dirichlet İşlem Karışımı Modeli ile Kümeleme

Önceki yazılarımızda detaylı olarak tartışmıştık. Dirichlet Proses Karışım Modelleri ve bunların kümeleme analizinde nasıl kullanılabileceği. Bu yazımızda Java'nın bir uygulamasını sunacağız. iki farklı DPMM modeli: Gauss verilerini kümelemek için kullanılabilen Dirichlet Çok Değişkenli Normal Karışım Modeli ve belgeleri kümelemek için kullanılan Dirichlet-Multinomial Karışım Modeli. Java kodu GPL v3 lisansı altında açık kaynaklıdır ve şu adresten ücretsiz olarak indirilebilir: Github.

Güncelleme: Datumbox Machine Learning Framework artık açık kaynak kodlu ve ücretsiz indir. Java'da Dirichlet Proses Karışım Modellerinin uygulanmasını görmek için com.datumbox.framework.machinelearning.clustering paketini inceleyin.

Java'da Dirichlet Süreç Karışım Modeli uygulaması

Kod, Gibbs Sampler ile Dirichlet Süreç Karışım Modelini uygular ve matris kitaplığı olarak Apache Commons Math 3.3'ü kullanır. GPLv3 kapsamında lisanslıdır; bu nedenle kullanmaktan, değiştirmekten ve yeniden dağıtmaktan çekinmeyin; Java uygulamasını şuradan indirebilirsiniz: Github. Kümeleme yönteminin tüm teorik kısımlarını önceki 5 makalede ve uygulama için ayrıntılı Javadoc yorumlarını kaynak kodda bulabileceğinizi unutmayın.

Aşağıda kodun üst düzey açıklamasını listeliyoruz:

1.DPMM sınıfı

DPMM soyut bir sınıftır ve çeşitli farklı modeller için bir temel görevi görür. Çin Restoranı Süreci ve içerir Daraltılmış Gibbs Örnekleyici. Veri kümesini Nokta Listesi olarak alan ve küme analizinin gerçekleştirilmesinden sorumlu olan genel küme() yöntemine sahiptir. Sınıfın diğer yararlı yöntemleri, kümeleme tamamlandıktan sonra küme atamalarını almak için kullanılan getPointAssignments() ve tanımlanan kümelerin listesini almak için kullanılan getClusterList() yöntemidir. DPMM, statik iç içe geçmiş soyut sınıf Cluster'ı içerir; noktaların yönetimi ve küme atamalarının tahmininde kullanılan son pdf'nin tahminine ilişkin çeşitli soyut yöntemler içerir.

2. GaussianDPMM sınıfı

GaussianDPMM, Dirichlet Çok Değişkenli Normal Karışım Modelinin uygulanmasıdır ve DPMM sınıfını genişletir. Gauss varsayımı altında olasılıkları tahmin etmek için gerekli olan tüm yöntemleri içerir. Ayrıca DPMM.Cluster sınıfının tüm soyut yöntemlerini uygulayan statik iç içe geçmiş Cluster sınıfını da içerir.

3. Çok terimliDPMM sınıfı

MultinomialDPMM, Dirichlet-Multinomial Karışım Modelini uygular ve DPMM sınıfını genişletir. GaussianDPMM sınıfına benzer şekilde, Multinomial-Dirichlet varsayımı altında olasılıkları tahmin etmek için gereken tüm yöntemleri içerir ve DPMM.Cluster'ın soyut yöntemlerini uygulayan statik iç içe geçmiş Cluster sınıfını içerir.

4.SRS sınıfı

SRS sınıfı, bir frekans tablosundan Basit Rastgele Örnekleme gerçekleştirmek için kullanılır. Yinelemeli sürecin her adımındaki yeni küme atamalarını tahmin etmek için Gibbs Sampler tarafından kullanılır.

5. Puan sınıfı

Point sınıfı, kaydın verilerini kimliğiyle birlikte saklayan bir demet görevi görür.

6. Apache Commons Matematik Kütüphanesi

Apache Commons Math 3.3 lib'i Matrix çarpımları için kullanılır ve uygulamamızın tek bağımlılığıdır.

7.DPMMörnek sınıfı

Bu sınıf Java uygulamasının nasıl kullanılacağına dair örnekler içerir.

Java uygulamasını kullanma

Kodun kullanıcısı, model türleri ve hiperparametreler dahil olmak üzere karışım modellerinin tüm parametrelerini yapılandırabilir. Aşağıdaki kod parçacığında algoritmanın nasıl başlatıldığını ve yürütüldüğünü görebiliriz:

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

Aşağıda algoritmanın 300 veri noktasından oluşan sentetik bir veri seti üzerinde çalıştırılmasının sonuçlarını görebilirsiniz. Noktalar orijinal olarak 3 farklı dağılımla oluşturuldu: N([10,50], I), N([50,10], I) ve N([150,100], I).

dağılım grafiği1
Şekil 1: Demo veri kümesinin Dağılım Grafiği

Algoritma 10 yineleme çalıştırdıktan sonra şu 3 küme merkezini belirledi: [10.17, 50.11], [49.99, 10.13] ve [149.97, 99.81]. Son olarak her şeyi Bayes yaklaşımıyla ele aldığımız için, küme merkezlerinin yalnızca tek nokta tahminlerini değil aynı zamanda olasılık dağılımlarını da kullanarak küme merkezlerinin tahminlerini sağlayabiliyoruz. formül denklem.

scatterplot2-ısı haritası
Şekil 2: Küme merkezlerinin olasılıklarının dağılım grafiği

Yukarıdaki şekilde bu olasılıkları çiziyoruz; kırmızı alanlar bir kümenin merkezi olma olasılığının yüksek olduğunu, siyah alanlar ise düşük olasılığı belirtir.

Java uygulamasını gerçek dünya uygulamalarında kullanmak için, orijinal veri kümenizi gerekli formata dönüştüren harici kod yazmanız gerekir. Ayrıca çıktıyı yukarıda gördüğümüz gibi görselleştirmek istiyorsanız ek kod gerekebilir. Son olarak Apache Commons Math kütüphanesinin projeye dahil edildiğini ve dolayısıyla demoları çalıştırmak için herhangi bir ek konfigürasyona gerek olmadığını unutmayın.

Uygulamayı ilginç bir projede kullanırsanız bize yazın, projenizi blogumuzda yayınlayalım. Ayrıca makaleyi beğendiyseniz, lütfen bir dakikanızı ayırın ve Twitter veya Facebook'ta paylaşın.

Zaman Damgası:

Den fazla Veri kutusu