Scikit Learn - Kümeleme Yöntemleri

Burada, veri örneklerindeki herhangi bir benzerliğin belirlenmesine yardımcı olacak Sklearn'daki kümeleme yöntemleri hakkında çalışacağız.

Veri örnekleri arasında benzerlik ve ilişki modellerini bulmak için kullanılan, denetimsiz makine öğrenimi yöntemlerinin en kullanışlılarından biri olan kümeleme yöntemleri. Bundan sonra, bu örnekleri özelliklere göre benzerlik gösteren gruplar halinde kümelerler. Kümeleme, mevcut etiketlenmemiş veriler arasındaki içsel gruplamayı belirler, bu yüzden önemlidir.

Scikit-learn kitaplığı, sklearn.clusteretiketlenmemiş verilerin kümelenmesini gerçekleştirmek için. Bu modül altında scikit-leran aşağıdaki kümeleme yöntemlerine sahiptir -

KMeanler

Bu algoritma, ağırlık merkezlerini hesaplar ve optimum ağırlık merkezini bulana kadar yineler. Küme sayısının belirtilmesini gerektirir, bu yüzden zaten bilindiklerini varsayar. Bu algoritmanın ana mantığı, atalet olarak bilinen kriterleri en aza indirerek, numuneleri n sayıda eşit varyanslı gruplara ayıran verileri kümelemektir. Algoritma tarafından tanımlanan küme sayısı 'K ile temsil edilir.

Scikit-learn var sklearn.cluster.KMeansK-Means kümeleme gerçekleştirmek için modül. Küme merkezlerini ve atalet değerini hesaplarken, adı verilen parametresample_weight izin verir sklearn.cluster.KMeans bazı örneklere daha fazla ağırlık atamak için modül.

Yakın İlgi Yayılımı

Bu algoritma, yakınsamaya kadar farklı örnek çiftleri arasında 'mesaj geçişi' kavramına dayanmaktadır. Algoritmayı çalıştırmadan önce küme sayısının belirtilmesini gerektirmez. Algoritmanın en büyük dezavantajı olan düzen (2) 'nin bir zaman karmaşıklığı vardır.

Scikit-learn var sklearn.cluster.AffinityPropagation Affinity Propagation kümeleme gerçekleştirmek için modül.

Ortalama Vardiya

Bu algoritma esas olarak keşfeder blobspürüzsüz bir numune yoğunluğunda. Noktaları en yüksek veri noktası yoğunluğuna kaydırarak, veri noktalarını yinelemeli olarak kümelere atar. Adlı bir parametreye güvenmek yerinebandwidth Aranacak bölgenin boyutunu belirleyerek, küme sayısını otomatik olarak ayarlar.

Scikit-learn var sklearn.cluster.MeanShift Mean Shift kümeleme gerçekleştirmek için modül.

Spektral Kümeleme

Kümelemeden önce, bu algoritma temelde özdeğerleri, yani daha az boyutta boyutsallık indirgemesi gerçekleştirmek için verilerin benzerlik matrisinin spektrumunu kullanır. Çok sayıda küme olduğunda bu algoritmanın kullanılması tavsiye edilmez.

Scikit-learn var sklearn.cluster.SpectralClustering Spectral kümeleme gerçekleştirmek için modül.

Hiyerarşik kümeleme

Bu algoritma, kümeleri art arda birleştirerek veya bölerek iç içe geçmiş kümeler oluşturur. Bu küme hiyerarşisi dendrogram yani ağaç olarak temsil edilir. Aşağıdaki iki kategoriye ayrılır -

Agglomerative hierarchical algorithms- Bu tür hiyerarşik algoritmada, her veri noktası tek bir küme gibi ele alınır. Daha sonra küme çiftlerini art arda toplar. Bu aşağıdan yukarıya yaklaşımını kullanır.

Divisive hierarchical algorithms- Bu hiyerarşik algoritmada, tüm veri noktaları tek bir büyük küme olarak ele alınır. Bunda, kümeleme süreci, bir büyük kümeyi yukarıdan aşağıya yaklaşımı kullanarak çeşitli küçük kümelere bölmeyi içerir.

Scikit-learn var sklearn.cluster.AgglomerativeClustering Aglomeratif Hiyerarşik kümeleme gerçekleştirmek için modül.

DBSCAN

Anlamına gelir “Density-based spatial clustering of applications with noise”. Bu algoritma, sezgisel "kümeler" ve "gürültü" kavramına dayanmaktadır; kümeler, veri noktalarının daha düşük yoğunluklu bölgeleri ile ayrılmış, veri uzayında daha düşük yoğunluğa sahip yoğun bölgelerdir.

Scikit-learn var sklearn.cluster.DBSCANDBSCAN kümelemesini gerçekleştirmek için modül. Bu algoritma tarafından yoğunluğu tanımlamak için kullanılan min_samples ve eps olmak üzere iki önemli parametre vardır.

Daha yüksek parametre değeri min_samples veya daha düşük parametre eps değeri, bir küme oluşturmak için gerekli olan veri noktalarının daha yüksek yoğunluğu hakkında bir gösterge verecektir.

OPTİK

Anlamına gelir “Ordering points to identify the clustering structure”. Bu algoritma aynı zamanda uzamsal verilerde yoğunluk temelli kümeler bulur. Temel çalışma mantığı DBSCAN gibidir.

