Подробное объяснение оценки качества производительности кластеризации и нахождения оптимального значения количества кластеров с помощью алгоритма K-средних.

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

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

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

Данные

Данные для этого анализа были получены с веб-сайта UCI Machine Learning Repository. Он содержит данные о клиентах оптового дистрибьютора.

Данные для последующего анализа можно найти здесь.

Поля

  • Канал: канал клиента (отель / ресторан / кафе) или канал розничной торговли. (Номинальное)
  • Регион: регион Заказчика. (Номинальное)
  • Fresh: годовые расходы на свежие продукты в денежных единицах (м.е.) (непрерывно)
  • Молоко: годовые расходы на молочные продукты в денежных единицах (у.е.) (непрерывно)
  • Бакалея: годовые расходы на продуктовые продукты в денежных единицах (у.е.) (непрерывно)
  • Замороженные: годовые расходы на замороженные продукты в денежных единицах (м.е.) (непрерывно)
  • Detergents_Paper: Годовые расходы на моющие средства и бумажную продукцию в денежных единицах (м.е.) (непрерывно)
  • Delicassen: Ежегодные расходы на деликатесы в денежных единицах (m.u.) (непрерывные)

Изучение данных

Вызов метода .info () для фрейма данных:

Мы видим, что в данных нет нулевых значений, и все функции имеют тип данных int.

Резюме числовых столбцов:

График корреляции между этими переменными:

Приведенный выше график говорит нам о высокой корреляции между следующими парами переменных:

  • Бакалея и моющие средства, бумага
  • Бакалея и молоко
  • Молоко и моющие средства - бумага

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

Из данных мы видим, что категориальные столбцы - это [«Канал», «Регион»]. Поскольку эти переменные являются номинальными, они были преобразованы в индикаторные переменные с помощью метода pandas.get_dummies.

Графики для категориальных столбцов:

Из приведенного выше графика мы видим, что между этими переменными существует справедливое распределение.

Давайте теперь сосредоточимся на алгоритме и оценке его производительности.

K- средние

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

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

Давайте теперь поговорим о том, как оценить производительность алгоритма:

Для задачи контролируемого обучения:

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

  1. Матрица путаницы

2. Точность

3. Напомним

4. Оценка F1

5. Кривая ROC: AUC

6. Общая точность

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

Для задачи обучения без учителя:

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

1. Метод локтя

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

Метод локтя не работает, если данные внутренне не сильно кластеризованы.

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

Взяв сумму квадратов расстояний в качестве метрики, мы получим следующий график для наших данных:

Здесь мы не видим четко выраженной точки локтя. Можно вывести оптимальное значение K равным 5, 6 или 7.

Взяв в качестве метрики оценку calinski_harbasz, мы получим следующий график для наших данных:

Из этого графика мы видим, что оптимальное значение K равно 6. График построен с использованием метода Yellowbrick KElbowVisualizer.

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

Выпуклые и невыпуклые кластеры (дополнительная информация)

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

Кластеризация K-средних хорошо работает только для выпуклого набора кластеров, но не для невыпуклого набора.

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

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

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

Разбивая это:

b (i) представляет собой среднее расстояние от точки i до всех точек в ближайшем кластере.

a (i) представляет собой среднее расстояние от точки i до всех других точек в собственном кластере.

Оценка силуэта варьируется от +1 до -1, где +1 - лучший результат, а -1 - худший. 0 указывает на перекрывающийся кластер, в то время как отрицательные значения указывают, что точка назначена неправильному кластеру.

Анализ силуэта по нашим данным: (красной линией отмечена оценка силуэта)

Графики силуэтов для n_clusters от 3 до 8:

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

Подводя итог приведенным выше графикам, это график, на котором вычисляется Silhouette_score для различных значений n_clusters.

Из этого графика мы видим, что максимальное значение оценки силуэта составляет 0,482 для K = 6.

Резюме

В приведенной выше статье мы выполнили кластеризацию наших данных и оценили качество нашей кластеризации, используя метод локтя и анализ силуэта. С помощью обоих методов мы получили значение K = 6 как оптимальное количество кластеров для разделения наших данных. Поскольку данные не очень разделимы в пространстве признаков, метод изгиба, использующий дисперсию в качестве метрики, не дал четкой точки перегиба. Но, используя оценку calinski_harbasz и анализ силуэта, мы смогли найти оптимальное значение K.

Вот ссылка на репозиторий GitHub этого проекта: ссылка.

Дальнейшее чтение: