Эта статья была написана Малик Джахан, членом группы технического контента Educative.

Машинное обучение превратилось в панорамную область и применяется в самых разных дисциплинах. Выбор и применение большинства алгоритмов машинного обучения в первую очередь зависят от характера задачи и набора данных. Если набор данных содержит набор экземпляров или точек данных, которые не имеют заранее определенной метки, ожидается, что алгоритмы кластеризации обработают данные и попытаются извлечь различные шаблоны. Например, если в миске находится смесь шаров разного размера и цвета (без дополнительной информации) и задача состоит в том, чтобы придумать нужное количество групп шаров, то это пример задачи кластеризации.

Кластеризация – это неконтролируемая стратегия обучения, позволяющая группировать заданный набор точек данных в несколько групп или кластеров.

Разбивка данных на разумное количество кластеров помогает извлечь базовые закономерности в данных и преобразовать необработанные данные в осмысленные знания. Примеры областей применения включают следующее:

  • Распознавание образов
  • Сегментация изображения
  • Профилирование пользователей или клиентов
  • Категоризация объектов по ряду категорий или групп
  • Обнаружение выбросов или шума в пуле элементов данных

Получив набор данных, распределите данные по соответствующему количеству кластеров. В литературе описано множество алгоритмов кластеризации. В следующих разделах рассматриваются два популярных алгоритма кластеризации.

Алгоритм кластеризации k-средних

Алгоритм кластеризации k-средних является одним из наиболее часто используемых алгоритмов кластеризации. Он группирует данные в k кластеров. Алгоритм ожидает, что k будет определено как входные данные для алгоритма. Это итеративный алгоритм, который выполняет следующие шаги для кластеризации заданных данных в k кластеров:

  1. Выберите k произвольных центроидов, представляющих k кластеров (один из распространенных способов выбора начальных центроидов — обозначить первые k точки данных как k центроиды.)
  2. Сравните каждую точку данных со всеми k центроидами и назначьте их ближайшим кластерам. Соответствующая функция расстояния используется для вычисления расстояния между двумя элементами данных.
  3. Пересчитайте центроиды на основе нового назначения. Среднее значение элементов данных каждого кластера служит центроидом.
  4. Продолжайте повторять шаги 2 и 3 до тех пор, пока не останется изменений в назначении кластеров (или среднем значении кластеров) или не будет достигнут верхний предел количества итераций.

Чтобы вычислить назначение точки данных в ближайшем кластере, вычисляется ее расстояние от всех центроидов и определяется ближайший кластер. Одной из наиболее часто используемых функций расстояния является евклидово расстояние:

где x_i и y_i — параметры ith экземпляров данных x и y. а n – количество объектов в каждом экземпляре.

Эти шаги выполняются на небольшом наборе данных шаг за шагом, чтобы сформировать два кластера ниже:

Вот алгоритм k-средних, реализованный в том же примере:

from sklearn.cluster import KMeans
import numpy as np
import matplotlib.pyplot as plt

X = np.array([[1,2],[2,2],[2,3],[8,7],[8,8],[25,80],[23,82],[100,100]])
clustering = KMeans(n_clusters=2).fit(X)
labels = clustering.labels_
colors = ("red","green","blue","pink","magenta","black","yellow")
for i in range(len(X)):
  plt.scatter(X[i][0],X[i][1], c = colors[labels[i]], marker = 'x')
plt.savefig("output/scatter.png")

Вывод:

Ниже приведено построчное объяснение кода:

  • Строка 1: класс KMeans импортируется из пакета sklearn.cluster.
  • Строка 2: библиотека numpy импортируется для инициализации набора данных, который будет использоваться в программе.
  • Строка 3: библиотека matplotlib.pyplot импортируется для визуализации результатов.
  • Строка 5: X инициализируется как массив numpy. Он содержит восемь элементов данных с двумя функциями в каждом.
  • Строка 6. Конструктор KMeans настроен на $k=2$ и обучен на X. Результат сохраняется в объекте clustering.
  • Строка 7: Назначение кластера каждой точки данных извлекается из clustering и сохраняется в labels.
  • Строка 8: вектор цветов инициализируется и сохраняется в colors.
  • Строки 9–11: каждый элемент данных отображается на точечной диаграмме с цветом, соответствующим его кластеру.

Алгоритм кластеризации на основе плотности

Когда невозможно заранее определить количество кластеров k, алгоритм кластеризации k-средних не является хорошим выбором для кластеризации данных. Еще одним узким местом алгоритма k-средних является то, что он не отличает зашумленные точки данных или выбросы от других точек данных.

Кластеризация на основе плотности не требует k в качестве одного из входных параметров. Вместо этого он группирует данные на основе близости (плотности) точек данных. Одним из широко используемых алгоритмов кластеризации на основе плотности является DBSCAN (пространственная кластеризация приложений с шумом на основе плотности). Алгоритм ожидает, что пороговое значение eps будет определять окрестности точки данных, а min_samples — минимально допустимый размер кластера. Точки данных, выпадающие из окрестности eps и не образующие кластер минимально возможного размера min_samples, рассматриваются как зашумленные точки данных или выбросы.

Вот пошаговое описание алгоритма DBSCAN:

Вот алгоритм DBSCAN, реализованный в том же примере:

from sklearn.cluster import DBSCAN
import numpy as np
import matplotlib.pyplot as plt

X = np.array([[1,2],[2,2],[2,3],[8,7],[8,8],[25,80],[23,82],[100,100]])
clustering = DBSCAN(eps=3, min_samples=2).fit(X)
labels = clustering.labels_
colors = ("red","green","blue","pink")
for i in range(len(X)):
  plt.scatter(X[i][0],X[i][1], c = colors[labels[i]], marker = 'x')
plt.savefig("output/scatter.png")

Вывод:

Пройдемся по коду построчно:

  • Строка 1: импортируйте класс DBSCAN из пакета sklearn.cluster.
  • Строка 2: библиотека numpy импортируется для инициализации набора данных, который будет использоваться в программе.
  • Строка 3: импортируется matplotlib.pyplot библиотека для визуализации результатов.
  • Строка 5: X инициализируется как массив numpy. Он содержит восемь элементов данных с двумя функциями в каждом.
  • Строка 6. Конструктор DBSCAN настроен на $eps=3$ и min_samples=2 и обучен на X. Результат сохраняется в объекте clustering.
  • Строка 7: Назначение кластера каждой точки данных извлекается из clustering и сохраняется в labels.
  • Строка 8: вектор цветов инициализируется и сохраняется в colors.
  • Строки 9–11: каждый элемент данных отображается на точечной диаграмме с цветом, соответствующим его кластеру.

Не стесняйтесь играть с кодом обоих алгоритмов (особенно с параметрами, ожидаемыми каждым алгоритмом) и наблюдать их влияние на результат.

К настоящему времени вы, вероятно, хорошо разбираетесь в основах кластеризации и готовы начать свое путешествие, чтобы стать экспертом в области машинного обучения.

Чтобы глубже погрузиться в кластеризацию и машинное обучение, изучите следующие курсы:

Как всегда, приятного обучения!