Все о кластеризации в машинном обучении

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

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

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

Когда алгоритмы кластеризации работают хорошо, они позволяют нам предсказать класс наблюдений без определенного целевого вектора, выявляя скрытые группировки наблюдений. Можно идентифицировать кластеры в данных, используя различные алгоритмы кластеризации. В этой главе будет рассмотрен выбор алгоритмов кластеризации с использованием scikit-learn, а также способы их использования.

Кластеризация с использованием K-средних

Есть k групп наблюдений, которые вы хотите сгруппировать.

Чтобы сгруппировать данные с использованием k-средних, выполните следующие действия:

Это один из наиболее распространенных методов кластеризации с использованием кластеризации k-средних. Используя кластеризацию k-средних, наблюдения группируются в k групп с примерно равными дисперсиями. Гиперпараметр k указывает количество групп. Конкретный пример k-средних:

  1. Для каждой «центральной» точки кластера выбирается случайное местоположение.
  2. Следующие наблюдения:
  3. Каждое наблюдение удалено от k центральных точек.
  4. Наблюдения назначаются кластерам на основе их ближайших центральных точек.
  5. Центры кластеров перемещаются в их средства (т.е. центры).
  6. Повторяйте шаги 2 и 3, пока членство в кластере не изменится.

Алгоритм останавливается в этой точке, потому что он сошелся.

K-средние имеют три важные характеристики. При кластеризации k-средних предполагается, что кластеры выпуклые (например, круги или сферы). Вторая особенность заключается в том, что все функции имеют одинаковый размер. Это предположение было выполнено путем стандартизации функций в нашем решении. Третьей характеристикой является баланс между группами (т. е. каждая группа имеет одинаковое количество наблюдений). В случае, если мы не можем выполнить эти предположения, мы можем попробовать другой метод кластеризации.

KMeans — это реализация кластеризации k-средних от scikit-learn. n_clusters устанавливает количество кластеров k, что является наиболее важным параметром. Возможно, природа данных определяет значение k, но во многих случаях мы этого не знаем. Используя некоторые критерии, мы выберем k в этих случаях. Например, коэффициенты силуэта определяют, насколько кластеры похожи друг на друга. Наш компьютер мог бы использовать все свои ядра, поскольку кластеризация k-средних требует больших вычислительных ресурсов. Для этого установите для n_jobs значение -1.

Наше решение немного обмануло, используя данные цветка ириса, которые, как мы знаем, имеют три класса. Таким образом, k = 3. Каждое наблюдение можно классифицировать с помощью labels_:

# View predict class
Model.labels_

Основываясь на сравнении истинного класса наблюдения с k-средними, можно увидеть, что k-средние работали достаточно хорошо, несмотря на различия в метках классов (0, 1 и 2).

# View true class
iris.target

Когда количество кластеров выбрано ошибочно, производительность k-средних падает значительно, даже критически.

Обученный кластер также можно использовать для прогнозирования ценности новых наблюдений, как и в случае с другими алгоритмами scikit-learn:

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

# View cluster centers
model.cluster_centers_

Ускорение кластеризации K-средних

Метод k-средних занимает слишком много времени, чтобы сгруппировать наблюдения в k групп.

Если вы используете мини-пакет k-средних, вы можете:

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

Между MiniBatchKMeans и KMeans есть одно существенное различие: параметр batch_size. Каждая партия содержит случайное количество наблюдений. По мере увеличения размера пакета процесс обучения становится более затратным в вычислительном отношении.

Использование среднего сдвига для кластеризации

При группировке наблюдений нет необходимости предполагать количество или форму кластеров.

Кластеризацию среднего сдвига можно использовать следующим образом:

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

Несмотря на свою простоту, механизм среднего смещения может быть несколько трудным для понимания. Поэтому лучше всего использовать аналогию. Предположим, что на затуманенном футбольном поле стоят 100 человек (т. е. наши наблюдения). Туман ограничивает способность человека видеть вдаль. Люди каждую минуту оглядываются и делают шаги навстречу большинству людей, которых видят. Со временем толпы становятся все больше и больше, поскольку люди постоянно делают к ним шаги. В результате вокруг поля собираются скопления людей. Кластеры назначаются людям в соответствии с их положением.

Более сложная реализация среднего смещения доступна в scikit-learn и называется MeanShift. Есть два важных параметра, связанных со MeanShift. Чтобы определить направление сдвига, наблюдение использует радиус (т. Е. Ядро) для определения площади. Человек мог бы видеть, как далеко сквозь туман, если бы у него была полоса пропускания, как показано в нашей аналогии. Этот параметр можно установить вручную, но по умолчанию разумная пропускная способность оценивается автоматически (со значительными вычислительными затратами). Другая проблема со смещением средних состоит в том, что иногда в ядре наблюдения нет других наблюдений. У нас есть футбольное поле, где люди не видят друг друга. Всем этим «сиротским» наблюдениям по умолчанию присваивается ядро ​​ближайшего наблюдения. Однако мы можем игнорировать эти потерянные наблюдения, установив cluster_all=False. В этом случае бесхозные наблюдения будут помечены как -1.

Использование DBSCAN для кластеризации

Наблюдения должны быть сгруппированы в кластеры высокой плотности.

Кластер DBSCAN, используя следующий метод:

Кластеры представляют собой области плотно упакованных наблюдений, поэтому DBSCAN не делает никаких предположений о форме кластеров. В DBSCAN, в частности:

  1. Наблюдение xi выбирается случайно.
  2. Xi считается кластером, если у него есть хотя бы два близких соседа.
  3. Сосед каждого соседа xi рекурсивно повторяется, за ним следует сосед соседа и так далее. Наблюдения за кластерами можно резюмировать следующим образом.
  4. Как только на шаге 3 заканчиваются ближайшие наблюдения, выбирается новая случайная точка (т. е. шаг 1 повторяется).

По завершении у нас будут основные наблюдения для ряда кластеров. Наконец, любое наблюдение не в основной выборке, но близкое к кластеру считается выбросом, в то время как любое наблюдение, не входящее в кластер, включается в кластер.

DBSCAN требует установки следующих параметров:

прибыль на акцию

Наблюдения должны находиться на расстоянии не менее 1000 метров друг от друга, чтобы считаться соседними.

min_samples

Чтобы наблюдение считалось основным наблюдением, оно должно иметь расстояние не менее eps от других наблюдений.

метрика

EPS использует одну из нескольких метрик расстояния, например, минковского или евклидова (обратите внимание, что параметр p может использоваться для указания мощности метрики Минковского, если используется расстояние Минковского).

Наши обучающие данные были разделены на два кластера, 0 и 1, а наблюдения за выбросами помечены -1.

# Show cluster membership
model.labels_

Кластеризация с использованием иерархического слияния

Иерархия кластеров — лучший способ сгруппировать наблюдения.

Следует использовать агломеративную кластеризацию:

Алгоритм иерархической кластеризации, агрегированная кластеризация является мощным и гибким. Процесс агломеративной кластеризации начинается со всех наблюдений как их собственных кластеров. На следующем этапе кластеры, подходящие для слияния, группируются вместе на основе некоторых критериев. В этом процессе кластеры растут до тех пор, пока не будет достигнута некоторая конечная точка. В scikit-learn AgglomerativeClustering использует параметр linkage для выбора стратегии слияния, которая сводит к минимуму следующее:

  1. Вариант объединенного кластера (палата)
  2. Наблюдательное расстояние между скоплениями (среднее)
  3. Максимальное расстояние наблюдения от другого наблюдения (полное)

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

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

# Show cluster membership
model.labels_

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