Scikit Learn - การประเมินผลการทำงานแบบคลัสเตอร์

มีฟังก์ชั่นต่างๆที่เราสามารถประเมินประสิทธิภาพของอัลกอริทึมการทำคลัสเตอร์

ต่อไปนี้เป็นฟังก์ชันที่สำคัญและใช้เป็นส่วนใหญ่ที่มอบให้โดย Scikit-learn เพื่อประเมินประสิทธิภาพการทำคลัสเตอร์ -

ดัชนีแรนด์ที่ปรับแล้ว

Rand Index เป็นฟังก์ชันที่คำนวณการวัดความคล้ายคลึงกันระหว่างการทำคลัสเตอร์สองกลุ่ม สำหรับดัชนีแรนด์การคำนวณนี้จะพิจารณาคู่ของตัวอย่างและคู่การนับทั้งหมดที่กำหนดไว้ในคลัสเตอร์ที่เหมือนกันหรือต่างกันในคลัสเตอร์ที่คาดการณ์และจริง หลังจากนั้นคะแนน Raw Rand Index จะถูก 'ปรับสำหรับโอกาส' เป็นคะแนน Adjusted Rand Index โดยใช้สูตรต่อไปนี้ -

$$ Adjusted \: RI = \ left (RI- คาดว่า _ {-} RI \ right) / \ left (max \ left (RI \ right) -Expected _ {-} RI \ right) $$

มีสองพารามิเตอร์คือ labels_trueซึ่งเป็นป้ายกำกับระดับความจริงพื้นดินและ labels_predซึ่งเป็นป้ายกำกับคลัสเตอร์ที่จะประเมิน

ตัวอย่าง

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)

เอาต์พุต

0.4444444444444445

การติดฉลากที่สมบูรณ์แบบจะได้คะแนน 1 และการติดฉลากที่ไม่ถูกต้องหรือการติดฉลากอิสระจะได้คะแนน 0 หรือลบ

คะแนนจากข้อมูลร่วมกัน

ข้อมูลร่วมกันคือฟังก์ชันที่คำนวณข้อตกลงของการมอบหมายงานทั้งสอง มันละเว้นการเรียงสับเปลี่ยน มีรุ่นดังต่อไปนี้ -

ข้อมูลร่วมกันที่เป็นมาตรฐาน (NMI)

Scikit เรียนรู้ได้ sklearn.metrics.normalized_mutual_info_score โมดูล.

ตัวอย่าง

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)

เอาต์พุต

0.7611702597222881

ปรับข้อมูลร่วมกัน (AMI)

Scikit เรียนรู้ได้ sklearn.metrics.adjusted_mutual_info_score โมดูล.

ตัวอย่าง

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)

เอาต์พุต

0.4444444444444448

คะแนน Fowlkes-Mallows

ฟังก์ชัน Fowlkes-Mallows จะวัดความคล้ายคลึงกันของการจัดกลุ่มจุดสองชุด มันอาจถูกกำหนดให้เป็นค่าเฉลี่ยทางเรขาคณิตของความแม่นยำแบบคู่และการเรียกคืน

ในทางคณิตศาสตร์

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

ที่นี่ TP = True Positive - จำนวนคู่ของจุดที่อยู่ในคลัสเตอร์เดียวกันในป้ายกำกับจริงและป้ายที่คาดการณ์ทั้งคู่

FP = False Positive - จำนวนคู่ของจุดที่อยู่ในคลัสเตอร์เดียวกันในป้ายกำกับจริง แต่ไม่อยู่ในป้ายกำกับที่คาดการณ์ไว้

FN = False Negative - จำนวนคู่ของจุดที่อยู่ในคลัสเตอร์เดียวกันในป้ายกำกับที่คาดคะเน แต่ไม่อยู่ในป้ายกำกับจริง

Scikit เรียนรู้มีโมดูล sklearn.metrics.fowlkes_mallows_score -

ตัวอย่าง

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)

เอาต์พุต

0.6546536707079771

ค่าสัมประสิทธิ์ภาพเงา

ฟังก์ชัน Silhouette จะคำนวณค่าเฉลี่ยค่าสัมประสิทธิ์ Silhouette ของตัวอย่างทั้งหมดโดยใช้ค่าเฉลี่ยระยะทางภายในคลัสเตอร์และค่าเฉลี่ยระยะคลัสเตอร์ที่ใกล้ที่สุดสำหรับแต่ละตัวอย่าง

ในทางคณิตศาสตร์

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

นี่คือระยะทางภายในคลัสเตอร์

และ b คือค่าเฉลี่ยระยะคลัสเตอร์ที่ใกล้ที่สุด

การเรียนรู้ Scikit มี sklearn.metrics.silhouette_score โมดูล -

ตัวอย่าง

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

เอาต์พุต

0.5528190123564091

เมทริกซ์ฉุกเฉิน

เมทริกซ์นี้จะรายงานความสำคัญของจุดตัดสำหรับทุกคู่ที่เชื่อถือได้ของ (จริงทำนาย) เมทริกซ์ความสับสนสำหรับปัญหาการจำแนกเป็นเมทริกซ์ฉุกเฉินกำลังสอง

การเรียนรู้ Scikit มี sklearn.metrics.contingency_matrix โมดูล.

ตัวอย่าง

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)

เอาต์พุต

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

แถวแรกของเอาต์พุตด้านบนแสดงให้เห็นว่าในสามตัวอย่างที่มีคลัสเตอร์ที่แท้จริงคือ "a" ไม่มีใน 0 สองใน 1 และ 1 อยู่ใน 2 ในทางกลับกันแถวที่สองแสดงว่าในสามตัวอย่าง ซึ่งคลัสเตอร์ที่แท้จริงคือ“ b” 1 อยู่ใน 0 1 อยู่ใน 1 และ 1 อยู่ใน 2