Scikit Learn - Metode Pengelompokan

Di sini, kita akan mempelajari tentang metode pengelompokan di Sklearn yang akan membantu dalam mengidentifikasi kesamaan dalam sampel data.

Metode clustering, salah satu metode ML tanpa pengawasan yang paling berguna, digunakan untuk menemukan kesamaan & pola hubungan di antara sampel data. Setelah itu, mereka mengelompokkan sampel tersebut ke dalam kelompok-kelompok yang memiliki kemiripan berdasarkan fiturnya. Clustering menentukan pengelompokan intrinsik di antara data tak berlabel saat ini, itulah mengapa ini penting.

Perpustakaan Scikit-learn memiliki sklearn.clusteruntuk melakukan pengelompokan data yang tidak berlabel. Di bawah modul ini scikit-leran memiliki metode pengelompokan berikut -

KMeans

Algoritme ini menghitung sentroid dan melakukan iterasi hingga menemukan sentroid yang optimal. Ini membutuhkan jumlah cluster untuk ditentukan, itulah mengapa diasumsikan bahwa mereka sudah diketahui. Logika utama dari algoritma ini adalah untuk mengelompokkan data yang memisahkan sampel dalam jumlah n kelompok varians yang sama dengan meminimalkan kriteria yang dikenal sebagai inersia. Jumlah cluster yang diidentifikasi oleh algoritma diwakili oleh 'K.

Scikit-learn miliki sklearn.cluster.KMeansmodul untuk melakukan pengelompokan K-Means. Saat menghitung pusat cluster dan nilai inersia, parameternya dinamaisample_weight memungkinkan sklearn.cluster.KMeans modul untuk memberikan bobot lebih pada beberapa sampel.

Propagasi Afinitas

Algoritma ini didasarkan pada konsep 'message passing' antara pasangan sampel yang berbeda hingga konvergensi. Ini tidak memerlukan jumlah cluster yang ditentukan sebelum menjalankan algoritme. Algoritme memiliki kompleksitas waktu dari urutan (2), yang merupakan kerugian terbesar darinya.

Scikit-learn miliki sklearn.cluster.AffinityPropagation modul untuk melakukan clustering Affinity Propagation.

Berarti Shift

Algoritma ini terutama menemukan blobsdalam kepadatan sampel yang halus. Ini menetapkan titik data ke cluster secara iteratif dengan menggeser titik menuju kepadatan titik data tertinggi. Alih-alih mengandalkan parameter bernamabandwidth mendikte ukuran wilayah yang akan ditelusuri, secara otomatis mengatur jumlah cluster.

Scikit-learn miliki sklearn.cluster.MeanShift modul untuk melakukan pengelompokan Mean Shift.

Pengelompokan Spektral

Sebelum melakukan clustering, algoritma ini pada dasarnya menggunakan eigenvalues ​​yaitu spektrum matriks kemiripan data untuk melakukan reduksi dimensionalitas dalam dimensi yang lebih sedikit. Penggunaan algoritme ini tidak disarankan jika ada banyak cluster.

Scikit-learn miliki sklearn.cluster.SpectralClustering modul untuk melakukan pengelompokan spektral.

Pengelompokan Hierarki

Algoritme ini membangun cluster bertingkat dengan menggabungkan atau memisahkan cluster secara berurutan. Hierarki cluster ini direpresentasikan sebagai dendrogram yaitu pohon. Itu terbagi dalam dua kategori berikut -

Agglomerative hierarchical algorithms- Dalam algoritma hierarki semacam ini, setiap titik data diperlakukan seperti satu cluster. Kemudian secara berturut-turut menggumpalkan pasangan cluster. Ini menggunakan pendekatan bottom-up.

Divisive hierarchical algorithms- Dalam algoritma hierarki ini, semua titik data diperlakukan sebagai satu cluster besar. Dalam proses clustering ini melibatkan pembagian, dengan menggunakan pendekatan top-down, satu cluster besar menjadi berbagai cluster kecil.

Scikit-learn miliki sklearn.cluster.AgglomerativeClustering modul untuk melakukan pengelompokan hierarki aglomeratif.

DBSCAN

Itu singkatan “Density-based spatial clustering of applications with noise”. Algoritme ini didasarkan pada gagasan intuitif "cluster" & "noise" bahwa cluster adalah wilayah padat dengan kepadatan lebih rendah dalam ruang data, dipisahkan oleh wilayah kepadatan titik data yang lebih rendah.

