Ana içeriğe atla

Python - K-Means Kümeleme

K-Means’in amacı, farklı kümelerdeki noktalar benzer olmamakla birlikte bir küme içindeki noktalar benzer olacak şekilde veri noktaları grupları oluşturmaktır.


K-means kümelemesine ilişkin adımlar şunlardır:

 1. K centroid’leri tanımlanır. Bunları rastgele olarak başlar(daha etkili bir şekilde yakınsaklaşan merkezlerin başlatılması için meraklı algoritmalar da vardır).

 2. En yakın centroid ve güncelleme kümesi atamalarını bulunur. Her veri noktasını k kümelerinden birine atanır. Her veri noktası en yakın centroid kümesine atanır. Burada, “yakınlık” ölçütü bir hiperparametre, genellikle Öklid mesafesidir.

 3. Merkezleri kümelerin ortasına getirilir. Her bir merkezin yeni konumu, kümesindeki tüm noktaların ortalama konumu olarak hesaplanır.

Her bir yinelemede(iterasyonda) ağırlık merkezi durana kadar (yani, algoritma yakınsamış oluncaya kadar) 2. ve 3. adımları tekrarlanır.


Gözetimsiz öğrenme metodlarında USArrest verisini kullanacağım. Veride Amerika’daki eyaletler bazında suç istatistikleri bulunmaktadır. Verinin içinde eyalet bilgilerinin yanı sıra suç tipleri “Murder, Assault, Rape” olarak sınıflandırılmış ve nüfus bilgilerine de “Urbanpop” değişkeninde yer verilmiştir.


Eyalet bilgisinin bulunduğu “Unnamed” sütunu değişken olarak tanımlandığı için bunu indekse çevirmem gerekiyor.


Sonrasında veri setini incelemeye başlıyorum. İlk olarak değişkenlerin içinde boş değer var mı diye kontrol ettikten sonra numerik değişkenlerin istatistiki özelliklerine bakıyorum.


Şimdi değişkenlerin kendi içindeki özelliklerini daha iyi anlamak için veriyi görselleştiriyorum.


Model aşamasına geçiyorum. Kmeans algoritması için kullanacağım modülü indiriyorum. Daha sonra örnek olması için küme sayımı 4 olarak belirliyorum. Modeli fit ettikten sonra her bir gözlemin hangi kümeye ait olduğu bilgisini getiriyorum.


Veriyi görselleştirdiğimde daha kolay anlaşılabilmesi için küme sayısını 2’ye çekiyorum ve veriyi görselleştiriyorum. Burada 2 küme olunca dağılımının nasıl olacağını görüyorum. Ayrıca, yuvarlak gri noktalar sayesinde küme merkezlerinin nerede olduğunu da görüyorum.


Şimdi ise veriyi 3 boyutlu olarak inceleyeceğim. Bu sefer küme sayımı 3 yapıyorum.


Küme merkezlerini ise yıldız işareti ile gösteriyorum.


Veriyi görselleştirdim ama gözlem değerlerinin hangi kümeye ait olduğunu bilgisinin orijinal veri setine eklenmesini istiyorum. Bunun için yine modeli kurduktan ve fit ettikten sonra elde edilecek değeri bir pandas data frame olarak tanımlıyorum ve değişken olarak veri setime ekliyorum.


Son olarak K-Elbow yöntemiyle optimum k sayısının belirlenmesine geçiyorum. Burada k değerinin 2 ile 50 arasındaki değerler için değerlendirilip bana optimum küme sayısını vermesini istiyorum ve sonuç 8 çıkıyor. 


K-means algoritması özellikle segmentasyon konusunda sıkça kullanılmakla birlikte, sadece model çıktısı üzerinden ilerlemeyip iş bilgisinden de faydalanılması gerektiğini belirterek analizimi bitiriyorum.

Yorumlar