25 Nisan 2016 Pazartesi

Python - Hiyerarşik Kümeleme

Bir veriyi kümelere ayırmak basit olarak birbirine benzer olan elemanları aynı grupta toplama işlemidir (Neye göre benzer bu önemli!). Kümelere ayırma işlemi için kullanılan en yaygın ve basit algoritma k-means algoritmasıdır. Bu algoritma girdi olarak belirtilen (k) adet küme için farklı merkez koordinatlar seçerek, bir iterasyon dahilinde ilgili kümeye en yakın elemanların eklenmesi suretiyle küme merkezlerinin yerleri değişmeyene kadar tüm elemanların bir kümeye atanması mantığına göre çalışır. Bu yöntemde (k) küme sayısının baştan belirlenmesi gerekmektedir. Fakat çeşitli uygulamalarda veriler gruplara ayrılırken birbirlerine benzer olan kaç küme olduğu/olabileceği her zaman bilinemeyebilir. Bu gibi durumlarda hiyerarşik kümelemeyi kullanmak daha mantıklı olacaktır. 

Hiyerarşik kümelemede iki farklı yaklaşım kullanılabilir. Bunlar; tüm elemanlar tek bir küme gibi düşünülüp kümeleri ayırarak farklı kümeler oluşturmak veya her bir elemanı başlangıçta bir küme kabul edip birbirlerine benzer olan kümeleri tek bir küme altında toplamaktır. Python kullanarak gerçekleştireceğimiz uygulamada ikinci yaklaşımı kullanılmıştır. Zaten her iki yaklaşım da sonuç olarak aynı kapıya çıkacaktır.

Hiyerarşik kümeleme için ilk olarak veri setini oluşturan her bir elemanın ( herhangi bir bilgiyi içeren vektör olabilir, görüntü olabilir ...vs ) birbirleri arasındaki benzerliği/mesafeyi ölçmek ve bunu bir matriste saklamak gerekmektedir. Örneğin; N adet veriyi kümelere ayırmak istediğimizde, bu işlem sonucunda NxN lik bir distance_matrix elde etmiş olacağız. Verilerin birbirleri arasındaki benzerliği ölçmek için birçok metrik kullanılabilir, bu verinin içeriğine ve yapılacak olan uygulamaya göre değişkenlik gösterebilir. Bu ilk aşamadan yani distance_matrix i oluşturduktan sonra yapılacak iş birbirine benzer iki eleman tek bir küme oluşturacak şekilde tüm elemanları bir eleman ile eşleştirip yeni kümeler oluşturmak ve oluşan bu kümelerin de birbirleri arasındaki mesafeleri hesaplayıp tekrar yeni bir distance matrix oluşturmaktır. Bu işlem tekrarlanarak tüm elemanlar tek bir küme altında toplanana dek devam edildiğinde, bir ağaç yapısı şeklinde birbirine benzer elemanlar bir kümede toplanmış olacaktır. Bu işlem yapılırken önemli olan birleştirilen kümelerin birbirlerine olan uzaklıklarını hesaplamaktır. Bunun için çeşitli yöntemler bulunmaktadır ve bunlar linkage strategies olarak isimlendirilir. Seçilecek herhangi bir stratejiye göre hiyerarşik kümeleme yapıldığında birbirinden farklı ağaç yapıları oluşabilir. Kullanılabilecek bazı birleştirme stratejileri şunlardır;




1 Nisan 2016 Cuma

Python - Görüntüde Entropi Hesaplanması


Bilgi teorisinde p(x) olasılık yoğunluk fonksiyonuna sahip X rastgele değişkeninin entropisi şu şekilde tanıımlanır;


Görüntüde entropi değeri hesaplanırken ise p(x) olasılık fonksiyonu yerine, piksel olasılık değerleri kullanılır. Bunun için görüntüdeki piksel değerlerinin dağılımını veren histogramın hesaplanması gerekmektedir. Örnek görüntü ve hesaplanan histogram grafiği aşağıda verilmiştir.