Включая плюсы и минусы k-средних, иерархических и DBSCAN
Проще говоря, кластеризация - это не что иное, как разделение наблюдений на основе определенных свойств. Говоря более техническим языком, кластеризация - это алгоритм машинного обучения без учителя, процесс, с помощью которого наблюдения (данные) группируются таким образом, что похожие наблюдения помещаются ближе друг к другу. Это «неконтролируемый» алгоритм, потому что в отличие от контролируемых алгоритмов (например, случайный лес) вам не нужно обучать его с помеченными данными, и вместо этого вы помещаете свои данные в «машину кластеризации» вместе с некоторыми инструкциями (например, количество кластеров, которые вы хотите), а машина вычислит остальное и сгруппирует данные на основе базовых шаблонов и свойств.
Кластерный анализ - это недавно разработанный компьютерный метод анализа данных. Это продукт многих областей исследований: статистики, информатики, исследования операций и распознавания образов.
Цель этой статьи - выделить некоторые отраслевые приложения, а также обсудить плюсы и минусы наиболее часто используемых алгоритмов кластеризации. Во второй части я продемонстрирую реализацию кластеризации 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()
Технические примечания для специалистов по данным
- Как и другие алгоритмы машинного обучения, если есть категориальные функции, их необходимо закодировать в числовых функциях.
- Необходимо повторить, что алгоритмы кластеризации чувствительны к масштабированию, поскольку алгоритм использует евклидово расстояние. Поэтому убедитесь, что входные данные предварительно обрабатываются должным образом.
- Обратите внимание, что в отличие от реализаций контролируемой классификации, где модель сначала подбирается, а затем используется для прогнозирования, при кластеризации подгонка и прогнозирование модели происходит вместе (отсюда и использование
fit_predict())
- Посетите эту страницу StackOverflow, если вам интересно, что работает, а что нет в реализации K-means.
- Если вам нравится
rstat
, вы можете проверить эту страницу UC Business Analytics, на которой есть коды, а также некоторые полезные обсуждения.