Окружающие нас предметы происходят из естественных групп

Кластеризация — это метод поиска естественных групп в данных.

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

Каковы основные мотивы кластеризации?

Эти три мотива можно перечислить следующим образом.

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

Естественная классификация. Мы знаем, что существует четыре различных типа или группы животных.

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

k-средних, пожалуй, самый популярный алгоритм, который делит объекты на k групп. Это имеет множество применений, поскольку мы хотим найти структуру в данных. Мы хотим сгруппировать студентов, клиентов, пациентов, продукты, фильмы, твиты, изображения и так далее.

Давайте теперь посмотрим, как это работает.

Как работает метод k-средних

Ввод: будут даны данные и задано значение «k».

Шаг 1: Инициализируйте случайные точки «k» из данных в качестве центров кластера, давайте предположим, что значение k равно 2, а 1-е и 4-е наблюдения выбраны в качестве центров.

Шаг 2: Для всех точек найдите расстояние от k центров кластеров. Можно использовать Евклидово расстояние. Следующая таблица используется в качестве иллюстрации. В столбцах C1 и C2 указано расстояние от центров соответственно.

Если для 2-го наблюдения мы хотим определить расстояние от центроида 1, расчет будет выглядеть следующим образом

  • Обратите внимание, что расстояние первой точки от центра 1 равно 0, а расстояние четвертой точки от второго кластера равно 0. Причина проста, эти точки были выбраны в качестве центроидов.
  • Также для третьего наблюдения расстояние от обоих центров одинаково.

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

Первые две точки относятся к кластеру 1, третья точка назначается случайным образом, а последние четыре точки назначаются к кластеру 2.

Этот шаг 2 и шаг 3 повторяются до сходимости

  • Отсутствие изменений в центре кластера от итерации к итерации
  • Очень небольшое изменение в назначении кластера

По сути, мы пытаемся найти k лучших репрезентативных точек. Они выбираются, взяв среднее значение. Следовательно, мы пытаемся итеративно найти k лучших репрезентативных точек. Отсюда и название k-means.

Каковы некоторые проблемы в k-средних и как их обойти?

Некоторые из проблем k-средних

  • Поскольку первым шагом является случайная инициализация, это имеет отношение к качеству кластеров (некоторые из них могут быть решены с помощью k-средних ++, которые выбирают случайные точки постепенно, следя за тем, чтобы следующая точка выбиралась только тогда, когда она находится далеко от выбранных точек)
  • Выбирает круги круглой формы (с мерой расстояния можно играть в определенной степени)
  • На них влияют выбросы (выбросы можно удалить, а затем применить кластеризацию)
  • Значение k должно быть задано пользователем (подход к поиску того же обсуждается)

Как найти оптимальное значение k

Хороший кластер — тот, где точки расположены близко к центру. Как мы можем найти близость? Мы можем найти евклидово расстояние всех точек в этом кластере от центра кластера. Теперь нам нужно распространить это на все кластеры. Эта идея представлена ​​в приведенном выше уравнении и называется внутрикластерной суммой квадрата. В идеале мы хотели бы, чтобы он был небольшим. В крайнем случае у нас может быть один кластер для каждой точки, в результате чего WCSS равен 0. Также оказывается, что по мере увеличения k WCSS продолжает уменьшаться. Технически это называется монотонно убывающим.

Мы хотим скорее остановиться там, где есть самое крутое падение или формирующийся изгиб, когда мы строим график WCSS по оси y и количество кластеров по оси x.

Как применять k-средних

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

# Importing the Standard Scaler
from sklearn.preprocessing import StandardScaler 
#Intializing the Stnadard Scaler
scaler = StandardScaler().fit(df) 
#Standardizing the data
df_scaled = scaler.transform(df)

Кластеризация: фрагмент кода приведен ниже.

#Imporing the Library
from sklearn.cluster import KMeans
# Intialization
kmeans = KMeans(n_clusters = 3, init = 'random', max_iter = 300, n_init = 10, random_state = 0) 
#Applying Clustering
y_kmeans = kmeans.fit_predict(df_scaled)

Некоторые важные параметры:

  • n_clusters: количество кластеров или k
  • init: Random или kmeans++ (Мы уже обсуждали, как kmeans++ обеспечивает лучшую инициализацию)
  • n_init: Алгоритм запускается с этим множеством различных случайных выборов начальных k точек. Лучшее возвращается.
  • максимальная итерация: сколько итераций будет выполнять алгоритм
  • tol: Это означает допуск, а также используется для критерия завершения. Это интересная концепция. Если это небольшое изменение центров от одной итерации к другой, то мы движемся к конвергенции. Центры являются матрицами, и мы можем найти близость между двумя матрицами, проверив поэлементное евклидово расстояние. Это называется нормой Фробениуса.

Определение значения «k»

Фрагмент кода приведен ниже.

# Applying k-means for diffrent value of k and storing the WCSS
from sklearn.cluster import KMeans
wcss = []
for i in range(1, 11):
    kmeans = KMeans(n_clusters = i, init = 'random', max_iter = 300, n_init = 10, random_state = 0)
    kmeans.fit(x_scaled)
    wcss.append(kmeans.inertia_)

Для построения графика зависимости от количества кластеров

plt.plot(range(1, 11), wcss)
plt.title('The elbow method')
plt.xlabel('Number of clusters')
plt.ylabel('SSE')      #within cluster sum of squares
plt.show()

  • Вы можете ознакомиться с нашей полной реализацией здесь.
  • Вы также можете посмотреть видеоурок, в котором больше рассказывается о кластеризации здесь

Вывод:

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

Ссылка:

[1] https://towardsdatascience.com/k-means-clustering-13430ff3461d