Hiyerarşik kümeleme, etiketlenmemiş veri kümelerini bir küme halinde gruplamak için kullanılan ve aynı zamanda şu şekilde de bilinen başka bir denetimsiz makine öğrenme algoritmasıdır: hiyerarşik küme analizi veya HCA'dır.
java yığını
Bu algoritmada kümelerin hiyerarşisini bir ağaç şeklinde geliştiriyoruz ve bu ağaç şeklindeki yapıya, dendrogram .
Bazen K-ortalamalı kümelemenin ve hiyerarşik kümelemenin sonuçları benzer görünebilir, ancak ikisi de nasıl çalıştıklarına bağlı olarak farklılık gösterir. Çünkü K-Means algoritmasında yaptığımız gibi küme sayısını önceden belirleme zorunluluğu yoktur.
Hiyerarşik kümeleme tekniğinin iki yaklaşımı vardır:
Neden hiyerarşik kümeleme?
Zaten başkalarımız da olduğu için kümelenme gibi algoritmalar K-Kümeleme Anlamına Gelir öyleyse neden hiyerarşik kümelemeye ihtiyacımız var? Yani, K-means kümelemesinde gördüğümüz gibi, önceden belirlenmiş sayıda kümeden oluşan bu algoritmanın bazı zorlukları vardır ve her zaman aynı büyüklükte kümeler oluşturmaya çalışır. Bu iki zorluğu çözmek için hiyerarşik kümeleme algoritmasını tercih edebiliriz çünkü bu algoritmada önceden tanımlanmış küme sayısı hakkında bilgi sahibi olmamıza gerek yoktur.
Bu konu başlığımızda Aglomeratif Hiyerarşik kümeleme algoritmasını tartışacağız.
Aglomeratif Hiyerarşik kümeleme
Toplayıcı hiyerarşik kümeleme algoritması HCA'nın popüler bir örneğidir. Veri kümelerini kümeler halinde gruplamak için şu yolu izler: aşağıdan yukarıya yaklaşım . Bu, algoritmanın başlangıçta her veri kümesini tek bir küme olarak kabul ettiği ve daha sonra en yakın küme çiftini birleştirmeye başladığı anlamına gelir. Bunu, tüm kümeler, tüm veri kümelerini içeren tek bir kümede birleştirilene kadar yapar.
Bu küme hiyerarşisi dendrogram şeklinde temsil edilir.
Aglomeratif Hiyerarşik Kümeleme Nasıl Çalışır?
AHC algoritmasının çalışması aşağıdaki adımlar kullanılarak açıklanabilir:
Not: Hiyerarşik kümelemeyi daha iyi anlamak için k-means kümelemeye göz atmanız önerilir.
İki küme arasındaki mesafeyi ölçün
Gördüğümüz gibi, en yakın mesafe İki küme arasındaki hiyerarşik kümeleme için çok önemlidir. İki küme arasındaki mesafeyi hesaplamanın çeşitli yolları vardır ve bu yollar kümeleme kuralını belirler. Bu önlemlere denir Bağlantı yöntemleri . Popüler bağlantı yöntemlerinden bazıları aşağıda verilmiştir:
Yukarıda verilen yaklaşımlardan herhangi birini sorunun türüne veya iş gereksinimine göre uygulayabiliriz.
Hiyerarşik kümelemede Dendrogramın Çalışması
Dendrogram, esas olarak her adımı HC algoritmasının gerçekleştirdiği bir bellek olarak depolamak için kullanılan ağaç benzeri bir yapıdır. Dendrogram grafiğinde, Y ekseni veri noktaları arasındaki Öklid mesafelerini gösterirken, x ekseni verilen veri kümesindeki tüm veri noktalarını gösterir.
Dendrogramın çalışması aşağıdaki diyagram kullanılarak açıklanabilir:
Yukarıdaki diyagramda, sol kısım aglomeratif kümelemede kümelerin nasıl oluşturulduğunu, sağ kısım ise karşılık gelen dendrogramı göstermektedir.
git ile ödeme
- Yukarıda da bahsettiğimiz gibi öncelikle P2 ve P3 veri noktaları birleşerek bir küme oluşturur, buna bağlı olarak P2 ve P3'ü dikdörtgen şeklinde birbirine bağlayan bir dendrogram oluşturulur. Yüksekliğe, veri noktaları arasındaki Öklid mesafesine göre karar verilir.
- Bir sonraki adımda P5 ve P6 bir küme oluşturur ve karşılık gelen dendrogram oluşturulur. P5 ve P6 arasındaki Öklid mesafesi P2 ve P3'ten biraz daha büyük olduğundan, öncekinden daha yüksektir.
- Yine, P1, P2 ve P3'ü bir dendrogramda ve P4, P5 ve P6'yı başka bir dendrogramda birleştiren iki yeni dendrogram oluşturulur.
- Sonunda tüm veri noktalarını bir araya getiren son dendrogram oluşturulur.
Dendrogram ağaç yapısını ihtiyacımıza göre herhangi bir seviyede kesebiliriz.
Aglomeratif Hiyerarşik Kümelemenin Python Uygulaması
Şimdi Python kullanarak toplayıcı hiyerarşik kümeleme algoritmasının pratik uygulamasını göreceğiz. Bunu uygulamak için, önceki K-ortalamalar kümeleme konusunda kullandığımız veri kümesi probleminin aynısını kullanacağız, böylece her iki kavramı da kolayca karşılaştırabiliriz.
Veri seti alışveriş için AVM'yi ziyaret eden müşterilerin bilgilerini içermektedir. Dolayısıyla alışveriş merkezi sahibi, veri seti bilgilerini kullanarak müşterilerinin bazı kalıplarını veya belirli davranışlarını bulmak ister.
Python kullanarak AHC'nin uygulanmasına yönelik adımlar:
Uygulama adımları, küme sayısını bulma yöntemi gibi bazı değişiklikler dışında k-ortalama kümelemeyle aynı olacaktır. Aşağıda adımlar verilmiştir:
Veri Ön İşleme Adımları:
Bu adımda modelimiz için kütüphaneleri ve veri setlerini içe aktaracağız.
# Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd
Yukarıdaki kod satırları, aşağıdaki gibi belirli görevleri gerçekleştirmek üzere kitaplıkları içe aktarmak için kullanılır: dizi Matematiksel işlemler için, matplotlib grafikleri veya dağılım grafiğini çizmek için ve pandalar veri kümesini içe aktarmak için.
# Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv')
Yukarıda tartışıldığı gibi, aynı veri kümesini içe aktardık. Mall_Customers_data.csv, k-aracı kümelemesinde yaptığımız gibi. Aşağıdaki çıktıyı göz önünde bulundurun:
1 milyardan milyona
Bağımlı değişken hakkında daha fazla bilgiye sahip olmadığımız için burada yalnızca özellikler matrisini çıkaracağız. Kod aşağıda verilmiştir:
x = dataset.iloc[:, [3, 4]].values
Kümeleri görmek için 2 boyutlu bir grafik kullanacağımız için burada yalnızca 3 ve 4 sütunu çıkardık. Bu nedenle, Yıllık gelir ve harcama puanını özelliklerin matrisi olarak ele alıyoruz.
Adım-2: Dendrogramı kullanarak optimum küme sayısını bulma
Şimdi modelimiz için Dendrogramı kullanarak en uygun küme sayısını bulacağız. Bunun için şunu kullanacağız: scipy Kütüphane, kodumuzun dendrogramını doğrudan döndürecek bir işlev sağladığı için. Aşağıdaki kod satırlarını göz önünde bulundurun:
#Finding the optimal number of clusters using the dendrogram import scipy.cluster.hierarchy as shc dendro = shc.dendrogram(shc.linkage(x, method='ward')) mtp.title('Dendrogrma Plot') mtp.ylabel('Euclidean Distances') mtp.xlabel('Customers') mtp.show()
Yukarıdaki kod satırlarında, içe aktardık hiyerarşi scipy kütüphanesinin modülü. Bu modül bize bir yöntem sağlar shc.denrogram(), hangisi alır bağlantı() parametre olarak. Bağlantı işlevi iki küme arasındaki mesafeyi tanımlamak için kullanılır, dolayısıyla burada x'i (özellik matrisi) ve yöntemini geçtik. koğuş Hiyerarşik kümelemede popüler bağlantı yöntemi.
Geri kalan kod satırları dendrogram grafiğinin etiketlerini açıklamak içindir.
Çıktı:
Yukarıdaki kod satırlarını çalıştırdığımızda aşağıdaki çıktıyı elde edeceğiz :
Bu Dendrogramı kullanarak artık modelimiz için en uygun küme sayısını belirleyeceğiz. Bunun için şunları bulacağız: maksimum dikey mesafe herhangi bir yatay çubuğu kesmez. Aşağıdaki diyagramı göz önünde bulundurun:
Yukarıdaki diyagramda yatay çubuklarını kesmeyen dikey mesafeleri gösterdik. Görebildiğimiz gibi 4omesafe maksimum görünüyor, buna göre, küme sayısı 5 olacak (bu aralıktaki dikey çizgiler). 2'sini de alabilirizvesayı yaklaşık olarak 4'e eşit olduğundanomesafe, ancak 5 kümeyi dikkate alacağız çünkü K-means algoritmasında hesapladığımızla aynı.
Yani en uygun küme sayısı 5 olacaktır. ve modeli bir sonraki adımda aynısını kullanarak eğiteceğiz.
Adım-3: Hiyerarşik kümeleme modelinin eğitimi
Gerekli optimum küme sayısını bildiğimize göre artık modelimizi eğitebiliriz. Kod aşağıda verilmiştir:
Java'da miras
#training the hierarchical model on dataset from sklearn.cluster import AgglomerativeClustering hc= AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward') y_pred= hc.fit_predict(x)
Yukarıdaki kodda, içe aktardık AglomeratifKümeleme scikit öğrenme kütüphanesinin küme modülünün sınıfı.
Daha sonra bu sınıfın isimli nesnesini oluşturduk. hc. AgglomerativeClustering sınıfı aşağıdaki parametreleri alır:
android'de gizli şeyler nasıl bulunur
Son satırda modele uyum sağlamak veya modeli eğitmek için y_pred bağımlı değişkenini oluşturduk. Yalnızca modeli eğitmekle kalmaz, aynı zamanda her veri noktasının ait olduğu kümeleri de döndürür.
Yukarıdaki kod satırlarını çalıştırdıktan sonra Sypder IDE'mizde değişken explorer seçeneğinden geçersek y_pred değişkenini kontrol edebiliriz. Orijinal veri kümesini y_pred değişkeniyle karşılaştırabiliriz. Aşağıdaki görüntüyü göz önünde bulundurun:
Yukarıdaki görselde de gördüğümüz gibi y_pred küme değerini gösterir; bu, müşteri kimliği 1'in 5'e ait olduğu anlamına geliroküme (indeksleme 0'dan başladığından, 4, 5 anlamına gelir)oküme), müşteri kimliği 2, 4'e aittiroküme vb.
Adım-4: Kümelerin görselleştirilmesi
Modelimizi başarıyla eğittiğimize göre artık veri setine karşılık gelen kümeleri görselleştirebiliyoruz.
Burada, bir değişiklik dışında, k-ortalama kümelemede kullandığımız kod satırlarının aynısını kullanacağız. Burada k-ortalamalarda yaptığımız ağırlık merkezini çizmeyeceğiz çünkü burada optimal küme sayısını belirlemek için dendrogram kullandık. Kod aşağıda verilmiştir:
#visulaizing the clusters mtp.scatter(x[y_pred == 0, 0], x[y_pred == 0, 1], s = 100, c = 'blue', label = 'Cluster 1') mtp.scatter(x[y_pred == 1, 0], x[y_pred == 1, 1], s = 100, c = 'green', label = 'Cluster 2') mtp.scatter(x[y_pred== 2, 0], x[y_pred == 2, 1], s = 100, c = 'red', label = 'Cluster 3') mtp.scatter(x[y_pred == 3, 0], x[y_pred == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4') mtp.scatter(x[y_pred == 4, 0], x[y_pred == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5') mtp.title('Clusters of customers') mtp.xlabel('Annual Income (k$)') mtp.ylabel('Spending Score (1-100)') mtp.legend() mtp.show()
Çıktı: Yukarıdaki kod satırlarını çalıştırdığımızda aşağıdaki çıktıyı elde edeceğiz: