Кластеризация K-средних в машинном обучении
Кластеризация K-средних, или K-means, — это алгоритм машинного обучения без учителя, который разбивает объекты на K групп по сходству признаков. Алгоритм выбирает центроиды кластеров, назначает объекты ближайшему центроиду, затем пересчитывает центры и повторяет процесс до сходимости.
K-means используют для сегментации клиентов, анализа данных, поиска групп похожих объектов, уменьшения размерности, обнаружения аномалий и сегментации изображений. В статье разберем, как работает алгоритм K-средних, что такое центроид, почему нужно заранее выбрать число кластеров K, какие есть ограничения и как реализовать K-means на Python.
Что внутри:
- что такое кластеризация K-средних;
- как K-means работает без меток;
- что такое центроиды;
- как объекты назначаются кластерам;
- почему алгоритм пересчитывает центры кластеров;
- где применяется K-means;
- сегментация клиентов и анализ данных;
- вычислительная сложность алгоритма;
- ограничения K-средних;
- пример реализации K-means на Python.
Кластеризация K-средних - это алгоритм кластеризации, способный быстро и эффективно кластеризовать немаркированный набор данных всего за несколько итераций. В этой статье я расскажу вам о кластеризации K-средних в машинном обучении с использованием Python.
Кластеризация K-средних в машинном обучении
Кластеризация означает выявление похожих экземпляров и их назначение кластерам или группам аналогичных экземпляров. Она используется в самых разных приложениях, таких как:
- Сегментация клиентов
- Анализ данных
- Уменьшение размерности
- Обнаружение аномалий
- Полу-контролируемое обучение
- Поиск изображений
- Сегментация изображений
K-средние – это алгоритм кластеризации в машинном обучении, который может очень быстро и эффективно сгруппировать немаркированный набор данных всего в несколько итераций. Он работает, маркируя все экземпляры в кластере ближайшим центроидом. Когда экземпляры сосредоточены вокруг определенной точки, эта точка называется центроидом.
Если вы получаете метки экземпляров, вы можете легко найти все элементы, усреднив все экземпляры для каждого кластера. Но здесь нам не дается метка или центроиды, поэтому мы должны начать с размещения центроидов случайным образом, выбрав k случайных экземпляров и используя их положения в качестве центроидов.
Затем мы маркируем экземпляры, обновляем центроиды, повторно маркируем экземпляры, снова обновляем центроиды и так далее. Алгоритм кластеризации K-средних гарантированно сойдется за несколько итераций, он не будет повторяться бесконечно.
Кластеризация K-средних с использованием Python
Вычислительная сложность алгоритма кластеризации K-средних обычно линейна относительно:
- количества экземпляров m,
- количества кластеров k,
- и количества размеров n.
Это верно только тогда, когда набор данных имеет структуру кластеризации, если набор данных не имеет структуры кластеризации, временная сложность алгоритма в наихудшем случае может возрастать экспоненциально с увеличением количества экземпляров. В задачах в реальном времени этого никогда не происходит, и кластеризация K-средних считается одним из самых быстрых алгоритмов кластеризации.
Теперь давайте посмотрим, как реализовать кластеризацию K-средних с помощью Python. Чтобы реализовать ее с помощью Python, я буду использовать набор данных о строительстве жилья в Калифорнии для создания экономических сегментов в различных районах Калифорнии. Начнем с импорта необходимого набора данных и библиотек Python:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
from sklearn.cluster import KMeans
data = pd.read_csv("https://biconsult.ru/img/datascience-ml-ai/Mini-batch-K-means-Clustering-in-Machine-Learning/housing.csv")
print(data.columns)
data = data.loc[:, ["median_income", "latitude", "longitude"]]
print(data.head())
Результат:
Index(['longitude', 'latitude', 'housing_median_age', 'total_rooms',
'total_bedrooms', 'population', 'households', 'median_income',
'median_house_value', 'ocean_proximity'],
dtype='object')
median_income latitude longitude
0 8.3252 37.88 -122.23
1 8.3014 37.86 -122.22
2 7.2574 37.85 -122.24
3 5.6431 37.85 -122.25
4 3.8462 37.85 -122.25
Теперь давайте посмотрим, как реализовать алгоритм кластеризации K-средних с помощью Python. Поскольку он чувствителен к масштабированию, будет хорошей идеей изменить размер или нормализовать данные с экстремальными значениями:
kmeans = KMeans(n_clusters=6)
data["Cluster"] = kmeans.fit_predict(data)
data["Cluster"] = data["Cluster"].astype("int")
print(data.head())
Результат:
median_income latitude longitude Cluster 0 8.3252 37.88 -122.23 2 1 8.3014 37.86 -122.22 2 2 7.2574 37.85 -122.24 2 3 5.6431 37.85 -122.25 2 4 3.8462 37.85 -122.25 0
Теперь давайте посмотрим на кластеры, идентифицированные алгоритмом с помощью диаграммы рассеяния:
plt.style.use("seaborn")
plt.rc("figure", autolayout=True)
plt.rc("axes", labelweight='bold', labelsize='large', titleweight='bold', titlesize=14, titlepad=10)
sns.relplot(x="longitude", y="latitude", hue="Cluster", data=data, height=6)
plt.show()

График разброса выше показывает географическое распределение кластеров. Похоже, что алгоритм создал отдельные сегменты для области с высоким доходом.
Резюме
Вот как мы можем реализовать алгоритм кластеризации K-средних с помощью Python. Важно масштабировать входные функции перед запуском K-средних, иначе кластеры могут сильно растянуться, и, следовательно, алгоритм будет работать плохо. Однако масштабирование функций не гарантирует, что кластеры станут красивыми и сферическими, но обычно оно значительно их улучшает.
FAQ
Вопрос: Что такое K-means?
Ответ: K-means, или алгоритм K-средних, — это метод кластеризации, который делит данные на K групп. Каждый объект относится к ближайшему центроиду, а центроиды пересчитываются на каждой итерации.
Вопрос: Что такое центроид?
Ответ: Центроид — это центр кластера. В K-means он обычно рассчитывается как среднее значение признаков объектов, которые относятся к этому кластеру.
Вопрос: Нужно ли заранее задавать число кластеров?
Ответ: Да, в классическом K-means нужно заранее указать K — количество кластеров. Для выбора K часто используют метод локтя, силуэтный коэффициент или сравнение нескольких вариантов.
Вопрос: Где применяют кластеризацию K-средних?
Ответ: K-means применяют для сегментации клиентов, анализа поведения пользователей, группировки товаров, сжатия изображений, поиска похожих объектов и предварительного анализа данных.
Вопрос: Какие ограничения есть у K-means?
Ответ: K-means чувствителен к выбору числа кластеров, масштабу признаков, выбросам и начальной инициализации центроидов. Он лучше работает, когда кластеры примерно компактные и похожи на сферы.
- Алгоритмы кластеризации в машинном обучении
- Метрики оценки Machine Learning моделей
- Градиентный спуск в машинном обучении
- Многослойный персептрон в машинном обучении
- TF-IDF в машинном обучении



