Эта статья была написана Малик Джахан, членом группы технического контента Educative.
Машинное обучение превратилось в панорамную область и применяется в самых разных дисциплинах. Выбор и применение большинства алгоритмов машинного обучения в первую очередь зависят от характера задачи и набора данных. Если набор данных содержит набор экземпляров или точек данных, которые не имеют заранее определенной метки, ожидается, что алгоритмы кластеризации обработают данные и попытаются извлечь различные шаблоны. Например, если в миске находится смесь шаров разного размера и цвета (без дополнительной информации) и задача состоит в том, чтобы придумать нужное количество групп шаров, то это пример задачи кластеризации.
Кластеризация – это неконтролируемая стратегия обучения, позволяющая группировать заданный набор точек данных в несколько групп или кластеров.
Разбивка данных на разумное количество кластеров помогает извлечь базовые закономерности в данных и преобразовать необработанные данные в осмысленные знания. Примеры областей применения включают следующее:
- Распознавание образов
- Сегментация изображения
- Профилирование пользователей или клиентов
- Категоризация объектов по ряду категорий или групп
- Обнаружение выбросов или шума в пуле элементов данных
Получив набор данных, распределите данные по соответствующему количеству кластеров. В литературе описано множество алгоритмов кластеризации. В следующих разделах рассматриваются два популярных алгоритма кластеризации.
Алгоритм кластеризации k-средних
Алгоритм кластеризации k-средних является одним из наиболее часто используемых алгоритмов кластеризации. Он группирует данные в k кластеров. Алгоритм ожидает, что k будет определено как входные данные для алгоритма. Это итеративный алгоритм, который выполняет следующие шаги для кластеризации заданных данных в k кластеров:
- Выберите k произвольных центроидов, представляющих k кластеров (один из распространенных способов выбора начальных центроидов — обозначить первые k точки данных как k центроиды.)
- Сравните каждую точку данных со всеми k центроидами и назначьте их ближайшим кластерам. Соответствующая функция расстояния используется для вычисления расстояния между двумя элементами данных.
- Пересчитайте центроиды на основе нового назначения. Среднее значение элементов данных каждого кластера служит центроидом.
- Продолжайте повторять шаги 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: каждый элемент данных отображается на точечной диаграмме с цветом, соответствующим его кластеру.
Не стесняйтесь играть с кодом обоих алгоритмов (особенно с параметрами, ожидаемыми каждым алгоритмом) и наблюдать их влияние на результат.
К настоящему времени вы, вероятно, хорошо разбираетесь в основах кластеризации и готовы начать свое путешествие, чтобы стать экспертом в области машинного обучения.
Чтобы глубже погрузиться в кластеризацию и машинное обучение, изучите следующие курсы:
- Практическое руководство по машинному обучению с помощью Python
- Овладение теорией и практикой машинного обучения
- Практическое машинное обучение с помощью Scikit-Learn
Как всегда, приятного обучения!