Veritabanının noktalarını uzamsal olarak en yakın noktalar sırayla komşu olacak şekilde sıralayarak, DBSCAN algoritmasının önemli bir zayıflığını - değişen yoğunluktaki verilerdeki anlamlı kümeleri tespit etme problemini - ele alır.

Scikit-learn var sklearn.cluster.OPTICS OPTICS kümeleme gerçekleştirmek için modül.

Huş

Dengeli yinelemeli azaltma ve hiyerarşileri kullanarak kümeleme anlamına gelir. Büyük veri kümeleri üzerinde hiyerarşik kümeleme yapmak için kullanılır. Adlı bir ağaç inşa ederCFT yani Characteristics Feature Tree, verilen veriler için.

CFT'nin avantajı, CF (Characteristics Feature) düğümleri olarak adlandırılan veri düğümlerinin, tüm giriş verilerini bellekte tutma ihtiyacını daha da önleyen kümeleme için gerekli bilgileri tutmasıdır.

Scikit-learn var sklearn.cluster.Birch BIRCH kümeleme gerçekleştirmek için modül.

Kümeleme Algoritmalarını Karşılaştırma

Aşağıdaki tablo, scikit-learn'deki kümeleme algoritmalarının bir karşılaştırmasını (parametrelere, ölçeklenebilirliğe ve ölçüye dayalı olarak) verecektir.

Sr.No Algoritma Adı Parametreler Ölçeklenebilirlik Kullanılan Metrik
1 K-anlamına gelir Küme sayısı Çok büyük n_samples Noktalar arasındaki mesafe.
2 Yakın İlgi Yayılımı Sönümleme N_samples ile ölçeklenemez Grafik Mesafesi
3 Ortalama Kaydırma Bant genişliği N_samples ile ölçeklenemez. Noktalar arasındaki mesafe.
4 Spektral Kümeleme Küme sayısı N_samples ile orta düzeyde ölçeklenebilirlik. N_clusters ile küçük ölçeklenebilirlik düzeyi. Grafik Mesafesi
5 Hiyerarşik kümeleme Mesafe eşiği veya küme sayısı Büyük n_samples Büyük n_kümeler Noktalar arasındaki mesafe.
6 DBSCAN Mahalle boyutu Çok büyük n_örnekler ve orta n_kümeler. En yakın nokta mesafesi
7 OPTİK Minimum küme üyeliği Çok büyük n_örnekleri ve büyük n_kümeleri. Noktalar arasındaki mesafe.
8 Huş Eşik, Dallanma faktörü Büyük n_samples Büyük n_kümeler Noktalar arasındaki Öklid mesafesi.

Scikit-learn Digit veri kümesinde K-Means Kümeleme

Bu örnekte, basamak veri kümesine K-ortalama kümelemesini uygulayacağız. Bu algoritma, orijinal etiket bilgilerini kullanmadan benzer basamakları tanımlayacaktır. Uygulama Jupyter defterinde yapılır.

%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
from sklearn.cluster import KMeans
from sklearn.datasets import load_digits
digits = load_digits()
digits.data.shape

Çıktı

1797, 64)

Bu çıktı, rakam veri setinin 64 özelliğe sahip 1797 örneğe sahip olduğunu göstermektedir.

Misal

Şimdi, K-Means kümelemesini aşağıdaki gibi gerçekleştirin -

kmeans = KMeans(n_clusters = 10, random_state = 0)
clusters = kmeans.fit_predict(digits.data)
kmeans.cluster_centers_.shape

Çıktı

(10, 64)

Bu çıktı, K-araç kümelemesinin 64 özelliğe sahip 10 küme oluşturduğunu göstermektedir.

Misal

fig, ax = plt.subplots(2, 5, figsize = (8, 3))
centers = kmeans.cluster_centers_.reshape(10, 8, 8)
for axi, center in zip(ax.flat, centers):
axi.set(xticks = [], yticks = [])
axi.imshow(center, interpolation = 'nearest', cmap = plt.cm.binary)

Çıktı

Aşağıdaki çıktı, K-Means Kümeleme tarafından öğrenilen küme merkezlerini gösteren görüntülere sahiptir.

Ardından, aşağıdaki Python betiği, öğrenilen küme etiketlerini (K-Means ile) içlerinde bulunan gerçek etiketlerle eşleştirecektir -

from scipy.stats import mode
labels = np.zeros_like(clusters)
for i in range(10):
mask = (clusters == i)
labels[mask] = mode(digits.target[mask])[0]

Doğruluğu aşağıda belirtilen komut yardımıyla da kontrol edebiliriz.

from sklearn.metrics import accuracy_score
accuracy_score(digits.target, labels)

Çıktı

0.7935447968836951

Eksiksiz Uygulama Örneği

%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np

from sklearn.cluster import KMeans
from sklearn.datasets import load_digits
digits = load_digits()
digits.data.shape
kmeans = KMeans(n_clusters = 10, random_state = 0)
clusters = kmeans.fit_predict(digits.data)
kmeans.cluster_centers_.shape
fig, ax = plt.subplots(2, 5, figsize = (8, 3))
centers = kmeans.cluster_centers_.reshape(10, 8, 8)
for axi, center in zip(ax.flat, centers):
   axi.set(xticks=[], yticks = [])
   axi.imshow(center, interpolation = 'nearest', cmap = plt.cm.binary)
from scipy.stats import mode
labels = np.zeros_like(clusters)
for i in range(10):
   mask = (clusters == i)
   labels[mask] = mode(digits.target[mask])[0]
from sklearn.metrics import accuracy_score
accuracy_score(digits.target, labels)