logo

Makine Öğreniminde Hiyerarşik Kümeleme

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:

    Aglomeratif:Aglomeratif bir altüst Algoritmanın tüm veri noktalarını tek kümeler olarak alıp tek bir küme kalana kadar birleştirmeyle başladığı yaklaşım.bölücü:Bölücü algoritma, toplayıcı algoritmanın tersidir, çünkü yukarıdan aşağıya yaklaşım.

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:

    Aşama 1:Her veri noktasını tek bir küme olarak oluşturun. Diyelim ki N veri noktası var, dolayısıyla küme sayısı da N olacaktır.
    Makine Öğreniminde Hiyerarşik Kümeleme Adım 2:En yakın iki veri noktasını veya kümesini alın ve bunları bir küme oluşturacak şekilde birleştirin. Yani artık N-1 kümeleri olacak.
    Makine Öğreniminde Hiyerarşik Kümeleme Aşama 3: Yine en yakın iki kümeyi alın ve bunları bir küme oluşturacak şekilde birleştirin. N-2 kümeleri olacak.
    Makine Öğreniminde Hiyerarşik Kümeleme Adım-4:Yalnızca bir küme kalana kadar Adım 3'ü tekrarlayın. Böylece aşağıdaki kümeleri elde edeceğiz. Aşağıdaki görselleri göz önünde bulundurun:
    Makine Öğreniminde Hiyerarşik Kümeleme
    Makine Öğreniminde Hiyerarşik Kümeleme
    Makine Öğreniminde Hiyerarşik Kümeleme Adım 5:Tüm kümeler tek bir büyük kümede birleştirildiğinde, kümeleri soruna göre bölmek için dendrogramı geliştirin.

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:

    Tek Bağlantı:Kümelerin en yakın noktaları arasındaki en kısa mesafedir. Aşağıdaki görüntüyü göz önünde bulundurun:
    Makine Öğreniminde Hiyerarşik Kümeleme Tam Bağlantı:İki farklı kümenin iki noktası arasındaki en uzak mesafedir. Tekli bağlantıya göre daha sıkı kümeler oluşturduğundan popüler bağlantı yöntemlerinden biridir.
    Makine Öğreniminde Hiyerarşik Kümeleme Ortalama Bağlantı:İki küme arasındaki ortalama mesafeyi hesaplamak için her bir veri kümesi çifti arasındaki mesafenin toplandığı ve daha sonra toplam veri kümesi sayısına bölündüğü bağlantı yöntemidir. Aynı zamanda en popüler bağlantı yöntemlerinden biridir.Merkez Bağlantısı:Kümelerin ağırlık merkezleri arasındaki mesafenin hesaplandığı bağlantı yöntemidir. Aşağıdaki görüntüyü göz önünde bulundurun:
    Makine Öğreniminde Hiyerarşik Kümeleme

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:

Makine Öğreniminde Hiyerarşik Kümeleme

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 Dendrogramı kullanarak optimum küme sayısını bulma Hiyerarşik kümeleme modelinin eğitimi Kümeleri görselleştirme

Veri Ön İşleme Adımları:

Bu adımda modelimiz için kütüphaneleri ve veri setlerini içe aktaracağız.

    Kitaplıkları içe aktarma
 # 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.

    Veri kümesini içe aktarma
 # 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
Makine Öğreniminde Hiyerarşik Kümeleme
    Özellik matrisinin çıkarılması

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 :

Makine Öğreniminde Hiyerarşik Kümeleme

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:

Makine Öğreniminde Hiyerarşik Kümeleme

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
    n_küme=5: Küme sayısını tanımlar ve optimal küme sayısı olduğu için burada 5 aldık.yakınlık = 'öklit': Bağlantıyı hesaplamak için kullanılan bir metriktir.bağlantı = 'koğuş': Bağlantı kriterlerini tanımlar, burada 'koğuş' bağlantısını kullandık. Bu yöntem, Dendrogramı oluşturmak için zaten kullandığımız popüler bağlantı yöntemidir. Her kümedeki varyansı azaltır.

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:

Makine Öğreniminde Hiyerarşik Kümeleme

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:

Makine Öğreniminde Hiyerarşik Kümeleme