Введение
Кластеризация — это фундаментальный метод в области машинного обучения без учителя, целью которого является группировка схожих точек данных на основе определенных функций. K-means — один из самых популярных и широко используемых алгоритмов кластеризации благодаря своей простоте и эффективности. В этом блоге мы шаг за шагом рассмотрим K-средние с нуля, чтобы глубже понять принципы его работы.
Что такое К-средство?
K-means — это итерационный алгоритм, который разбивает данные на K-кластеры на основе их сходства с центроидом. Каждый кластер представлен средним значением (центроидом) назначенных ему точек данных. «K» в K-средних представляет количество кластеров, которые мы хотим идентифицировать в данных.
Шаги алгоритма
а. Инициализация:
- Случайным образом выберите K точек данных в качестве начальных центроидов.
- Назначьте каждую точку данных ближайшему центроиду, чтобы создать K-кластеры.
б.Обновление центроидов:
- Вычислите среднее значение точек данных каждого кластера, чтобы найти новые центроиды.
- Повторяйте процесс до тех пор, пока центроиды не сойдутся (т. е. их положения не стабилизируются).
в. Конвергенция:
- Проверьте, не изменились ли центроиды. Если нет, то алгоритм сошёлся и можно остановиться.
Реализация K-средних с нуля в Python
Давайте теперь реализуем алгоритм K-средних с нуля на Python. Мы будем использовать библиотеку NumPy для числовых вычислений.
Шаг 1. Импортируйте необходимые библиотеки.
import numpy as np import matplotlib.pyplot as plt
Шаг 2. Определите функцию K-средних.
def kmeans(data, k, max_iterations=100): # Step 2a: Initialize centroids randomly centroids = data[np.random.choice(data.shape[0], k, replace=False)] for _ in range(max_iterations): # Step 2b: Assign data points to the nearest centroid labels = np.argmin(np.linalg.norm(data[:, np.newaxis] - centroids, axis=2), axis=1) # Step 2c: Update centroids new_centroids = np.array([data[labels == i].mean(axis=0) for i in range(k)]) # Step 2d: Check for convergence if np.allclose(centroids, new_centroids): break centroids = new_centroids return centroids, labels
Шаг 3. Создайте выборочные данные и запустите K-средние.
# Generate random data np.random.seed(42) data = np.random.randn(100, 2) # Set the number of clusters (K) k = 3 # Run K-means on the data centroids, labels = kmeans(data, k)
Шаг 4. Визуализируйте результаты.
# Scatter plot the data points with different colors for each cluster plt.scatter(data[:, 0], data[:, 1], c=labels) # Plot the centroids as 'X' plt.scatter(centroids[:, 0], centroids[:, 1], marker='X', s=100, c='red') plt.title('K-means Clustering') plt.xlabel('Feature 1') plt.ylabel('Feature 2') plt.show()
Заключение
В этом блоге мы углубились в основы алгоритма кластеризации K-средних и реализовали его с нуля на Python. Понимая итеративные шаги инициализации, обновления центроидов и сходимости, мы получаем ценную информацию о том, как работает алгоритм. K-means — это универсальный инструмент, используемый в различных областях, таких как сегментация клиентов, сжатие изображений и обнаружение аномалий. Продолжая свой путь в области машинного обучения, четкое понимание основ послужит прочной основой для решения более сложных задач кластеризации. Удачной кластеризации!
Первоначально опубликовано на https://praveenks.hashnode.dev.