R-Studio ile k-means cluster analizi




R-Studio ile k-means kümeleme analizi


K-means cluster analizi veya türkçe tercümesi ile k-ortalama ile kümeleme analizi, özellik çıkarmada(feature extraction) ve veri madenciliğinde oldukça ihtiyaç duyulan bir yöntemdir. Kümeleme analizi ile birden fazla özelliğe  (biz bunlara değişken -variable- diyoruz) sahip verilerin gruplanabilmesini amaçlıyoruz. 


Verilerin Yüklenmesi

İlk önce çalışacağımız veri dosyasını yüklüyoruz(/R dizinindeki disli.csv dosyası):
>disli = read.csv("~/R/disli.csv")
Konsolda sağ üst panelde çalışma dosyaları listelenir. Veri dosyasının özellikleri gözlem(observation) ve değişken(variable) özet olarak gösterilir.Çift tıklandığında sol üst panele veriler çıkar.

Bu çalışmamızda  dişli düzeneğinden elde ettiğimiz 500 adet frekans verisi bulunmaktadır. Veriler x ve y boyutundan olmak üzere iki değişkenlidir. Amacımız verileri sağlam ve kırık dişli verisi olarak  gruplamaktır.



R-Studio konsolunun bir görüntü.



k-ortalama kümeleme

Verimizi okuttuktan sonra, kmeans komutu ile kümeleme analizi yapabiliriz:
>sonuclar <- kmeans(disli,2)
k-means komutundaki ilk parametre dosya ismini, diğeri ise kaç gruba ayrılacağını belirtiyor. Burada iki grup olduğunu düşünüyoruz. Analiz sonucunu ise sonuclar isimli dosyaya aktaracağız.
>sonuclar
ile  çözümü görebiliriz:

K-means clustering with 2 clusters of sizes 354, 146

Cluster means:
           x             y
1  0.1543286  0.0176818814
2 -0.3587966 -0.0003413425

Clustering vector:
  [1] 1 1 1 1 1 1 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 1 2
 [45] 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 1 2 1 2 1 1 1 1 1 1 1 1 1 1 1 1
 [89] 1 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 2 2 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2
[133] 2 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 1 1 1 1
[177] 1 1 1 1 1 1 1 1 1 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2
[221] 1 2 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 1 2 1 1 2 1 1 1 1 2 1 1 1 2 2
[265] 2 2 2 1 2 1 1 1 1 2 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 1 1 1 1 1 1 1 1 1 2 2
[309] 2 2 1 1 1 1 1 1 1 1 2 1 1 2 2 2 1 1 1 1 1 1 1 2 1 1 1 1 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 2
[353] 2 2 1 1 2 1 1 1 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 2 1 1 1 2 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1
[397] 2 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 2 2 1 2 1 1 1 1 1 2 1 1 2 2
[441] 2 2 1 2 1 1 1 1 1 1 2 1 1 1 2 2 2 1 1 1 1 1 1 1 2 2 1 2 2 2 2 1 2 1 1 1 1 2 1 1 2 1 2 1
[485] 2 2 1 2 1 2 1 1 1 1 2 1 1 2 2 2

Within cluster sum of squares by cluster:
[1] 25.77088  8.67462
 (between_SS / total_SS =  44.2 %)

Sonuçların yorumlanması


Başta iki grup olduğunu söylemiştik. Sonuçlara göre gözlemin 354 tanesi bir gruba 146 tanesi ise diğer gruba ait olacak şekilde 2 grup oluşturuldu.

K-means clustering with 2 clusters of sizes 354, 146

Grup ortalamalarımız:

Cluster means:
           x             y
1  0.1543286  0.0176818814

2 -0.3587966 -0.0003413425

şeklindedir. Bir sonraki vektörde gözlemlerin hangi gruba ait olduğu verilmektedir. Mesela 1. gözlem birinci grupta iken 485. gözlem ikinci gruptadır.

> plot(disli[c("x","y")],col = sonuclar$cluster)
ile sonuçları sağ alttaki panelde grafik olarak görebiliriz:




















Değerlendirme

Oldukça basit gözüküyor değil mi?

Fakat burada hem veriler hazırdı, hem de hangi analizlerin yapılacağını biliyorduk. Tabii R-studio programına da biraz aşina olduğumuzu varsayıyoruz. Gerçek hayat her zaman böyle değildir. Özellikle hem komutu çalıştırırken hem de analiz için şu konulara dikkat edilmesi gereklidir:

  • k-means kümeleme analizi için verilerin hazır olması gerekir. Veri içerisinde geçersiz (alfanumerik, sonsuz vb) olmaması gerekir. Dolayısı ile verileri analiz için ayıklanması düzenlenmesi gerekecektir. Aksi halde kod hata verecektir. Bunlarla ilgili detayları blogumuzun ilgili kısımlarında açıklamaya çalışacağım.
  • k-means kümeleme analizinin yinelemeli bir algoritma olduğunu hatırlatayım. Her kod çalışmasında değişik sonuçlar elde edilebilir. Bu normaldir.





Yorumlar