Кластеризация — это процесс группировки объектов со схожими объектами.
Что такое кластеризация?
Кластеризация – это форма неконтролируемого машинного обучения, при которой наблюдения группируются в кластеры на основе сходства их функций. Этот вид машинного обучения считается неконтролируемым, поскольку он не использует ранее известные значения label для обучения модели. В модели кластеризации метка — это кластер, которому назначается наблюдение исключительно на основе его характеристик.
Например, предположим, что ботаник наблюдает за образцом цветов и записывает количество лепестков и листьев на каждом цветке. Возможно, будет полезно сгруппировать эти цветы в группы на основе сходства их характеристик.
Есть много способов сделать эту группировку. Например, если у большинства цветов одинаковое количество листьев, их можно сгруппировать в цветы с большим или малым количеством лепестков. Альтернативно, если количество лепестков и листьев значительно различается, можно обнаружить закономерность, например, цветы со многими листьями, также имеющими много лепестков. Цель алгоритма кластеризации — найти оптимальный способ разбить набор данных на группы. Что означает «оптимальный» зависит как от используемого алгоритма, так и от предоставленного набора данных.
Хотя этот пример цветка может быть простым для человека, используя всего несколько образцов, по мере того, как набор данных увеличивается до тысяч образцов или более чем двух объектов, алгоритмы кластеризации становятся полезными для быстрого разделения набора данных на группы.
В отличие от машинного обучения с учителем, обучение без учителя используется, когда нет «основной истины», на основе которой можно было бы обучать и проверять прогнозы меток. Наиболее распространенной формой обучения без учителя является кластеризация, которая концептуально аналогична классификации, за исключением того, что данные обучения не включают известные значения для прогнозируемой метки класса.
Кластеризация работает путем разделения обучающих случаев на основе сходств, которые можно определить по значениям их признаков. Подумайте об этом так; числовые характеристики данного объекта можно рассматривать как векторные координаты, которые определяют положение объекта в n-мерном пространстве. Цель модели кластеризации — идентифицировать группы или кластеры объектов, которые расположены близко друг к другу, но при этом отделены от других кластеров.
Например, давайте посмотрим на набор данных, содержащий измерения различных видов семян пшеницы.
import pandas as pd # load the training dataset !wget https://raw.githubusercontent.com/MicrosoftDocs/mslearn-introduction-to-machine-learning/main/Data/ml-basics/seeds.csv data = pd.read_csv('seeds.csv') # Display a random sample of 10 observations (just the features) features = data[data.columns[0:6]] features.sample(10) area perimeter compactness kernel_length kernel_width asymmetry_coefficient 164 11.140 12.790 0.8558 5.011 2.794 6.388 69 12.730 13.750 0.8458 5.412 2.882 3.533 124 15.990 14.890 0.9064 5.363 3.582 3.336 153 11.180 13.040 0.8266 5.220 2.693 3.332 99 18.720 16.340 0.8810 6.219 3.684 2.188 47 14.990 14.560 0.8883 5.570 3.377 2.958 23 12.080 13.230 0.8664 5.099 2.936 1.415 89 20.880 17.050 0.9031 6.450 4.032 5.016 72 17.260 15.730 0.8763 5.978 3.594 4.539 96 19.310 16.590 0.8815 6.341 3.810 3.477
Как видите, набор данных содержит шесть точек данных (или признаков) для каждого экземпляра (наблюдения) начального значения. Таким образом, вы можете интерпретировать их как координаты, описывающие местоположение каждого экземпляра в шестимерном пространстве.
Конечно, шестимерное пространство сложно визуализировать в трехмерном мире или на двухмерном сюжете; поэтому мы воспользуемся математическим методом под названием Анализ главных компонентов (PCA) для анализа взаимосвязей между объектами и суммирования каждого наблюдения в виде координат для двух главных компонентов – другими словами, мы переведем значения шестимерных функций в двумерные координаты.
from sklearn.preprocessing import MinMaxScaler from sklearn.decomposition import PCA # Normalize the numeric features so they're on the same scale scaled_features = MinMaxScaler().fit_transform(features[data.columns[0:6]]) # Get two principal components pca = PCA(n_components=2).fit(scaled_features) features_2d = pca.transform(scaled_features) features_2d[0:10] array([[ 0.11883593, -0.09382469], [ 0.0696878 , -0.31077233], [-0.03499184, -0.37044705], [-0.06582089, -0.36365235], [ 0.32594892, -0.37695797], [-0.02455447, -0.31060184], [-0.00769646, -0.07594931], [-0.05646955, -0.26696284], [ 0.38196305, -0.05149471], [ 0.35701044, -0.17697998]])
Теперь, когда у нас есть точки данных, переведенные в два измерения, мы можем визуализировать их на графике:
import matplotlib.pyplot as plt %matplotlib inline plt.scatter(features_2d[:,0],features_2d[:,1]) plt.xlabel('Dimension 1') plt.ylabel('Dimension 2') plt.title('Data') plt.show()
Надеюсь, вы сможете увидеть по крайней мере две, а возможно и три, достаточно различные группы точек данных; но здесь кроется одна из фундаментальных проблем кластеризации: без известных меток классов как узнать, на сколько кластеров следует разделить ваши данные?
Один из способов выяснить это — использовать выборку данных для создания серии моделей кластеризации с увеличивающимся количеством кластеров и измерения того, насколько плотно точки данных сгруппированы внутри каждого кластера. Метрикой, часто используемой для измерения этой плотности, является сумма квадратов внутри кластера (WCSS). Более низкие значения означают, что точки данных находятся ближе. Затем вы можете построить WCSS для каждой модели.
График показывает значительное снижение WCSS (следовательно, большую герметичность) при увеличении количества кластеров с одного до двух, а также дальнейшее заметное снижение с двух до трех кластеров. После этого снижение становится менее выраженным, в результате чего на графике появляется «колено» на отметке трех кластеров. Это хороший признак того, что существует два-три достаточно хорошо разделенных кластера точек данных.
Приятного обучения!
Далее ›› Обучение и оценка моделей кластеризации (2/2)