Кластеризация - что это и где нужно

Кластеризация - что это и где нужно#

Основы кластеризации#

В отличие от задачи регрессии и классификации, часто стоит вопрос о поиске необнаруженных закономерностей в наборе числовых данных, без предварительно раставленных лэйблов.

Кластерный анализ или сегментация данных, - это разновидность метода обучения без учителя, целью которого является группировка совокупности объектов в кластеры таким образом, чтобы элементы внутри каждого кластера были более связаны (или схожи, в соответствии с подходящим понятием сходства, которое зависит от приложения) друг с другом, чем объекты в разных кластерах. Другими словами, задача состоит в том, чтобы минимизировать внутрикластерные расстояния и максимизировать межкластерные.

Фактически, имеем набор объектов \(\left\{x_i \right\} _{i=1}^{N}\), которые хотим раскидать по n_clusters кластерам согласно какой-либо метрике и алгоритму - задача кластеризации. Заметим, что решение этой задачи неоднозначно (теорема Клейнберга), и различные алгоритмы предположения об общем количестве кластеров приводят к разным результатам.

Three different assumptions about the number of clusters

Можно выделить два основных вида алгоритмов кластеризации:

  • Разделяющая кластеризация: каждый объект принадлежит ровно одному кластеру. Известным алгоритмом, относящимся к этому семейству, является k-means.

  • Иерархическая кластеризация: состоит из множества вложенных кластеров, организованных в виде дерева.

Partitional clustering

Hierarchical clustering

Partitional clustering

Hierarchical clustering

Примечание (о видах кластеризации)

На самом деле видов кластеризации гораздо больше, например, есть алгоритмы, в которых объекты могут быть приписаны одновременно к нескольким кластерам. Или алгоритмы, где важна форма кластеров. Впрочем, как правило, k-means и DBSCAN являются универсальным решением.

Примечание (о циферках)

Численная природа исходных данных оказывается критично важной, так как все алгоритмы кластеризации используют числовые расстояния между объектами. Человечество лишь в последние годы научилось худо бедно аккуратно превращать любые данные в вектора (см. embedding).

Примечание (самое важное - о норме)

Все алгоритмы кластеризации используют расстояние между точками, соответственно, можно получать совершенно другие результаты используя неевклидову норму между векторами. Выбор подходящей метрики - ключевой аспект всей кластеризации (как говорится, не Евклидом едины).

Интерфейс Scikit-Learn#

Scikit-Learn, или коротко Sklearn - библиотека, в которой реализованы практически все используемые сегодня алгоритмы машинного обучения. Нам необходимо познакомиться с интерфейсом библиотеки, чтобы понимать, как ее можно использовать на практике. Далее в курсе мы будем не только использовать готовые реализации из sklearn, но иногда и сами реализовывать алгоритмы в том же духе, в котором это сделано в этой библиотеке (с тем же интерфейсом).

Для реализации алгоритмов машинного обучения в sklearn всегда используется один интерфейс - класс с функциями fit(X, Y) для обучения модели по обучающей выборке и predict(X) (или fit_predict(X)) для возвращения предсказаний на выборке .

При создании класса можно указывать дополнительные параметры, влияющие на работу алгоритма машинного обучения.

Например, такова будет логика работы класса линейной регрессии:

  • При создании класса нужно запомнить коэффициент регуляризации;

  • Задача функции fit - по выборке X и Y найти веса w и сохранить их внутри класса в self.w;

  • Задача функции predict - по весам self.w и X вернуть предсказания

Общая схема решения задачи машинного обучения:

image.png

В sklearn все алгоритмы кластеризации тоже реализованы с помощью классов. Их описание можно почитать здесь https://scikit-learn.org/stable/modules/classes.html#module-sklearn.cluster