Scikit Learn - оценка производительности кластеризации
Существуют различные функции, с помощью которых мы можем оценить производительность алгоритмов кластеризации.
Ниже приведены некоторые важные и наиболее часто используемые функции, данные Scikit-learn для оценки производительности кластеризации.
Скорректированный индекс ранда
Rand Index - это функция, которая вычисляет меру сходства между двумя кластерами. Для этого вычисления рандомный индекс рассматривает все пары выборок и счетные пары, которые назначены в одинаковые или разные кластеры в предсказанной и истинной кластеризации. После этого исходный балл Rand Index «скорректирован на случайность» в скорректированный рейтинг Rand Index с использованием следующей формулы:
$$ Скорректировано \: RI = \ left (RI-Expected _ {-} 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
Оценка Фаулкса-Мэллоуса
Функция Фаулкса-Маллоуса измеряет сходство двух кластеризации набора точек. Его можно определить как среднее геометрическое для попарной точности и полноты.
Математически,
$$ FMS = \ frac {TP} {\ sqrt {\ left (TP + FP \ right) \ left (TP + FN \ right)}} $$Вот, TP = True Positive - количество пар точек, принадлежащих одним и тем же кластерам как в истинных, так и в предсказанных метках.
FP = False Positive - количество пар точек, принадлежащих одним и тем же кластерам в истинных метках, но не в предсказанных метках.
FN = False Negative - количество пар точек, принадлежащих одним и тем же кластерам в предсказанных метках, но не в истинных метках.
У Scikit learn есть модуль 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 = \ влево (ба \ вправо) / макс \ влево (а, б \ вправо) $$Здесь 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, два из них находятся в 1, а 1 - в 2. С другой стороны, вторая строка показывает, что среди трех выборок чей истинный кластер - «b», 1 - в 0, 1 - в 1, а 1 - в 2.