Метод локтя K-Means и анализ силуэта с помощью Yellowbrick и Scikit-Learn PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Метод K-Means Elbow и анализ силуэта с помощью Yellowbrick и Scikit-Learn

Введение

K-Means — один из самых популярных алгоритмов кластеризации. Имея центральные точки в кластере, он группирует другие точки в зависимости от их расстояния до этой центральной точки.

Недостатком K-Means является необходимость выбирать количество кластеров, K, до запуска алгоритма, который группирует точки.

Если вы хотите прочитать подробное руководство по кластеризации K-средних, взгляните на «Кластеризация K-средних с помощью Scikit-Learn».

Метод локтя и анализ силуэта

Наиболее часто используемые методы для выбора числа Ks являются Метод локтя и Анализ силуэта.

Для облегчения выбора Ks Желтый кирпич библиотека завершает код циклами for и графиком, который мы обычно записываем в 4 строки кода.

Чтобы установить Yellowbrick прямо из ноутбука Jupyter, запустите:

! pip install yellowbrick

Давайте посмотрим, как это работает для знакомого набора данных, который уже является частью Scikit-learn. Ирис набор данных.

Первым шагом является импорт набора данных, KMeans и yellowbrick библиотеки и загрузите данные:

from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from yellowbrick.cluster import KElbowVisualizer, SilhouetteVisualizer

iris = load_iris()

Обратите внимание, здесь мы импортируем KElbowVisualizer и SilhouetteVisualizer от yellowbrick.cluster, это модули, которые мы будем использовать для визуализации результатов Elbow и Silhouette!

После загрузки набора данных в data Ключ связки (тип данных, являющийся расширением словаря) — это значения точек, которые мы хотим сгруппировать. Если вы хотите узнать, что означают числа, взгляните на iris['feature_names'].

Известно, что набор данных Iris содержит три типа ирисов: 'versicolor', 'virginica' и 'setosa'. Вы также можете ознакомиться с классами в iris['target_names'] проверять.

Итак, у нас есть 4 функции для кластеризации, и они должны быть разделены на 3 разных кластера в соответствии с тем, что мы уже знаем. Давайте посмотрим, подтвердят ли это наши результаты с помощью метода локтя и анализа силуэта.

Сначала мы выберем значения функций:

print(iris['feature_names']) 
print(iris['target_names']) 

X = iris['data']

Затем мы можем создать KMeans модель, KElbowVisualizer() экземпляр, который получит эту модель вместе с количеством ks, для которых будет вычислена метрика, в данном случае из 2 - 11 Кс.

После этого мы подгоняем визуализатор к данным с помощью fit() и отображать график с show(). Если метрика не указана, визуализатор использует искажение метрика, которая вычисляет сумму квадратов расстояний от каждой точки до назначенного ей центра:

model = KMeans(random_state=42)

elb_visualizer = KElbowVisualizer(model, k=(2,11))
elb_visualizer.fit(X)    
elb_visualizer.show()  

Теперь у нас уже есть Колено оценки искажения для кластеризации KMeans график с отметкой вертикальной линией, которая была бы лучшим числом ks, в этом случае, 4.

Кажется, что метод локтя с метрикой искажения был не лучшим выбором, если мы не знали фактического количества кластеров. Будет ли Силуэт также указывать, что есть 4 кластера? Чтобы ответить на этот вопрос, нам просто нужно повторить последний код с моделью с 4 кластерами и другим объектом визуализатора:

model_4clust = KMeans(n_clusters = 4, random_state=42)

sil_visualizer = SilhouetteVisualizer(model_4clust)
sil_visualizer.fit(X)    
sil_visualizer.show()

оценка силуэта для кластера k означает кластер с использованием метода локтя

Код отображает График силуэта кластеризации KMeans для 150 выборок в 4 центрах. Чтобы проанализировать эти кластеры, нам нужно посмотреть на значение коэффициента силуэта (или балла), его лучшее значение ближе к 1. Среднее значение, которое мы имеем, равно 0.5, отмеченный вертикальной линией, и не так хорошо.

Нам также нужно посмотреть на распределение между кластерами — хороший график имеет схожие размеры сгруппированных областей или хорошо распределенных точек. На этом графике есть 3 меньших кластера (номер 3, 2, 1) и один больший кластер (номер 0), что не соответствует ожидаемому результату.

Ознакомьтесь с нашим практическим руководством по изучению Git с рекомендациями, принятыми в отрасли стандартами и прилагаемой памяткой. Перестаньте гуглить команды Git и на самом деле изучить это!

Давайте повторим тот же график для 3 кластеров, чтобы увидеть, что произойдет:

model_3clust = KMeans(n_clusters = 3, random_state=42)

sil_visualizer = SilhouetteVisualizer(model_3clust)
sil_visualizer.fit(X)    
sil_visualizer.show()

силуэт для кластеров kmeans

Изменяя количество кластеров, оценка силуэта получила 0.05 выше, и кластеры более сбалансированы. Если бы мы не знали фактического количества кластеров, экспериментируя и комбинируя оба метода, мы бы выбрали 3 вместо 2 как число Ks.

Это пример того, как важно сочетать и сравнивать различные показатели, визуализировать данные и экспериментировать с различными значениями кластеров, чтобы привести результат в правильном направлении. А также, как наличие библиотеки, облегчающей этот анализ, может помочь в этом процессе!

Отметка времени:

Больше от Стекабьюс