Кластеризация - что это и где нужно#
Основы кластеризации#
В отличие от задачи регрессии и классификации, часто стоит вопрос о поиске необнаруженных закономерностей в наборе числовых данных, без предварительно раставленных лэйблов.
Кластерный анализ или сегментация данных, - это разновидность метода обучения без учителя, целью которого является группировка совокупности объектов в кластеры таким образом, чтобы элементы внутри каждого кластера были более связаны (или схожи, в соответствии с подходящим понятием сходства, которое зависит от приложения) друг с другом, чем объекты в разных кластерах. Другими словами, задача состоит в том, чтобы минимизировать внутрикластерные расстояния и максимизировать межкластерные.
Фактически, имеем набор объектов \(\left\{x_i \right\} _{i=1}^{N}\), которые хотим раскидать по n_clusters
кластерам согласно какой-либо метрике и алгоритму - задача кластеризации. Заметим, что решение этой задачи неоднозначно (теорема Клейнберга), и различные алгоритмы предположения об общем количестве кластеров приводят к разным результатам.
Можно выделить два основных вида алгоритмов кластеризации:
Разделяющая кластеризация: каждый объект принадлежит ровно одному кластеру. Известным алгоритмом, относящимся к этому семейству, является k-means.
Иерархическая кластеризация: состоит из множества вложенных кластеров, организованных в виде дерева.
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 вернуть предсказания
Общая схема решения задачи машинного обучения:
В sklearn все алгоритмы кластеризации тоже реализованы с помощью классов. Их описание можно почитать здесь https://scikit-learn.org/stable/modules/classes.html#module-sklearn.cluster