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

- Распространение близости

- K-средства

- Агломеративно-разделительная кластеризация (Подветви иерархической кластеризации)

- Среднее смещение

- Спектральная кластеризация

- ОПТИКА

- ДБСКАН

- Модель гауссовой смеси

- БЕРЕЗА

- Синкнет

- ЕМА

можно перечислить. В этой статье я сосредоточусь на «алгоритме K-средних», который использовал в своих прошлых исследованиях.

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

Прежде чем мы поговорим о принципе работы алгоритма K-Means, мы должны кратко коснуться концепции X-Means.

Определение X-средних

X-Means — это промежуточный процесс, который принимает локальные решения перед каждой работой, которую мы выполняем с помощью K-Means. Другими словами, это дополнение кластеризации K-средних. Например, это полезно для координации групп данных и определения их центра тяжести. X-Means отвечает за то, какое подмножество доступных центроидов кластеризованных наборов данных должно различать их. Это решение о разделении принимается путем расчета байесовского информационного критерия (BIC).

X-Means притворяется двумя альтернативными операциями:

1- В сценарии с выбранным значением K — мы называем его «Улучшить-параметры» — как алгоритм K-Means для оптимального обнаружения кластеров,
2- Согласно информационному критерию, он работает как разделитель кластеров — мы называем его «Улучшение структуры» — для оптимизации значения k.

Поскольку все эти процессы являются подготовительными, истинное значение К можно оценить незаметно только на основе набора данных. Если кратко рассказать о принципе работы X-Means:

Для возможных значений X определяются нижний и верхний пределы Kmin и Kmax. В группировке X-средних X = Xmin означает нахождение начального значения X и центроида. Затем этот процесс продолжается с шагом X = Xmax. На следующем шаге каждый прогнозируемый кластер выступает в роли основного кластера, который можно разделить на две группы.

Принцип работы алгоритма K-средних

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

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

Библиотека операций кластеризации pyclustering.cluster.xmeans, которая использует инструменты X-Means для определения оптимального количества кластеров, использует алгоритм, который мы называем "K++" при реализации его в нашей работе. По этому алгоритму выбираются начальные центры в известных пределах оптимального расположения центра, выбранного библиотекой, а затем всевозможные наши X-инструменты продолжают процесс оптимизации. Инициализация K++ случайным образом выбирает удаленные начальные точки. То есть по положению изначально выбранного объекта определяет следующий пропорционально удалению ранее выбранных.

Простой процесс кластеризации

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

На первом этапе мы добавляем библиотеки, которые будем использовать.

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

Затем мы импортируем существующий набор данных в код, который находится в нашей системе. Я также показал несколько математических данных по набору данных, таких как среднее значение и стандартное отклонение.

data = pd.read_csv("Banknote_Dataset")
mean = data.mean()
std_dev = data.std()

mean_V1 = mean[0]
mean_V2 = mean[1]
std_dev_V1 = std_dev[0]
std_dev_V2 = std_dev[1]

print(mean_V1, mean_V2)
print(std_dev_V1, std_dev_V2) 
-----------------------------------------
0.43373525728862977 1.9223531209912554
2.8427625862451675 5.8690467435803795

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

plt.scatter(mean_V1, mean_V2, c = 'red', s = 200, alpha = 0.9)
plt.scatter(data["V1"], data["V2"], c = 'grey', s = 150, alpha = 0.1)
plt.scatter(std_dev_V1, std_dev_V2, c = 'green', s = 200, alpha = 0.9)
plt.xlabel("V1")
plt.ylabel("V2")
plt.show()

Я вижу это; двух средних точек недостаточно для данных. Я понял что самый оптимальный вариант это 3 и соответственно хочу создать 3 кластера. Давайте сделаем последние штрихи с помощью K-Means, которые я вызвал из библиотеки sklearn.cluster.

v1 = data["V1"]
v2 = data["V2"]
normalized_data = (data - data.min()) / (data.max() - data.min())
v1_v2 = np.column_stack((v1,v2))
mean = np.mean(normalized_data)
std_dev = np.std(normalized_data)
print("mean: ", mean)
print("standard dev.: ", std_dev)
km_res = KMeans(n_clusters = 3).fit(normalized_data)
clusters  = km_res.cluster_centers_
plt.scatter(normalized_data["V1"], normalized_data["V2"], c = km_res.labels_.astype(float), alpha = 0.5, cmap = "winter")
plt.scatter(clusters[:,0],clusters[:,1], c = "red", s = 200)
plt.xlabel("V1")
plt.ylabel("V2")
plt.show()
---------------------
mean:  
V1    0.539114
V2    0.587301
dtype: float64
standard dev.:  
V1    0.204929
V2    0.219531
dtype: float64

Заключение

операции классификации и кластеризации; Он представляет собой предварительную обработку и подготовку данных для проекта по науке о данных и машинному обучению. По этой причине это очень важно. Я хотел рассказать вам об алгоритме K-средних, самом популярном методе кластеризации.

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



Ссылки

https://www.researchgate.net/profile/Trupti-Kodinariya/publication/313554124_Review_on_Determining_of_Cluster_in_K-means_Clustering/links/5789fda408ae59aa667931d2/Review-on-Determining-of-Cluster-in-K-means-Clustering.pdf

https://journals.sagepub.com/doi/abs/10.1243/095440605x8298