Введение в алгоритм кластеризации Kmeans

May 01 2023
Что такое кластеризация K-средних? Кластеризация K-средних — это неконтролируемый алгоритм машинного обучения, используемый для кластеризации или группировки похожих точек данных вместе в наборе данных. Это алгоритм разделения, который делит данные на непересекающиеся кластеры, где каждая точка данных принадлежит одному кластеру.

Что такое кластеризация K-средних?

Кластеризация K-средних — это неконтролируемый алгоритм машинного обучения, используемый для кластеризации или группировки похожих точек данных вместе в наборе данных. Это алгоритм разделения, который делит данные на непересекающиеся кластеры, где каждая точка данных принадлежит одному кластеру. Кластеризация K-средних направлена ​​​​на минимизацию суммы квадратов расстояний между каждой точкой данных и назначенным ей центроидом.

Теория — как это работает?

Шаг 1. Во-первых, нам нужно определить значение K, то есть количество кластеров, которые мы хотим создать. Значение K можно определить либо случайным образом, либо с помощью какого-либо метода, такого как локоть, силуэт.

Шаг 2. Затем мы случайным образом выбираем K точек из набора данных, которые будут действовать как начальные центроиды для каждого кластера.

Шаг 3. Затем мы вычисляем евклидово расстояние между каждой точкой данных и центроидами и назначаем точку данных ближайшему центроиду, создавая K кластеров.

Шаг 4. После присвоения всех точек данных их ближайшему центроиду мы обновляем местоположение каждого центроида, вычисляя среднее значение всех точек данных, назначенных этому центроиду.

Шаг 5. Мы повторяем шаги 3 и 4 до тех пор, пока алгоритм не сойдется, что означает, что центроиды больше не перемещаются или улучшение суммы квадратов расстояний между точками данных и назначенным им центроидом не станет незначительным.

Как работает код?

Импортируйте необходимые библиотеки:

import numpy as np
import matplotlib.pyplot as plt

X = np.random.rand(100, 2) * 2
plt.scatter(X[:, 0], X[:, 1])
plt.show()

      
                

K = 7
centroids = X[np.random.choice(len(X), K, replace=False)]
plt.scatter(X[:, 0], X[:, 1])
plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', s=200, linewidths=3, color='r')
plt.show()

      
                
while True: # Assign data points to the nearest centroid distances = np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2)) labels = np.argmin(distances, axis=0) # Calculate new centroids new_centroids = np.array([X[labels == i].mean(axis=0) for i in range(K)]) # Check for convergence if np.all(centroids == new_centroids): break # Update centroids centroids = new_centroids plt.scatter(X[:, 0], X[:, 1], c=labels) plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', s=200, linewidths=3, color='r') plt.show()

Ограничения алгоритма K-средних

  1. K означает, что кластеризация чувствительна к начальному выбору центроида. Алгоритм может сходиться к субоптимальному решению, если начальные центроиды выбраны неправильно.
  2. K означает, что кластеризация чувствительна к выбросам
  3. K означает, что кластеризация чувствительна к значению K. Если K выбран неправильно, это может привести к субоптимальным кластерам.