K-Means

Dün biri bana "şirkette yazdığım en karmaşık algoritma k-means yea" diye hava attı. Düşündüm de şimdiki işimde kullandığım en karmaşık algoritma DFS. O da abuk subuk bir yerde. Altta kalmamak için ben de k-means yazayım neyim eksik dedim :) .

K-means bir çeşit sıkıştırma algoritması olarak da kullanılabiliyor, Bishop'un kitabında örneği de var. Eğer bir resmi k-means ile sıkıştırmak istiyorsak standart k-means'i pikseller üzerinde tek boyutta uygulayabiliriz. Yanlış hatırlamıyorsam Bishop kitabında her bit için uyguluyordu, sadece 3 renk için uygulamak daha kolayıma geldi :) .

Elimizdeki resim şu olsun (kaynak);

ironman

K=2 ile sıkıştırdığımızda elimizdeki resim aşağıdaki gibi olacak;

ironman_k_2

K arttıkça resmin orijinale yaklaşmasını bekliyoruz. K=5 ile sıkıştırdığımızdaysa resim aşağıdaki gibi olacak;

ironman_k_5

Ben kendime C#'ta k-means yazmadı dedirtmem! :) (Bu arada cidden Python'daki list comprehension'lar hayat kurtarıyormuş, bir kez daha anlamış oldum).