Scikit Learn - Đánh giá Hiệu suất Phân cụm

Có nhiều chức năng khác nhau với sự trợ giúp của chúng tôi có thể đánh giá hiệu suất của các thuật toán phân cụm.

Sau đây là một số hàm quan trọng và được sử dụng nhiều nhất do Scikit-learning đưa ra để đánh giá hiệu suất phân cụm -

Chỉ số ngẫu nhiên được điều chỉnh

Rand Index là một hàm tính toán độ đo tương tự giữa hai phân nhóm. Đối với chỉ số rand tính toán này xem xét tất cả các cặp mẫu và các cặp đếm được gán trong các cụm tương tự hoặc khác nhau trong phân nhóm được dự đoán và đúng. Sau đó, điểm Rand Index thô được 'điều chỉnh theo cơ hội' thành điểm Rand được điều chỉnh bằng cách sử dụng công thức sau:

$$ Đã điều chỉnh \: RI = \ left (RI-Dự kiến ​​_ {-} RI \ phải) / \ left (tối đa \ trái (RI \ phải)-Dự kiến ​​_ {-} RI \ phải) $$

Nó có hai tham số cụ thể là labels_true, là nhãn lớp chân lý cơ bản và labels_pred, là các nhãn cụm để đánh giá.

Thí dụ

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)

Đầu ra

0.4444444444444445

Ghi nhãn hoàn hảo sẽ được điểm 1 và ghi nhãn xấu hoặc ghi nhãn độc lập sẽ bị điểm 0 hoặc âm.

Điểm dựa trên thông tin lẫn nhau

Thông tin lẫn nhau là một chức năng tính toán thỏa thuận của hai nhiệm vụ. Nó bỏ qua các hoán vị. Có các phiên bản sau:

Thông tin lẫn nhau được chuẩn hóa (NMI)

Scikit học có sklearn.metrics.normalized_mutual_info_score mô-đun.

Thí dụ

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)

Đầu ra

0.7611702597222881

Thông tin tương hỗ được điều chỉnh (AMI)

Scikit học có sklearn.metrics.adjusted_mutual_info_score mô-đun.

Thí dụ

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)

Đầu ra

0.4444444444444448

Điểm Fowlkes-Mallows

Hàm Fowlkes-Mallows đo mức độ giống nhau của hai nhóm của một tập hợp các điểm. Nó có thể được định nghĩa là giá trị trung bình hình học của độ chính xác và độ thu hồi từng cặp.

Về mặt toán học,

$$ FMS = \ frac {TP} {\ sqrt {\ left (TP + FP \ right) \ left (TP + FN \ right)}} $$

Đây, TP = True Positive - số cặp điểm thuộc cùng một cụm trong nhãn đúng cũng như dự đoán cả hai.

FP = False Positive - số lượng cặp điểm thuộc cùng một cụm trong nhãn đúng nhưng không thuộc nhãn dự đoán.

FN = False Negative - số lượng cặp điểm thuộc cùng một cụm trong các nhãn dự đoán nhưng không thuộc các nhãn thực.

Học Scikit có mô-đun sklearn.metrics.fowlkes_mallows_score -

Thí dụ

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)

Đầu ra

0.6546536707079771

Hệ số Silhouette

Chức năng Silhouette sẽ tính toán Hệ số Silhouette trung bình của tất cả các mẫu bằng cách sử dụng khoảng cách trung bình trong cụm và khoảng cách trung bình gần nhất cho mỗi mẫu.

Về mặt toán học,

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

Ở đây, a là khoảng cách trong cụm.

và b là khoảng cách trung bình của cụm gần nhất.

Học Scikit có sklearn.metrics.silhouette_score mô-đun -

Thí dụ

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

Đầu ra

0.5528190123564091

Ma trận dự phòng

Ma trận này sẽ báo cáo số lượng giao nhau cho mọi cặp đáng tin cậy (đúng, dự đoán). Ma trận nhầm lẫn cho các bài toán phân loại là một ma trận dự phòng vuông.

Học Scikit có sklearn.metrics.contingency_matrix mô-đun.

Thí dụ

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)

Đầu ra

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

Hàng đầu tiên của kết quả ở trên cho thấy rằng trong số ba mẫu có cụm thực là “a”, không có mẫu nào ở 0, hai trong số đó ở 1 và 1 thuộc về 2. Mặt khác, hàng thứ hai cho thấy rằng trong số ba mẫu có cụm đúng là “b”, 1 ở 0, 1 ở 1 và 1 ở 2.