Обзор

  • K-Means Clustering — простой, но мощный алгоритм в науке о данных.
  • Существует множество реальных приложений кластеризации K-средних (некоторые из которых мы рассмотрим здесь).
  • Это подробное руководство познакомит вас с миром кластеризации и кластеризации K-средних, а также с реализацией на Python для реального набора данных.

Введение: что такое кластеризация?

«Кластеризация помогает нам понять наши данные уникальным способом — группируя вещи в — как вы уже догадались — кластеры».

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

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

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

Формально можно сказать, что:

Кластеризация — это процесс разделения всех данных на группы (также известные как кластеры) на основе закономерностей в данных.

Кластеризация: проблема обучения без учителя

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

Или проект, где ваша задача предугадать, одобрят кредит или нет:

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

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

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

Такие задачи без какой-либо фиксированной целевой переменной известны как задачи обучения без учителя. В этих задачах у нас есть только независимые переменные и нет целевой/зависимой переменной.

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

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

Свойства кластеров

Как насчет другого примера? Возьмем банк, который хочет сегментировать своих клиентов. Для простоты предположим, что банк хочет использовать доход и долг только для сегментации. Они собрали данные о клиентах и ​​использовали точечную диаграмму для их визуализации:

Свойство 1

Все точки данных в кластере должны быть похожи друг на друга. Позвольте мне проиллюстрировать это на приведенном выше примере:

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

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

Свойство 2

Точки данных из разных кластеров должны быть как можно более разными. Это интуитивно понятно, если вы усвоили указанное выше свойство. Давайте снова возьмем тот же пример, чтобы понять это свойство:

Как вы думаете, какой из этих случаев даст нам лучшие кластеры? Если вы посмотрите на случай I:

Покупатели в красном и синем кластерах очень похожи друг на друга. Четыре верхних точки в красном кластере обладают теми же свойствами, что и два лучших клиента в синем кластере. У них высокий доход и высокая стоимость долга. Здесь мы сгруппировали их по-разному. Принимая во внимание, что если вы посмотрите на случай II:

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

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

До сих пор мы понимали, что такое кластеризация и различные свойства кластеров. Но зачем вообще нужна кластеризация? Давайте развеем это сомнение в следующем разделе и рассмотрим некоторые приложения кластеризации.

Применение кластеризации в реальных сценариях

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

Сегментация клиентов

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

Кластеризация документов

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

Сегментация изображения

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

Механизмы рекомендаций

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

Понимание различных показателей оценки

Основная цель кластеризации — не просто создавать кластеры, а создавать хорошие и значимые кластеры. Мы видели это в приведенном ниже примере:

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

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

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

Инерция

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

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

Как вы думаете, каким должно быть значение инерции для хорошего кластера? Хорошо ли маленькое инерционное значение или нам нужно большее значение? Мы хотим, чтобы точки в одном кластере были похожи друг на друга, верно? Следовательно, расстояние между ними должно быть как можно меньше.

Имея это в виду, мы можем сказать, что чем меньше значение инерции, тем лучше наши кластеры.

Индекс Данна

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

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

Здесь может вступить в действие индекс Данна.

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

Индекс Данна представляет собой отношение минимума межкластерных расстояний к максимуму внутрикластерных расстояний.

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

Кроме того, знаменатель должен быть минимальным, чтобы максимизировать индекс Данна. Здесь мы берем максимальное внутрикластерное расстояние. Опять же, интуиция здесь та же. Максимальное расстояние между центрами кластеров и точками должно быть минимальным, что в конечном итоге обеспечит компактность кластеров.

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

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

Существует алгоритм, который пытается минимизировать расстояние между точками в кластере и их центром тяжести — метод кластеризации k-средних.

K-means — это алгоритм на основе центроида или алгоритм на основе расстояния, в котором мы вычисляем расстояния, чтобы назначить точку кластеру. В K-Means каждый кластер связан с центроидом.

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

Алгоритм Kmeans — это итеративный алгоритм, который пытается разбить набор данных на предварительно определенные K отдельные непересекающиеся подгруппы (кластеры), где каждая точка данных принадлежит только к одной группе. Он пытается сделать точки данных внутри кластера как можно более похожими, в то же время сохраняя кластеры как можно более разными (далекими). Он назначает точки данных кластеру таким образом, чтобы сумма квадрата расстояния между точками данных и центроидом кластера (среднее арифметическое всех точек данных, принадлежащих этому кластеру) была минимальной. Чем меньше вариаций у нас внутри кластеров, тем более однородны (похожи) точки данных в одном и том же кластере.

