Scikit Learn-클러스터링 성능 평가
클러스터링 알고리즘의 성능을 평가할 수있는 다양한 기능이 있습니다.
다음은 클러스터링 성능을 평가하기 위해 Scikit-learn에서 제공하는 중요하고 주로 사용되는 기능입니다.
조정 된 랜드 인덱스
랜드 인덱스는 두 군집 간의 유사성 측정을 계산하는 함수입니다. 이 계산을 위해 랜드 인덱스는 예측 및 실제 클러스터링에서 유사하거나 다른 클러스터에 할당 된 모든 샘플 쌍과 계수 쌍을 고려합니다. 그 후, 원시 Rand 지수 점수는 다음 공식을 사용하여 조정 된 Rand 지수 점수로 '우연에 맞게 조정'됩니다.
$$ 조정 됨 \ : RI = \ left (RI-Expected _ {-} RI \ right) / \ left (max \ left (RI \ right) -Expected _ {-} RI \ right) $$즉, 두 개의 매개 변수가 있습니다. labels_true, 이것은 Ground Truth 클래스 레이블입니다. 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 (Normalized Mutual Information)
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 함수는 평균 군집 내 거리와 각 표본에 대한 평균 가장 가까운 군집 거리를 사용하여 모든 표본의 평균 실루엣 계수를 계산합니다.
수학적으로
$$ S = \ left (ba \ right) / max \ left (a, b \ right) $$여기서 a는 클러스터 내 거리입니다.
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에있는 샘플이 하나도없고, 그 중 2 개는 1에 있고 1은 2에 있음을 보여줍니다. 반면에 두 번째 행은 세 샘플 중 실제 군집은 "b"이고 1은 0, 1은 1, 1은 2입니다.