Matematiği ve Python Uygulamasıyla: Gaussian Mixture Model

Emircan Sarıtaş
KaVe

--

Birçok veri seti Gauss Dağılımıyla modellenebilir. Bu nedenle, verisetlerindeki kümelerin farklı Gauss Dağılımlarından geldiğini varsaymak oldukça olağandır. Yani GMM, verisetini ,normallik varsayımı altında, k-adet Gauss Dağılımının bir karışımı olarak açıklanan modeldir. Bu modelin ana fikri budur.

Açmak gerekirse verilen örneklerin kaynaklarının k-adet Gauss dağılımı olduğunu varsayıp, bu kaynaklara ait Gauss parametrelerinin, karışımın olasılık yoğunluk işlevini maksimize edecek optimizasyonudur. Böylece, verisetinin tek dağılımdan üretildiğinin varsayılıp modelleme yapan algoritmaların çıkmaza girdiği yerlerde bile GMM başarılıdır.

Gaussian Mixture Model yapılabilecek en kısa tabirle Gauss dağılımını baz alan bir Unsupervised(denetimsiz) kümeleme algoritmasıdır.

GMM’in en önemli özellikleri;

  • Olasılık temelli yaklaşımı verisetindeki her örneğin tüm kümelere aidiyet olasılığını verir
  • Çok kullanılan kümeleme algoritmaları gibi (örn: k-means) kümelemeyi dairesel yapmaz. Kümeler daha çok elipse yatkındır.
Bu örnekte k-means ile GMM arasındaki kümeleme farkını açıkça görebilirsiniz.[1]

Üstteki formül n-adet Gauss Dağılımından oluşan Mixture modelin olasılık yoğunluk fonksiyonudur. w parametresi, örneğin tüm Gauss dağılımlarına ait ağırlığıdır.

Modelde k-adet küme olduğunu varsayalım. k-adet kümenin her biri için ayrı ayrı ortalama ve varyansa sahip olmamız gerekmekte. Bu değerlere “Maksimum Olabilirlik Çıkarımı” ile ulaşmamız lazım. Fakat bu yaklaşım, çözümü analitik olmayan durumlarda yetersizdir. Bu yüzden Beklenti-Maksimizasyon (EM) Algoritması kullanılır.

Beklenti-Maksimizasyon (EM) Algoritması

Beklenti-Maksimizasyon (EM) algoritması, eksik gözlemler veya örneklemin bazı gizli değişkenleri olduğunda, parametreler için maksimum olabilirlik tahminlerini bulan yinelemeli bir algoritmadır. Yinelemeli bir algoritma olamsından dolayı aynı zamanda analitik bir çözüme ulaşılamayan sorunlarda kullanılabilmektedir.

Beklenti Maksimizasyon algortimasındaki amaç, P(X|ϴ) olasılığını ϴ’ya göre maksimize etmektir. (P(X|ϴ) == P(X1,X2|ϴ), X, bağımsız örnekler, X2 eksik gözlemler, ϴ ise [μ,Σ,ω] matrisidir). Formüle göre ϴ parametresi için yapılan yapılan çıkarsamalarla P(X|ϴ) maksimize edilir.

Beklenti Maksimizasyon algoritması iki temel adımlıdır:

1- Beklenti adımı: Q(θ|θm-1)=Epθm-1(X1|X2){log pθ(X1,X2)}

  • k-adet küme için gelişinden güzel ortalama ve varyanslarla, bilinmeyen veri ile ilgili en iyi olasılıklar tahmin edilir. tüm veri log olabilirliğinin log 𝑝𝜃(𝑋, 𝑌), gizli değişkenlerin koşullu olasılık yoğunluk fonksiyonuna göre( 𝑝𝜃𝑚−1 (𝑋|𝑌) ) beklentisi hesaplanır. Koşullu olasılık fonksiyonu parametrelerin son tahmini olan ve bir önceki iterasyonda hesaplanan 𝜃𝑚−1 parametre değerleri kullanılarak hesaplanır.

2- Maksimizasyon Adımı: θm= argmaxθQ(θ|θm-1)

  • Tahmin edilen kayıp değer yerine konulup, veri üzerinden maksimum olabilirlik hesaplanarak parametrelerin yeni kestirimleri elde edilir. Verinin ve Gizli Değişkenin dağılımını en büyükleyecek şekilde parametrelerin güncellenmesi gerçeklenir.

Algoritma bir 𝜃m-1 değeri ile başlar, bu başlangıç değeri ya gelişinden güzel seçilir yada diğer kümeleme algoritmalarından yardım alınarak belirlenir. Bu adımlar belirli bir kriter sağlanana ya da maksimum iterasyon sayısına ulaşılana kadar ardışık olarak gerçekleştirilir

Örnek Kullanımlar

  • Finans modellemeleri
  • Konut fiyatlaması
  • El yazı tanıma
  • Ses sınıflandırma/ tanıma
  • Fuzzy image segmentation

Şimdi yararlandığım kaynaklardan birindeki örneği uygulayıp alıştırma yapalım.

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
import seaborn as sns

from sklearn.datasets.samples_generator import make_blobs
from sklearn.mixture import GaussianMixture
sns.set()

Gerekli kütüphanelerimizi indirdik. Bir sonraki aşamamız olan datasetimizi oluşturalım ve gerekli küme sayımızı öğrenmek için Akaike ve Bayes Bilgi Kriterlerini kullanalım. Akaike ve Bayes Bilgi Kriterlerinin ikisinide aynı anda minimum olduğu değer bizim için en iyi küme sayımızı verir.

X, y = make_blobs(n_samples=80, centers=20, cluster_std=0.8)
plt.scatter(X[:,0], X[:,1])
n_components = np.arange(1, 25)
models = [GaussianMixture(n, covariance_type='full', random_state=0).fit(X) for n in n_components]
plt.plot(n_components, [m.bic(X) for m in models], label='BIC')
plt.plot(n_components, [m.aic(X) for m in models], label='AIC')
plt.legend(loc='best')
plt.xlabel('n_components');

Oluşturduğumuz örnek için 6' ya yakın bir değer çıktı. Modelimizi kurup, 6 küme için eğitelim.

gmm =
(GaussianMixture(n_components=6,covariance_type='full',random_state=0)
gmm.fit(X)
gmm_model = gmm.predict(X)
plt.scatter(X[:, 0], X[:, 1], c=gmm_model, cmap='viridis');

ve GMM’ in bahsetiğimiz en tatlı özelliği olan her bir örneğin tüm kümelere aidiyet olasılıkları:

probs = gmm.predict_proba(X)
prob_table =pd.DataFrame(data=probs)
prob_table.head()

Okuduğunuz için teşekkür ederim. Birdahaki yazılarda görüşmek üzere.

KAYNAKLAR

[1] Gaussian Mixture Models Clustering Algorithm Explained

[2] GAUSS KARIŞIM MODELLERİ KULLANILARAK SES İMZALARININ SINIFLANDIRILMASI

[3] ETHEM ALPAYDIN — YAPAY ÖĞRENME / Bölüm 7: Öbekleme , s.117–127

--

--