Введение

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