Кластеризация K-средних в машинном обучении
Кластеризация 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-средних, иначе кластеры могут сильно растянуться, и, следовательно, алгоритм будет работать плохо. Однако масштабирование функций не гарантирует, что кластеры станут красивыми и сферическими, но обычно оно значительно их улучшает.
Надеюсь, вам понравилась эта статья об алгоритме K-средних в машинном обучении и его реализации с использованием Python.