Давайте теперь возьмем пример, чтобы понять, как на самом деле работает K-Means:

Шаг 1: Выберите количество кластеров K

Первым шагом в KMeans является выбор количества кластеров, K.

Шаг 2: Выберите K случайных точек из данных в качестве центроидов.

Затем мы случайным образом выбираем центроид для каждого кластера. Инициализируйте центроиды, сначала перетасовав набор данных, а затем случайным образом выбрав K точек данных для центроидов без замены. Допустим, мы хотим иметь 2 кластера, поэтому здесь k равно 2. Затем мы случайным образом выбираем центр тяжести:

Шаг 3: Назначьте все точки ближайшему центроиду кластера.

После того, как мы инициализировали центроиды, мы назначаем каждую точку ближайшему центроиду кластера:

Шаг 4: Пересчитайте центроиды вновь образованных кластеров.

Теперь, когда мы присвоили все точки любому кластеру, следующим шагом будет вычисление центроидов вновь образованных кластеров. Вычисление центроидов для кластеров выполняется путем получения СРЕДНЕГО значения всех точек данных, принадлежащих каждому кластеру:

Существует еще один алгоритм K-Medioids, который делает то же самое, но на этом этапе он берет МЕДИАНУ

Шаг 5: Повторите шаги 3 и 4.

Затем повторяем шаги 3 и 4:

Этап вычисления центроида и назначения всех точек кластеру в зависимости от их расстояния от центроида — это одна итерация. Но подождите — когда мы должны остановить этот процесс? Это не может длиться до вечности, верно?

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

По сути, есть три критерия остановки, которые можно использовать для остановки алгоритма K-средних:

  1. Центроиды новообразованных кластеров не меняются
  2. Точки остаются в одном кластере
  3. Достигнуто максимальное количество итераций

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

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

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

Теперь математика…

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

Целевая функция:

где wik=1 для точки данных xi, если она принадлежит кластеру k; в противном случае wik=0. Кроме того, µk является центром тяжести кластера xi.

Это задача минимизации, состоящая из двух частей. Сначала мы минимизируем J относительно wik и лечить μk исправлено. Затем мы минимизируем J относительно µk и лечите wik исправлено. С технической точки зрения, мы дифференцируем J по отношению к wik и обновить назначения кластера (E-шаг). Затем мы дифференцируем J относительно µk и повторно вычислите центроиды после присвоения кластеров из предыдущего шага (M-шаг). Таким образом, E-шаг:

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

И М-шаг это:

Что означает пересчет центроида каждого кластера для отражения новых назначений.

Здесь следует отметить несколько моментов:

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

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

Другими широко используемыми мерами сходства являются:

1. Косинусное расстояние: определяет косинус угла между точечными векторами двух точек в n-мерном пространстве.

2. Манхэттенское расстояние. Вычисляет сумму абсолютных разностей между координатами двух точек данных.

3. Расстояние Минковского. Также известно как обобщенная метрика расстояния. Его можно использовать как для порядковых, так и для количественных переменных.

Усовершенствования алгоритма кластеризации K-средних

Одна из распространенных проблем, с которыми мы сталкиваемся при работе с K-средними, заключается в том, что размеры кластеров различаются. Допустим, у нас есть следующие точки:

Еще одна проблема с k-средними возникает, когда плотности исходных точек различны. Предположим, что это исходные точки:

Одним из решений является использование большего количества кластеров. Таким образом, во всех приведенных выше сценариях вместо использования 3 кластеров у нас может быть большее число. Возможно, установка k=10 может привести к более значимым кластерам.

Помните, как мы случайным образом инициализируем центроиды в кластеризации методом k-средних? Ну, это также потенциально проблематично, потому что мы можем каждый раз получать разные кластеры. Таким образом, для решения этой проблемы случайной инициализации существует алгоритм под названием K-Means++, который можно использовать для выбора начальных значений или начальных центроидов кластера для K-средних.

K-Means++ для выбора начальных центроидов кластера для кластеризации K-средних

В некоторых случаях, если инициализация кластеров неуместна, K-Means может привести к получению сколь угодно плохих кластеров. Здесь помогает K-Means++. Он определяет процедуру инициализации центров кластеров перед переходом к стандартному алгоритму кластеризации методом k-средних.

