K-Means Kümeleme, makine öğrenimi veya veri bilimindeki kümeleme problemlerini çözmek için kullanılan denetimsiz bir öğrenme algoritmasıdır. Bu konu başlığımızda K-means kümeleme algoritmasının ne olduğunu, algoritmanın nasıl çalıştığını ve k-means kümelemenin Python uygulamasını öğreneceğiz.
K-Ortalama Algoritması Nedir?
K-Means Kümelemesi bir Denetimsiz Öğrenme algoritması etiketlenmemiş veri kümesini farklı kümeler halinde gruplandıran. Burada K, süreçte oluşturulması gereken önceden tanımlanmış kümelerin sayısını tanımlar; K=2 ise iki küme olacak ve K=3 için üç küme olacak vb.
Etiketlenmemiş veri kümesini, her veri kümesi benzer özelliklere sahip yalnızca bir gruba ait olacak şekilde k farklı kümeye bölen yinelemeli bir algoritmadır.
Verileri farklı gruplar halinde kümelememize ve etiketlenmemiş veri setindeki grupların kategorilerini herhangi bir eğitime ihtiyaç duymadan kendi başına keşfetmemize olanak tanır.
Her kümenin bir merkezle ilişkilendirildiği merkez tabanlı bir algoritmadır. Bu algoritmanın temel amacı, veri noktası ile karşılık gelen kümeler arasındaki mesafelerin toplamını en aza indirmektir.
Algoritma, etiketlenmemiş veri kümesini girdi olarak alır, veri kümesini k sayıda kümeye böler ve en iyi kümeyi bulana kadar işlemi tekrarlar. Bu algoritmada k değerinin önceden belirlenmiş olması gerekir.
k-anlamına gelir kümelenme algoritma esas olarak iki görevi yerine getirir:
roma rakamları 1 100
- Yinelemeli bir süreçle K merkez noktası veya ağırlık merkezi için en iyi değeri belirler.
- Her veri noktasını en yakın k-merkezine atar. Belirli k-merkezine yakın olan veri noktaları bir küme oluşturur.
Dolayısıyla her kümenin bazı ortak noktalara sahip veri noktaları vardır ve diğer kümelerden uzaktadır.
Aşağıdaki diyagram K-ortalama Kümeleme Algoritmasının çalışmasını açıklamaktadır:
K-Means Algoritması Nasıl Çalışır?
K-Means algoritmasının çalışması aşağıdaki adımlarla anlatılmaktadır:
Aşama 1: Küme sayısına karar vermek için K sayısını seçin.
Adım 2: Rastgele K noktaları veya ağırlık merkezleri seçin. (Giriş veri kümesinden farklı olabilir).
Aşama 3: Her veri noktasını, önceden tanımlanmış K kümelerini oluşturacak en yakın merkez noktasına atayın.
Adım-4: Varyansı hesaplayın ve her kümenin yeni bir ağırlık merkezini yerleştirin.
Adım 5: Üçüncü adımları tekrarlayın; bu, her veri noktasını her kümenin yeni en yakın merkez noktasına yeniden atamak anlamına gelir.
Adım-6: Herhangi bir yeniden atama meydana gelirse, 4. adıma gidin, aksi halde BİTİR'e gidin.
Adım-7 : Model hazır.
Yukarıdaki adımları görsel grafikleri dikkate alarak anlayalım:
M1 ve M2 adlı iki değişkenimiz olduğunu varsayalım. Bu iki değişkenin x-y ekseni dağılım grafiği aşağıda verilmiştir:
- Veri setini tanımlamak ve bunları farklı kümelere yerleştirmek için k sayıda kümeyi yani K=2'yi alalım. Bu, burada bu veri kümelerini iki farklı kümede gruplamaya çalışacağımız anlamına geliyor.
- Kümeyi oluşturmak için rastgele k nokta veya ağırlık merkezi seçmemiz gerekiyor. Bu noktalar veri setindeki noktalar olabileceği gibi başka herhangi bir nokta da olabilir. Yani burada veri setimizin parçası olmayan aşağıdaki iki noktayı k nokta olarak seçiyoruz. Aşağıdaki görüntüyü göz önünde bulundurun:
- Şimdi dağılım grafiğinin her veri noktasını en yakın K noktasına veya ağırlık merkezine atayacağız. İki nokta arasındaki mesafeyi hesaplamak için çalıştığımız bazı matematikleri uygulayarak bunu hesaplayacağız. Böylece her iki ağırlık merkezi arasına bir medyan çizeceğiz. Aşağıdaki görüntüyü göz önünde bulundurun:
Yukarıdaki görüntüden, çizginin sol tarafındaki noktaların K1 veya mavi merkez noktasına yakın olduğu ve çizginin sağındaki noktaların sarı merkez noktasına yakın olduğu açıktır. Net görsellik için bunları mavi ve sarı olarak renklendirelim.
- En yakın kümeyi bulmamız gerektiğinden seçim yaparak işlemi tekrarlayacağız. yeni bir merkez . Yeni ağırlık merkezlerini seçmek için bu ağırlık merkezlerinin ağırlık merkezini hesaplayacağız ve aşağıdaki gibi yeni ağırlık merkezleri bulacağız:
- Daha sonra, her veri noktasını yeni merkeze yeniden atayacağız. Bunun için aynı medyan çizgisi bulma işlemini tekrarlayacağız. Medyan aşağıdaki resimdeki gibi olacaktır:
Yukarıdaki görüntüden, bir sarı noktanın çizginin sol tarafında, iki mavi noktanın da çizginin sağında olduğunu görebiliriz. Yani bu üç nokta yeni merkezlere atanacak.
Yeniden atama gerçekleştiği için tekrar 4. adıma gideceğiz, yani yeni ağırlık merkezleri veya K noktaları buluyoruz.
- Ağırlık merkezlerinin ağırlık merkezini bularak işlemi tekrarlayacağız, böylece yeni ağırlık merkezleri aşağıdaki resimde gösterildiği gibi olacaktır:
- Yeni merkez noktalarına sahip olduğumuz için yine orta çizgiyi çizeceğiz ve veri noktalarını yeniden atayacağız. Yani görüntü şöyle olacak:
- Yukarıdaki görselde görmekteyiz; çizginin her iki tarafında da birbirine benzemeyen veri noktaları yoktur, bu da modelimizin oluşturulduğu anlamına gelir. Aşağıdaki görüntüyü göz önünde bulundurun:
Modelimiz hazır olduğuna göre artık varsayılan ağırlık merkezlerini kaldırabiliriz ve son iki küme aşağıdaki resimde gösterildiği gibi olacaktır:
K-ortalama Kümelemesinde 'K küme sayısı' değeri nasıl seçilir?
K-means kümeleme algoritmasının performansı, oluşturduğu yüksek verimli kümelere bağlıdır. Ancak en uygun küme sayısını seçmek büyük bir iştir. Optimum küme sayısını bulmanın bazı farklı yolları vardır ancak burada küme sayısını veya K değerini bulmanın en uygun yöntemini tartışıyoruz. Yöntem aşağıda verilmiştir:
Dirsek Yöntemi
Dirsek yöntemi, optimum küme sayısını bulmanın en popüler yollarından biridir. Bu yöntem WCSS değeri kavramını kullanır. WCSS anlamına gelir Küme İçi Kareler Toplamı , bir küme içindeki toplam varyasyonları tanımlar. WCSS değerini hesaplamak için kullanılan formül (3 küme için) aşağıda verilmiştir:
WCSS= ∑Pben Küme1'deyimmesafe(PBenC1)2+∑Pben Küme2'deyimmesafe(PBenC2)2+∑PCluster3'teyimmesafe(PBenC3)2Yukarıdaki WCSS formülünde,
∑Pben Küme1'deyimmesafe(PBenC1)2: Bir küme1 içindeki her bir veri noktası ile onun ağırlık merkezi arasındaki mesafelerin karelerinin toplamıdır ve diğer iki terim için de aynıdır.
Java için adlandırma kuralı
Veri noktaları ile ağırlık merkezi arasındaki mesafeyi ölçmek için Öklid mesafesi veya Manhattan mesafesi gibi herhangi bir yöntemi kullanabiliriz.
Kümelerin optimal değerini bulmak için dirsek yöntemi aşağıdaki adımları takip eder:
- Farklı K değerleri (1-10 arası) için belirli bir veri kümesi üzerinde K-ortalama kümelemesini yürütür.
- Her K değeri için WCSS değerini hesaplar.
- Hesaplanan WCSS değerleri ile küme sayısı K arasında bir eğri çizer.
- Eğimin keskin noktası veya grafiğin bir noktası bir kol gibi görünüyorsa bu nokta K'nın en iyi değeri olarak kabul edilir.
Grafik dirseğe benzeyen keskin kıvrımı gösterdiğinden dirsek yöntemi olarak bilinir. Dirsek yönteminin grafiği aşağıdaki resme benzer:
Not: Verilen veri noktalarına eşit küme sayısını seçebiliriz. Veri noktalarına eşit küme sayısını seçersek, WCSS'nin değeri sıfır olur ve bu, grafiğin bitiş noktası olur.
K-means Kümeleme Algoritmasının Python Uygulaması
Yukarıdaki bölümde K-means algoritmasını tartıştık, şimdi bunun kullanılarak nasıl uygulanabileceğini görelim. Python .
Uygulamaya geçmeden önce burada ne tür bir sorunu çözeceğimizi anlayalım. Yani, bir veri setimiz var Mall_Customers Bu, alışveriş merkezini ziyaret eden ve orada harcama yapan müşterilerin verileridir.
Verilen veri setinde, elimizde Customer_Id, Cinsiyet, Yaş, Yıllık Gelir ($) ve Harcama Puanı (Müşterinin AVM'de ne kadar harcadığının hesaplanan değeridir, değer ne kadar fazlaysa o kadar çok harcamıştır). Denetimsiz bir yöntem olduğu için bu veri kümesinden bazı kalıpları hesaplamamız gerekiyor, dolayısıyla tam olarak ne hesaplayacağımızı bilmiyoruz.
Uygulama için izlenecek adımlar aşağıda verilmiştir:
protein yağıdır
Adım-1: Veri ön işleme Adımı
İlk adım, daha önceki Regresyon ve Sınıflandırma konularımızda yaptığımız gibi, veri ön işlemesi olacaktır. Ancak kümelenme sorunu açısından diğer modellerden farklı olacaktır. Bunu tartışalım:
Önceki konularda yaptığımız gibi öncelikle veri ön işlemenin bir parçası olan modelimiz için kütüphaneleri içe aktaracağız. Kod aşağıda verilmiştir:
# importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd
Yukarıdaki kodda, dizi Matematik hesaplamasını gerçekleştirmek için içe aktardık, matplotlib grafiği çizmek içindir ve pandalar veri kümesini yönetmek içindir.
Daha sonra kullanmamız gereken veri setini içe aktaracağız. Yani burada Mall_Customer_data.csv veri setini kullanıyoruz. Aşağıdaki kod kullanılarak içe aktarılabilir:
# Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv')
Yukarıdaki kod satırlarını çalıştırarak veri kümemizi Spyder IDE'ye alacağız. Veri kümesi aşağıdaki resme benzer:
Yukarıdaki veri kümesinden bazı kalıplar bulmamız gerekiyor.
Burada veri ön işleme adımı için bir kümeleme problemi olduğu ve neyi belirleyeceğimiz konusunda hiçbir fikrimiz olmadığı için herhangi bir bağımlı değişkene ihtiyacımız yok. Bu yüzden özellikler matrisi için sadece bir kod satırı ekleyeceğiz.
x = dataset.iloc[:, [3, 4]].values
Gördüğümüz gibi sadece 3 tanesini çıkarıyoruz.üçüncüve 4oözellik. Bunun nedeni, modeli görselleştirmek için 2 boyutlu bir çizime ihtiyacımız olması ve müşteri_kimliği gibi bazı özelliklerin gerekli olmamasıdır.
Adım-2: Dirsek yöntemini kullanarak en uygun küme sayısını bulma
İkinci adımda kümeleme problemimiz için en uygun küme sayısını bulmaya çalışacağız. Yukarıda tartışıldığı gibi, burada bu amaçla dirsek yöntemini kullanacağız.
Bildiğimiz gibi dirsek yöntemi, WCSS değerlerini Y eksenine ve küme sayısını X eksenine çizerek grafiği çizmek için WCSS konseptini kullanır. Yani 1'den 10'a kadar farklı k değerleri için WCSS değerini hesaplayacağız. Bunun kodu aşağıdadır:
#finding optimal number of clusters using the elbow method from sklearn.cluster import KMeans wcss_list= [] #Initializing the list for the values of WCSS #Using for loop for iterations from 1 to 10. for i in range(1, 11): kmeans = KMeans(n_clusters=i, init='k-means++', random_state= 42) kmeans.fit(x) wcss_list.append(kmeans.inertia_) mtp.plot(range(1, 11), wcss_list) mtp.title('The Elobw Method Graph') mtp.xlabel('Number of clusters(k)') mtp.ylabel('wcss_list') mtp.show()
Yukarıdaki kodda gördüğümüz gibi, kullandık. K Anlamı sklearn sınıfı. Kümeleri oluşturmak için küme kitaplığı.
Daha sonra, şunu oluşturduk: wcss_listesi 1 ile 10 arasında değişen farklı k değerleri için hesaplanan wcss değerini içeren boş bir listeyi başlatmak için kullanılan değişken.
Bundan sonra, 1'den 10'a kadar değişen farklı bir k değeri üzerinde yineleme için for döngüsünü başlattık; Python'daki for döngüsünden dolayı giden sınırı hariç tutun, dolayısıyla 10'u dahil etmek için 11 olarak alınırodeğer.
Kodun geri kalan kısmı daha önceki konularda yaptığımıza benzer; modeli bir özellikler matrisine yerleştirdik ve ardından küme sayısı ile WCSS arasındaki grafiği çizdik.
Çıktı: Yukarıdaki kodu çalıştırdıktan sonra aşağıdaki çıktıyı elde edeceğiz:
Yukarıdaki grafikten dirsek noktasının şu konumda olduğunu görebiliriz: 5. Yani buradaki küme sayısı 5 olacaktır.
Adım- 3: K-means algoritmasının eğitim veri seti üzerinde eğitilmesi
Elimizde küme sayısı olduğundan artık modeli veri seti üzerinde eğitebiliriz.
Modeli eğitmek için yukarıdaki bölümde kullandığımız aynı iki kod satırını kullanacağız ancak burada i kullanmak yerine 5 kullanacağız çünkü oluşturulması gereken 5 küme olduğunu biliyoruz. Kod aşağıda verilmiştir:
java dizesine karakter
#training the K-means model on a dataset kmeans = KMeans(n_clusters=5, init='k-means++', random_state= 42) y_predict= kmeans.fit_predict(x)
KMeans sınıfının nesnesini oluşturmak için ilk satır yukarıdakiyle aynıdır.
Kodun ikinci satırında bağımlı değişkeni oluşturduk. y_tahmin modeli eğitmek için.
Yukarıdaki kod satırlarını çalıştırarak y_predict değişkenini elde edeceğiz. Aşağıdan kontrol edebiliriz değişken gezgini Spyder IDE'deki seçenek. Artık y_predict'in değerlerini orijinal veri kümemizle karşılaştırabiliriz. Aşağıdaki görüntüyü göz önünde bulundurun:
Yukarıdaki görüntüden artık Müşteri Kimliği 1'in bir kümeye ait olduğunu anlayabiliriz.
3 (indeks 0'dan başladığından, 2, 3 olarak kabul edilecektir) ve 2, küme 4'e aittir vb.
Adım-4: Kümeleri Görselleştirme
Son adım kümeleri görselleştirmektir. Modelimiz için 5 kümemiz olduğundan her kümeyi tek tek görselleştireceğiz.
Kümeleri görselleştirmek için matplotlib'in mtp.scatter() fonksiyonunu kullanarak dağılım grafiğini kullanacağız.
#visulaizing the clusters mtp.scatter(x[y_predict == 0, 0], x[y_predict == 0, 1], s = 100, c = 'blue', label = 'Cluster 1') #for first cluster mtp.scatter(x[y_predict == 1, 0], x[y_predict == 1, 1], s = 100, c = 'green', label = 'Cluster 2') #for second cluster mtp.scatter(x[y_predict== 2, 0], x[y_predict == 2, 1], s = 100, c = 'red', label = 'Cluster 3') #for third cluster mtp.scatter(x[y_predict == 3, 0], x[y_predict == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4') #for fourth cluster mtp.scatter(x[y_predict == 4, 0], x[y_predict == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5') #for fifth cluster mtp.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s = 300, c = 'yellow', label = 'Centroid') mtp.title('Clusters of customers') mtp.xlabel('Annual Income (k$)') mtp.ylabel('Spending Score (1-100)') mtp.legend() mtp.show()
Yukarıdaki kod satırlarında, her küme için 1'den 5'e kadar değişen kodlar yazdık. mtp.scatter'ın ilk koordinatı, yani matrisi gösteren x değerini içeren x[y_predict == 0, 0] özellik değerleri ve y_predict 0 ile 1 arasında değişmektedir.
Çıktı:
Çıktı görüntüsü, farklı renklere sahip beş farklı kümeyi açıkça gösteriyor. Kümeler veri setinin iki parametresi arasında oluşturulur; Müşterinin yıllık geliri ve Harcaması. Renkleri ve etiketleri ihtiyaca veya tercihe göre değiştirebiliriz. Aşağıda verilen yukarıdaki kalıplardan bazı noktaları da gözlemleyebiliriz:
- Küme2, müşterinin yüksek gelire ancak düşük harcamaya sahip olduğunu gösterir; dolayısıyla onları şu şekilde sınıflandırabiliriz: dikkatli olmak .
- Küme 3, düşük geliri ve aynı zamanda düşük harcamayı gösterir, böylece bunlar makul olarak sınıflandırılabilir.
- Küme4, düşük gelirli müşterileri çok yüksek harcamalarla gösterir, böylece bunlar şöyle sınıflandırılabilir: dikkatsiz .
- Küme5, yüksek gelirli ve yüksek harcamalı müşterileri göstererek hedef olarak kategorize edilebilir ve bu müşteriler alışveriş merkezi sahibi için en karlı müşteriler olabilir.