Scikit Learn - Clustering Performance Evaluation

Ada berbagai fungsi dengan bantuan yang kami dapat mengevaluasi kinerja algoritma pengelompokan.

Berikut adalah beberapa fungsi penting dan paling sering digunakan yang diberikan oleh Scikit-learn untuk mengevaluasi kinerja pengelompokan -

Indeks Rand yang Disesuaikan

Rand Index adalah fungsi yang menghitung ukuran kesamaan antara dua clustering. Untuk komputasi indeks rand ini mempertimbangkan semua pasangan sampel dan pasangan penghitungan yang ditugaskan di cluster yang sama atau berbeda dalam pengelompokan yang diprediksi dan benar. Setelah itu, skor Indeks Rand mentah 'disesuaikan untuk peluang' menjadi skor Indeks Rand yang Disesuaikan dengan menggunakan rumus berikut -

$$ Disesuaikan \: RI = \ kiri (RI-Diharapkan _ {-} RI \ kanan) / \ kiri (maks \ kiri (RI \ kanan) -Diharapkan _ {-} RI \ kanan) $$

Ini memiliki dua parameter yaitu labels_true, yang merupakan label kelas kebenaran dasar, dan labels_pred, yang merupakan label cluster untuk dievaluasi.

Contoh

from sklearn.metrics.cluster import adjusted_rand_score
   
   labels_true = [0, 0, 1, 1, 1, 1]
   labels_pred = [0, 0, 2, 2, 3, 3]

adjusted_rand_score(labels_true, labels_pred)

Keluaran

0.4444444444444445

Pelabelan sempurna akan diberi skor 1 dan pelabelan buruk atau pelabelan independen diberi skor 0 atau negatif.

Skor Berbasis Informasi Bersama

Saling Informasi adalah fungsi yang menghitung persetujuan dari dua penugasan. Ini mengabaikan permutasi. Ada versi berikut yang tersedia -

Informasi Mutual yang Dinormalisasi (NMI)

Scikit belajar punya sklearn.metrics.normalized_mutual_info_score modul.

Contoh

from sklearn.metrics.cluster import normalized_mutual_info_score
   
   labels_true = [0, 0, 1, 1, 1, 1]
   labels_pred = [0, 0, 2, 2, 3, 3]

normalized_mutual_info_score (labels_true, labels_pred)

Keluaran

0.7611702597222881

Informasi Bersama yang Disesuaikan (AMI)

Scikit belajar punya sklearn.metrics.adjusted_mutual_info_score modul.

Contoh

from sklearn.metrics.cluster import adjusted_mutual_info_score

   labels_true = [0, 0, 1, 1, 1, 1]
   labels_pred = [0, 0, 2, 2, 3, 3]

adjusted_mutual_info_score (labels_true, labels_pred)

Keluaran

0.4444444444444448

Skor Fowlkes-Mallows

Fungsi Fowlkes-Mallows mengukur kesamaan dua pengelompokan dari satu set titik. Ini dapat didefinisikan sebagai rata-rata geometris dari presisi dan perolehan berpasangan.

Secara matematis,

$$ FMS = \ frac {TP} {\ sqrt {\ kiri (TP + FP \ kanan) \ kiri (TP + FN \ kanan)}} $$

Sini, TP = True Positive - jumlah pasangan titik yang termasuk dalam kluster yang sama di label benar serta label prediksi keduanya.

FP = False Positive - jumlah pasangan titik yang termasuk dalam kelompok yang sama di label yang benar tetapi tidak dalam label yang diprediksi.

FN = False Negative - jumlah pasangan titik yang termasuk dalam kelompok yang sama di label yang diprediksi tetapi tidak dalam label yang sebenarnya.

Scikit belajar memiliki modul sklearn.metrics.fowlkes_mallows_score -

Contoh

from sklearn.metrics.cluster import fowlkes_mallows_score

   labels_true = [0, 0, 1, 1, 1, 1]
   labels_pred = [0, 0, 2, 2, 3, 3]

fowlkes_mallows__score (labels_true, labels_pred)

Keluaran

0.6546536707079771

Koefisien Siluet

Fungsi Silhouette akan menghitung rata-rata Koefisien Silhouette dari semua sampel menggunakan rata-rata jarak intra-kluster dan rata-rata jarak kluster terdekat untuk setiap sampel.

Secara matematis,

$$ S = \ left (ba \ right) / max \ left (a, b \ right) $$

Di sini, a adalah jarak intra-cluster.

dan, b adalah jarak cluster terdekat.

The Scikit belajar memiliki sklearn.metrics.silhouette_score modul -

Contoh

from sklearn import metrics.silhouette_score
from sklearn.metrics import pairwise_distances
from sklearn import datasets
import numpy as np
from sklearn.cluster import KMeans
dataset = datasets.load_iris()
X = dataset.data
y = dataset.target

kmeans_model = KMeans(n_clusters = 3, random_state = 1).fit(X)
labels = kmeans_model.labels_
silhouette_score(X, labels, metric = 'euclidean')

Keluaran

0.5528190123564091

Matriks Kontingensi

Matriks ini akan melaporkan kardinalitas perpotongan untuk setiap pasangan tepercaya (benar, diprediksi). Matriks konfusi untuk masalah klasifikasi adalah matriks kontingensi persegi.

The Scikit belajar memiliki sklearn.metrics.contingency_matrix modul.

Contoh

from sklearn.metrics.cluster import contingency_matrix
x = ["a", "a", "a", "b", "b", "b"]
y = [1, 1, 2, 0, 1, 2]
contingency_matrix(x, y)

Keluaran

array([
   [0, 2, 1],
   [1, 1, 1]
])

Baris pertama keluaran di atas menunjukkan bahwa di antara tiga sampel yang cluster sebenarnya adalah "a", tidak ada yang berada di 0, dua di antaranya ada di 1 dan 1 ada di 2. Sebaliknya, baris kedua menunjukkan bahwa di antara tiga sampel yang cluster sebenarnya adalah "b", 1 di 0, 1 di 1 dan 1 di 2.