Используя алгоритм K-Means++, мы оптимизируем шаг, на котором мы случайным образом выбираем центр тяжести кластера. Мы с большей вероятностью найдем решение, конкурентоспособное с оптимальным решением K-Means, при использовании инициализации K-Means++.

Шаги для инициализации центроидов с использованием K-Means++:

  1. Первый кластер выбирается равномерно случайным образом из точек данных, которые мы хотим сгруппировать. Это похоже на то, что мы делаем в K-средних, но вместо случайного выбора всех центроидов мы просто выбираем здесь один центроид.
  2. Затем мы вычисляем расстояние (D(x)) каждой точки данных (x) от центра кластера, который уже был выбран.
  3. Затем выберите новый центр кластера из точек данных с вероятностью x, пропорциональной (D(x))2
  4. Затем мы повторяем шаги 2 и 3, пока не будет выбрано k кластеров.

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

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

Я уверен, что есть один вопрос, который вас интересовал с самого начала этой статьи — сколько кластеров мы должны сделать? Ака, каким должно быть оптимальное количество кластеров при выполнении K-Means?

Оценка моделей кластеризации

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

В этом посте мы рассмотрим две метрики, которые могут дать нам некоторое представление о k:

  • Локтевой метод
  • Анализ силуэта

Как выбрать правильное количество кластеров в кластеризации K-средних?

Одно из самых распространенных сомнений, возникающих у всех при работе с K-Means, — это выбор правильного количества кластеров.

Итак, давайте рассмотрим технику, которая поможет нам выбрать правильное значение кластеров для алгоритма K-Means. Давайте возьмем пример сегментации клиентов, который мы видели ранее. Напомним, что банк хочет сегментировать своих клиентов в зависимости от их дохода и суммы долга:

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

Но как тогда определить оптимальное количество кластеров? Одна вещь, которую мы можем сделать, это построить график, также известный как кривая локтя, где ось X будет представлять количество кластеров, а ось Y будет показателем оценки. Допустим, инерция для в настоящее время.

Метод локтя

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

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

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

So,

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

Здесь мы можем выбрать любое количество кластеров от 6 до 10. У нас может быть 7, 8 или даже 9 кластеров. Вы также должны учитывать стоимость вычислений при выборе количества кластеров. Если мы увеличим количество кластеров, стоимость вычислений также увеличится. Итак, если у вас нет больших вычислительных ресурсов, мой совет — выбрать меньшее количество кластеров.

История на этом не заканчивается. Существует еще один метод оценки эффективности вашей модели кластеризации, называемый анализом силуэта.

Анализ силуэта

Силуэт-анализ можно использовать для определения степени разделения кластеров. Для каждого образца:

  • Вычислите среднее расстояние от всех точек данных в одном кластере (ai).
  • Вычислите среднее расстояние от всех точек данных в ближайшем кластере (bi).
  • Вычислить коэффициент:

Коэффициент может принимать значения в интервале [-1, 1].

  • Если он равен 0 –› образец очень близок к соседним кластерам.
  • Если он равен 1 – выборка находится далеко от соседних кластеров.
  • Если он равен -1 – выборка отнесена к неправильным кластерам.

Поэтому мы хотим, чтобы коэффициенты были как можно больше и близки к 1, чтобы иметь хорошие кластеры.

Как видно из приведенных выше графиков, n_clusters=2 имеет наилучший средний показатель силуэта около 0,75, и все кластеры выше среднего показывают, что это на самом деле хороший выбор. Кроме того, толщина графика силуэта дает представление о том, насколько велик каждый кластер. График показывает, что в кластере 1 почти в два раза больше выборок, чем в кластере 2. Однако, когда мы увеличили n_clusters до 3 и 4, средний балл силуэта резко снизился примерно до 0,48 и 0,39 соответственно. Более того, толщина графика силуэта начала сильно колебаться. Суть такова: хороший n_clusters будет иметь средний балл силуэта намного выше 0,5, а также все кластеры имеют выше среднего балла.

Однако есть определенные ситуации, когда этот алгоритм может не работать. Давайте рассмотрим некоторые проблемы, с которыми вы можете столкнуться при работе с k-средними.

Недостатки

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

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

