Включая плюсы и минусы k-средних, иерархических и DBSCAN

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

Ли RCT (1981):

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

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

Промышленные приложения

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

  • Исследовательский анализ данных (EDA). Кластеризация является частью самых основных методов анализа данных, используемых для понимания и интерпретации данных и развития первоначальной интуиции относительно функций и закономерностей в данных.
  • Статистический анализ: часто используется для выявления (несходства) одной и той же переменной в разных выборках (например, результаты по математике среди детей в городе A и городе B).
  • Городское планирование: кластеризация помогает выявлять домохозяйства и сообщества со схожими характеристиками для реализации соответствующей политики развития сообщества.
  • Обнаружение аномалий. Страховые компании используют кластеризацию для выявления аномальных и потенциально мошеннических транзакций.
  • Сегментация клиентов. Кластеризация широко используется при разработке маркетинговых стратегий, например, для нацеливания на разные категории клиентов для различных видов рекламных акций.
  • Компьютерное зрение: в компьютерном зрении / сегментации изображений кластеризация используется для разделения данных на непересекающиеся группы на основе процесса распознавания образов.
  • В биологии: кластеризация - важный инструмент генетической и таксономической классификации и понимания эволюции живых и вымерших организмов.
  • И многие другие. Кластеризация имеет широкий спектр других приложений, таких как системы рекомендаций по строительству, анализ сетей социальных сетей, пространственный анализ в классификации землепользования и т. д.

Множество различных алгоритмов кластеризации

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

K-средство: во-первых, «K» обозначает количество кластеров, которое вы хотите. То есть K = n означает n количество кластеров, которые необходимо идентифицировать. Затем есть нечто, называемое «центроидом», который представляет собой воображаемую / искусственную точку данных (среднее количество точек данных), вокруг которой разбивается каждый кластер данных. Итак, K = 2 означает, что алгоритм разделит наблюдения (данные) на 2 кластера, чтобы минимизировать расстояния между центроидами и наблюдениями.

Преимущества: просто понять, легко реализовать

Недостатки: иногда сложно выбрать K ; выбросы могут тянуть центроид в своем направлении; масштабирование данных может изменить кластеры

Иерархическая кластеризация. Иерархическая кластеризация работает двумя разными способами: первый называется «восходящей» или агломеративной кластеризацией, когда каждое наблюдение получает свой собственный кластер, затем каждая пара кластеров объединяется для сформировать еще один кластер и так далее. Другой (aka. «Сверху вниз» или разделительная кластеризация) работает в противоположном направлении, т.е., все наблюдения начинаются с одного кластера, а затем повторно делятся на меньший кластер. размеры.

Преимущества: простота реализации; количество кластеров легко определить, посмотрев на дендрограмму; информативнее, чем кластеризация с использованием метода K

Недостатки: высокая чувствительность к выбросам; может занять много времени для больших наборов данных

DBSCAN: Предложен в 1996 году, это алгоритм на основе плотности, в котором наблюдения группируются в зависимости от того, насколько они близки друг к другу при минимальном количестве точек. Он принимает два параметра: (i) ε (epsilon) - определение радиуса, в пределах которого точки должны находиться в одном кластере; и (ii) minPts - указание минимального количества точек для формирования плотного пространства / кластера. Достаточно интересно, что статья 1996 года, в которой был предложен этот алгоритм, получила награду Test of Time Award на конференции KDD 2014 года.

Преимущества : в отличие от K-средних и иерархической кластеризации, DBSCAN надежен при наличии выбросов; таким образом, может использоваться для обнаружения аномалий (т. е. выбросов).

Недостатки: i t чувствителен к значениям параметров ( ε и minPts); не может надлежащим образом идентифицировать какие-либо кластеры при различной плотности данных.

Пятиступенчатая реализация

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

Шаг 1. Установите зависимости

В основном вам нужны три библиотеки: pandas для работы с данными, seaborn для визуализации, sklearn для предварительной обработки ввода и моделирования.

# to import and work with data
import pandas as pd 
# to visualize data and results
import seaborn as sns
import matplotlib.pyplot as plt 
# to pre-process model inputs
from sklearn import preprocessing 
# clustering algorithm
from sklearn.cluster import KMeans

Шаг 2. Данные

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

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

# import data
df = pd.read_csv("iris.csv")
df.head()

# select data
df = df[["petal_length", "petal_width"]]
# see if there's NA values
df.isna().sum()

Шаг 3. Подготовьте входные данные для модели

После того, как вы выбрали набор данных, выполните предварительную обработку / форматирование ввода таким образом, чтобы модель могла его использовать. На этом этапе происходят две вещи: нормализация выбранных функций (для уменьшения изменчивости данных) и преобразование фрейма данных в numpy массивы.

# data normalization
df = preprocessing.scale(df)
df = pd.DataFrame(df)
# input
import numpy as np
X = df.iloc[:, [0,1]].values

Шаг 4. Определите количество кластеров

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

##########################
# The "elbow" method #
##########################
k_range = range(1,10)
sse = []
for k in k_range:
    km = KMeans(n_clusters = k)
    km.fit(X)
    sse.append(km.inertia_)
plt.xlabel("K")
plt.ylabel("Sum of squared errors")
plt.plot(k_rng, sse, marker='o')

Шаг 5. Реализация модели

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

# model
km = KMeans(n_clusters = 3)
y_km=km.fit_predict(X)
# plot the 3 clusters
plt.scatter(
    X[y_km == 0, 0], X[y_km == 0, 1],
    s=50, c='lightgreen',
    marker='s', edgecolor='black',
    label='cluster 1'
)
plt.scatter(
    X[y_km == 1, 0], X[y_km == 1, 1],
    s=50, c='orange',
    marker='o', edgecolor='black',
    label='cluster 2'
)
plt.scatter(
    X[y_km == 2, 0], X[y_km == 2, 1],
    s=50, c='lightblue',
    marker='v', edgecolor='black',
    label='cluster 3'
)

# value counts in different clusters
frame = pd.DataFrame(X)
frame['cluster'] = y_km
frame['cluster'].value_counts()

Технические примечания для специалистов по данным

  1. Как и другие алгоритмы машинного обучения, если есть категориальные функции, их необходимо закодировать в числовых функциях.
  2. Необходимо повторить, что алгоритмы кластеризации чувствительны к масштабированию, поскольку алгоритм использует евклидово расстояние. Поэтому убедитесь, что входные данные предварительно обрабатываются должным образом.
  3. Обратите внимание, что в отличие от реализаций контролируемой классификации, где модель сначала подбирается, а затем используется для прогнозирования, при кластеризации подгонка и прогнозирование модели происходит вместе (отсюда и использование fit_predict())
  4. Посетите эту страницу StackOverflow, если вам интересно, что работает, а что нет в реализации K-means.
  5. Если вам нравится rstat, вы можете проверить эту страницу UC Business Analytics, на которой есть коды, а также некоторые полезные обсуждения.