- Temmuz 7, 2014
- Vasilis Vryniotis
- . 1 yorum
Ö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).
Ş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 .
Ş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.
- AI
- yapay zeka
- AI sanat üreteci
- yapay zeka robotu
- yapay zeka
- yapay zeka sertifikası
- yapay zeka robotu
- yapay zeka robotları
- yapay zeka yazılımı
- blockchain
- blockchain konferans ai
- zeka
- konuşma yapay zekası
- kripto konferans ai
- dal-e
- Veri kutusu
- derin öğrenme
- google ai
- makine öğrenme
- Makine Öğrenimi ve İstatistikler
- Platon
- plato yapay zekası
- Plato Veri Zekası
- Plato Oyunu
- PlatoVeri
- plato oyunu
- Programlama
- ölçek ai
- sözdizimi
- zefirnet