Kmeans считает точку «B» ближе к точке «A», чем к точке «C», поскольку они имеют несферическую форму. Следовательно, точки «А» и «В» будут в одном кластере, а точка «С» будет в другом кластере. Обратите внимание, что метод иерархической кластеризации Single Linkage делает это правильно, потому что он не разделяет похожие точки).

Во-вторых, мы будем генерировать данные из многомерных нормальных распределений с разными средними значениями и стандартными отклонениями. Таким образом, у нас будет 3 группы данных, где каждая группа будет сгенерирована из разных многомерных нормальных распределений (разное среднее/стандартное отклонение). Одна группа будет иметь намного больше точек данных, чем две другие вместе взятые. Затем мы запустим kmeans для данных с K = 3 и посмотрим, сможет ли он правильно кластеризовать данные. Чтобы упростить сравнение, я собираюсь сначала нарисовать данные, окрашенные в зависимости от распределения, из которого они были получены. Затем я нанесу на график те же данные, но теперь окрашенные в зависимости от кластеров, которым они были назначены.

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

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

Как и ожидалось, kmeans не смог определить правильные кластеры для обоих наборов данных. Однако мы можем помочь kmeans идеально кластеризовать такие наборы данных, если будем использовать методы ядра. Идея заключается в том, что мы преобразуем данные в более многомерное представление, которое делает данные линейно разделимыми (та же идея, которую мы используем в SVM). Различные виды алгоритмов очень хорошо работают в таких сценариях, как SpectralClustering, см. ниже:

Итак, если вы обнаружите, что ваши данные:

  • Довольно густонаселенный (Вы можете использовать t-SNE, чтобы придумать визуальные эффекты. t-SNE будет подробно рассмотрено в отдельной статье)
  • В основном состоит из числовых / непрерывных функций
  • График t-SNE/PCA показывает наличие отдельных кластеров с меньшим уровнем шума.

тогда это безопасно и рекомендуется использовать быструю и простую кластеризацию KMeans (возможно, вы захотите дополнить ее KMeans++). Но для других случаев у нас есть несколько других методов кластеризации, таких как спектральная кластеризация, DBSCAN и самоорганизующиеся карты, которые можно использовать для решения проблемы. Будьте начеку, скоро я подробно расскажу об этих алгоритмах в отдельных статьях.

Подведение итогов

Кластеризация Kmeans — один из самых популярных алгоритмов кластеризации и обычно первое, что практикующие специалисты применяют при решении задач кластеризации, чтобы получить представление о структуре набора данных. Цель kmeans — сгруппировать точки данных в отдельные непересекающиеся подгруппы. Очень хорошо получается, когда кластеры имеют некую сферическую форму.

Однако он страдает из-за отклонения геометрической формы кластеров от сферической формы. Более того, он также не узнает количество кластеров из данных и требует, чтобы оно было предварительно определено. Чтобы быть хорошим практиком, полезно знать предположения, лежащие в основе алгоритмов/методов, чтобы иметь довольно хорошее представление о силе и слабости каждого метода. Это поможет вам решить, когда использовать каждый метод и при каких обстоятельствах.

В этом посте мы рассмотрели сильные и слабые стороны, а также некоторые методы оценки, связанные с kmeans.

Ниже приведены основные выводы:

  • Масштабируйте/стандартизируйте данные при применении алгоритма kmeans.
  • Метод локтя при выборе количества кластеров обычно не работает, потому что функция ошибок монотонно убывает для всех k.
  • Kmeans придает больший вес более крупным кластерам.
  • Kmeans предполагает сферическую форму кластеров (с радиусом, равным расстоянию между центроидом и самой дальней точкой данных) и не работает хорошо, когда кластеры имеют разные формы, такие как эллиптические кластеры.
  • Если между кластерами есть перекрытие, kmeans не имеет встроенной меры неопределенности, поскольку примеры относятся к перекрывающейся области, чтобы определить, для какого кластера назначить каждую точку данных.
  • Kmeans по-прежнему может кластеризовать данные, даже если они не могут быть кластеризованы, например данные, поступающие из однородных распределений.
  • K-Means++ может быть полезен при инициализации центроидов кластера, что является улучшением по сравнению с обычным KMeans.

Блокнот, из которого был создан этот пост, можно найти здесь.

использованная литература

  1. Кластеризация KMeans — Блоги для гиков
  2. KMeans Clustering — Аналитика Vidya Blogs
  3. Вклады из портфолио Git Имада Даббуры