Кластеризация — это процесс группировки объектов со схожими объектами.

Что такое кластеризация?

Кластеризация – это форма неконтролируемого машинного обучения, при которой наблюдения группируются в кластеры на основе сходства их функций. Этот вид машинного обучения считается неконтролируемым, поскольку он не использует ранее известные значения 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)