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)