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ı):
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.
>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ü.
Verimizi okuttuktan sonra, kmeans komutu ile kümeleme analizi yapabiliriz:
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 %)
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.
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-ortalama kümeleme
>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.
>sonuclarile çö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
Yorum Gönder