Перейти к содержимому

Кластеризация

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

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

Поэтому кластеризацию относят к обучению без учителя.

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

Например, если у нас есть точки на плоскости, алгоритм может найти несколько плотных групп точек. Объекты внутри одной группы похожи друг на друга, а объекты из разных групп отличаются.

Точки до кластеризации Результат кластеризации с выбросами

На левой картинке видно, что точки образуют несколько групп. Кластеризация как раз и состоит в выделении таких групп похожих объектов.

На правой картинке кластеризация уже выполнена: точки, относящиеся к одному кластеру, выделены одним цветом.

Черные точки — выбросы: они не относятся ни к одному найденному кластеру.

Точки на изображениях построены программой:

uses MLABC, PlotML;
begin
var centers := 3;
var (X, y) := Datasets.MakeBlobs(
n := 600,
centers := centers,
clusterStd := 0.6,
seed := 1
);
var xs := X.Col(0);
var ys := X.Col(1);
Plot.Points(xs, ys, y, size := 4);
Plot.Point(3, 3, Colors.Black, 6);
Plot.Point(-4, 0, Colors.Black, 6);
Plot.HideAxesAndGrid();
end.

Точки на плоскости — удобный учебный пример, но кластеризовать можно не только точки по их положению.

Можно кластеризовать любые объекты по разным признакам: форме, цвету, размеру, весу, цене, поведению пользователя и т.д.

Кластеризация объектов по разным признакам

Например, одни и те же фрукты можно разбить на группы по-разному:

  • по форме: яблоки отдельно, груши отдельно;
  • по цвету: зелёные отдельно, жёлтые отдельно;
  • по двум признакам сразу (четыре кластера): зелёные большие, зелёные маленькие, жёлтые большие и жёлтые маленькие.

То, какие кластеры будут найдены, зависит от того, какие признаки мы используем для описания объектов.

Кластеризацию используют, когда нужно найти скрытую структуру в данных:

  • разделить пользователей на группы по поведению;
  • найти похожие товары;
  • сгруппировать документы по темам;
  • обнаружить необычные объекты и выбросы;
  • изучить данные перед построением модели классификации или регрессии.

Большинство алгоритмов кластеризации используют расстояние между объектами.

Если два объекта расположены близко друг к другу в пространстве признаков, алгоритм считает их похожими. Если далеко — непохожими.

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

В ML PascalABC.NET для кластеризации важны два базовых подхода:

  • KMeans — делит данные на заранее заданное число кластеров;
  • DBSCAN — ищет плотные области и может находить шумовые точки.

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