Scikit-learn miliki sklearn.cluster.DBSCANmodul untuk melakukan pengelompokan DBSCAN. Ada dua parameter penting yaitu min_samples dan eps yang digunakan algoritma ini untuk mendefinisikan dense.

Nilai parameter yang lebih tinggi min_samples atau nilai yang lebih rendah dari parameter eps akan memberikan indikasi tentang kepadatan titik data yang lebih tinggi yang diperlukan untuk membentuk sebuah cluster.

OPTIK

Itu singkatan “Ordering points to identify the clustering structure”. Algoritma ini juga menemukan cluster berbasis kepadatan dalam data spasial. Logika kerja dasarnya seperti DBSCAN.

Ini mengatasi kelemahan utama algoritma DBSCAN - masalah mendeteksi cluster yang berarti dalam data dengan kepadatan yang bervariasi - dengan mengurutkan titik-titik database sedemikian rupa sehingga titik-titik terdekat secara spasial menjadi tetangga dalam pengurutan.

Scikit-learn miliki sklearn.cluster.OPTICS modul untuk melakukan pengelompokan OPTICS.

BIRCH

Itu singkatan dari Balanced iterative reduction dan clustering using hierarchies. Ini digunakan untuk melakukan pengelompokan hierarki atas kumpulan data besar. Itu membangun pohon bernamaCFT yaitu Characteristics Feature Tree, untuk data yang diberikan.

Keuntungan dari CFT adalah bahwa node data yang disebut node CF (Karakteristik Fitur) menyimpan informasi yang diperlukan untuk pengelompokan yang selanjutnya mencegah kebutuhan untuk menyimpan seluruh data input dalam memori.

Scikit-learn miliki sklearn.cluster.Birch modul untuk melakukan pengelompokan BIRCH.

Membandingkan Algoritma Pengelompokan

Tabel berikut akan memberikan perbandingan (berdasarkan parameter, skalabilitas, dan metrik) dari algoritme pengelompokan di scikit-learn.

Sr Tidak Nama Algoritme Parameter Skalabilitas Metrik yang Digunakan
1 K-Means Jumlah cluster N_sampel yang sangat besar Jarak antar titik.
2 Propagasi Afinitas Pembasahan Ini tidak dapat diskalakan dengan n_samples Jarak Grafik
3 Mean-Shift Bandwidth Ini tidak dapat diskalakan dengan n_samples. Jarak antar titik.
4 Pengelompokan Spektral Jumlah cluster Skalabilitas tingkat menengah dengan n_samples. Skalabilitas tingkat kecil dengan n_clusters. Jarak Grafik
5 Pengelompokan Hierarki Ambang jarak atau Jumlah cluster N_samples Besar n_clusters Jarak antar titik.
6 DBSCAN Ukuran lingkungan N_sample yang sangat besar dan n_clusters sedang. Jarak titik terdekat
7 OPTIK Keanggotaan cluster minimum N_sample yang sangat besar dan n_clusters yang besar. Jarak antar titik.
8 BIRCH Ambang batas, Faktor percabangan N_samples Besar n_clusters Jarak Euclidean antar titik.

K-Means Clustering pada set data Scikit-learn Digit

Dalam contoh ini, kami akan menerapkan pengelompokan K-means pada kumpulan data digit. Algoritme ini akan mengidentifikasi digit yang serupa tanpa menggunakan informasi label asli. Implementasi dilakukan pada notebook Jupyter.

%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

Keluaran

1797, 64)

Keluaran ini menunjukkan bahwa dataset digit memiliki 1797 sampel dengan 64 fitur.

Contoh

Sekarang, lakukan pengelompokan K-Means sebagai berikut -

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

Keluaran

(10, 64)

Keluaran ini menunjukkan bahwa clustering K-means menghasilkan 10 cluster dengan 64 fitur.

Contoh

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)

Keluaran

Output di bawah ini memiliki gambar yang menunjukkan pusat cluster yang dipelajari oleh K-Means Clustering.

Selanjutnya, skrip Python di bawah ini akan mencocokkan label cluster yang dipelajari (oleh K-Means) dengan label sebenarnya yang ditemukan di dalamnya -

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]

Kami juga dapat memeriksa keakuratan dengan bantuan perintah yang disebutkan di bawah ini.

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

Keluaran

0.7935447968836951

Contoh Implementasi Lengkap

%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)