Материал, на который направлена ​​эта статья

  • KMeans
  • Силуэт Оценка
  • Маркетинговая сегментация
  • GMM против KMeans

Вступление

Что такое кластеризация? Кластеризация - это категория моделей машинного обучения без учителя.

Что же тогда такое обучение без учителя? Обучение без учителя - это класс алгоритмов, которые принимают набор данных из немаркированных примеров и для каждого вектора признаков x в качестве входных данных либо преобразуют его в другой вектор, либо в значение, которое можно использовать для решения практической задачи. Например, в кластеризации это полезное значение - идентификатор кластера.

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

KMeans

Алгоритм KMeans выполняет поиск k количества кластеров (число k должно быть известно заранее) в немаркированном многомерном наборе данных. Для алгоритма KMeans оптимальная кластеризация имеет следующие свойства:

  • «Центр кластера» - это среднее арифметическое всех точек, принадлежащих кластеру.
  • Каждая точка находится ближе к своему центру кластера, чем к другим центрам кластера.

KMeans реализован в sklearn.cluster.KMeans, поэтому давайте сгенерируем двухмерный образец набора данных и рассмотрим результаты k-средних.

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

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

Как работает алгоритм? KMeans использует итеративный подход, известный как максимальное ожидание. В контексте алгоритма KMeans максимальное ожидание состоит из следующих шагов:

  1. Случайно угадать центры кластеров
  2. Повторите шаги 3 и 4 до схождения
  3. E-Step: назначьте точки ближайшему центру кластера
  4. M-Step: установите центры кластеров на среднее значение

Алгоритм KMeans достаточно прост, чтобы мы могли написать его действительно базовую реализацию всего в несколько строк кода.

Хорошо протестированные реализации, такие как scikit-learn, делают еще несколько вещей под капотом, но эта тривиальная реализация позволяет нам увидеть одно предостережение относительно максимизации ожидания.

Давайте протестируем эту реализацию на нашем примере набора данных.

Вроде все нормально, да? Теперь давайте попробуем изменить случайное начальное число.

Что случилось??? Что ж, есть несколько проблем, о которых следует помнить при использовании подхода максимизации ожидания. Одна из них заключается в том, что глобально оптимальный результат не может быть достигнут. Хотя процедура E – M гарантирует улучшение результата на каждом этапе, нет никакой гарантии, что это приведет к глобально оптимальному результату. Вот почему лучшие реализации, такие как Scikit-Learn, по умолчанию запускают алгоритм для нескольких начальных предположений. (В Scikit-Learn этим управляет параметр n_init, который по умолчанию равен 10)

Другой недостаток алгоритма KMeans заключается в том, что он ограничен линейными границами кластера. Фундаментальное предположение, что точки будут ближе к центру своего кластера, чем к другим, означает, что алгоритм часто будет неэффективен при работе с кластерами со сложной геометрией. Рассмотрим следующий пример, а также результаты, полученные с помощью типичного подхода KMeans.

К счастью, эта проблема легко решается с помощью одной версии ядра KMeans, которое реализовано в Scikit-Learn в составе оценщика SpectralClustering.

Другие проблемы, с которыми вам, возможно, придется столкнуться при использовании алгоритма KMeans:

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

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

Оценка силуэта

Анализ силуэта можно использовать для изучения расстояния между полученными кластерами. График силуэта отображает меру того, насколько близко каждая точка в одном кластере находится к точкам в соседних кластерах, и, таким образом, обеспечивает способ визуальной оценки таких параметров, как количество кластеров. Эта мера имеет диапазон [-1, 1].

Коэффициенты силуэта (так называются эти значения) рядом с +1 указывают на то, что образец находится далеко от соседних кластеров. Значение 0 указывает, что выборка находится на границе принятия решения между двумя соседними кластерами или очень близко к ней, а отрицательные значения указывают на то, что эти выборки могли быть назначены неправильному кластеру.

Коэффициент силуэта рассчитывается с использованием среднего расстояния внутри кластера (a) и среднего расстояния до ближайшего кластера (b) для каждого образца. Коэффициент силуэта для образца равен (b - a) / max (a, b). Чтобы уточнить, b - это расстояние между образцом и ближайшим кластером, частью которого образец не является. Обратите внимание, что коэффициент силуэта определяется только в том случае, если количество меток равно 2 ‹= n_labels‹ = n_samples - 1.

В scikit-learn есть sklearn.metrics.sil Silhouette_score, который используется для вычисления среднего коэффициента силуэта всех образцов, а также sklearn.metrics.sil Silhouette_samples , который вычисляет коэффициент силуэта для каждого образца.

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

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

Маркетинговая сегментация

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

В следующем примере мы будем использовать данные с сайта kaggle.

Файл CSV можно скачать здесь или с помощью интерфейса командной строки kaggle с помощью следующей команды

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

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

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

Основываясь на этих графиках, наилучшее количество кластеров кажется 4, потому что

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

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

Итак, на основе кластерных центров мы можем определить 4 архетипа клиентов

  • Молодые мужчины с высокими показателями расходов
  • Пожилые мужчины с низкими показателями расходов
  • Молодые женщины с высокими показателями расходов
  • Пожилые женщины с низкими показателями расходов

GMM против KMeans

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

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

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

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

Вкратце, это два основных недостатка KMeans:

  • отсутствие гибкости в форме кластера
  • отсутствие вероятностного кластерного назначения

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

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

Переменная вероятностей представляет собой массив чисел, имеющий форму количества выборок x количества кластеров. Каждая строка соответствует одной точке данных, а j -й столбец соответствует вероятности того, что выборка принадлежит j-му кластеру.

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

  1. Выберите исходные предположения для местоположения и формы
  2. Повторите шаги 3 и 4 до схождения
  3. E-Step: для каждой точки найдите веса, кодирующие вероятность членства в каждом кластере.
  4. M-Step: для каждого кластера обновите его местоположение, нормализацию и форму на основе всех точек данных, используя веса.

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

Следующая функция поможет нам визуализировать расположение и форму кластеров GMM.

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

Чтобы сделать это преимущество GMM более очевидным, мы создадим новый образец набора данных, имеющий другую форму.

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

Эти результаты показывают, что GMM имеет гораздо большую гибкость в отношении формы кластера.

Также обратите внимание, что для предыдущего подбора гиперпараметр covariance_type был установлен иначе. Этот гиперпараметр контролирует степени свободы формы каждого кластера.

  • По умолчанию используется covariance_type = ”diag”, что означает, что размер кластера по каждому измерению может быть установлен независимо, при этом результирующий эллипс ограничивается выравниванием по осям.
  • Немного более простая и быстрая модель - covariance_type = ”spherical”, которая ограничивает форму кластера так, чтобы все измерения были равны. Результирующая кластеризация будет иметь характеристики, аналогичные характеристикам KMeans, но не полностью эквивалентна.
  • Более сложная и дорогостоящая в вычислительном отношении модель (особенно по мере роста числа измерений) заключается в использовании covariance_type = ”full”, что позволяет моделировать каждый кластер в виде эллипса с произвольной ориентацией.