Начало работы с кластеризацией

Что такое кластер? Первая картинка, которая возникает у нас в голове, когда мы слышим это слово, — это «группа» или «кучка», верно? Но зачем кому-то что-то группировать? Может быть, потому, что легче найти что-то хорошо классифицированное? Или, может быть, потому, что невозможно прочитать большие данные, если они не сгруппированы должным образом. Что ж, все эти предположения верны и приводят к одной простой причине, т. е. мы группируем те атрибуты, которые относятся к одному типу.

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

Давайте разберемся на простом примере:

ДАННЫЕ = {Германия, Англия, США, Япония, Ирландия, Индия, Канада}

Если вы прочтете приведенные выше данные, то сможете легко определить, что эти страны могут образовывать кластеры на основе континентов, например:
АЗИЯ = {Индия, Япония}
Европа = {Англия, Ирландия, Германия}
Северная Америка = {США, Канада}

Применения кластеризации

Есть много приложений для кластеризации, например

1. Сегментация рынка.

2. Сегментация изображения.

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

Здесь в этой выборке мы в основном получили следующие 3 кластера: (слева направо)
1. молодые люди, которые тратят меньше
2. молодые люди, которые тратят много
3. пожилые люди, которые потратить немного

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

Сегментация изображения. Вы когда-нибудь задумывались, сколько цветов вместе составляют изображение. Что ж, примерно 16 777 216 в изображении RGB и приблизительно 256 оттенков цвета в изображении в градациях серого. Так где же здесь кластеризация? Что ж, каждый оттенок цвета сам по себе является кластером. Также в процессе сжатия изображения мы просто уменьшаем количество кластеров изображения, поэтому изображение в градациях серого требует меньше места, чем изображение RGB.

Разница между классификацией и кластеризацией:

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

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

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

Кластеризация K-средних

Я надеюсь, прежде чем двигаться дальше, что все знают

1.Как найти расстояние между двумя данными точками на декартовой плоскости.
2.Как найти центр тяжести данных точек на декартовой плоскости.

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

Ну, сначала мы понимаем, что такое K. «K» на самом деле означает здесь количество кластеров, которые вы хотите на своем графике. Этот метод основан исключительно на концепции центроида. Мы также можем сказать, что здесь «K» — это количество центроидов.

Вот шаг, необходимый для кластеризации K Means

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

5. Повторяйте шаги 3 и 4 до тех пор, пока перестановка не станет невозможной.

Давайте разберем весь процесс на примере: -
Набор данных, который мы будем использовать, — это набор данных о стране, на котором я привел пример.
country_cluster.csv.

мы начнем с импорта соответствующих библиотек

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
from sklearn.cluster import KMeans

загрузить данные

data = pd.read_csv('3.01. Country clusters.csv')

Теперь мы построим данные, чтобы лучше понять данные и применить кластерный анализ.

plt.scatter(data['Longitude'],data['Latitude'])
plt.xlim(-180,180)
plt.ylim(-90,90)
plt.show

ваш график теперь будет выглядеть так

Если вы сделаете быстрый визуальный осмотр, вы можете легко определить, что существует 3 возможных кластера: Северная Америка, Европа, Австралия.

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

x = data.iloc[:,1:3]
kmeans = KMeans(3)

После выбора нужных столбцов, то есть «долгота» и «широта», мы будем использовать KMeans. 3 внутри KMeans — это количество кластеров, которые нам нужны.

Теперь сохраните кластеры в новый фрейм данных с помощью метода подгонки.

identified_clusters = kmeans.fit_predict(x)

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

data_with_clusters = data.copy()
data_with_clusters['Cluster'] = identified_clusters

Обратите внимание, что в data_with_cluster есть столбец Cluster со значениями 2,1,0.
Эти числа связаны с каким-то кластером, или вы можете сказать seed.

Теперь, наконец, постройте кластеры

plt.scatter(data_with_clusters['Longitude'],data_with_clusters['Latitude'],c=data_with_clusters['Cluster'],cmap='rainbow')
plt.xlim(-180,180)
plt.ylim(-90,90)
plt.show()

Надеюсь, теперь вы знакомы с формированием кластера и его анализом.

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

Просто возьмем пример предыдущего набора данных, в нем также есть еще один столбец, называемый языком. Вы можете сопоставить эту вещь с 0,1,2.

data_mapped = data.copy()
data_mapped['Language']=data_mapped['Language'].map({'English':0,'French':1,'German':2})
data_mapped

После сопоставления запустите тот же код, и вы увидите следующий результат.

ну, это тот же кластер, что и раньше, верно? может быть, потому что у нас очень мало данных. Не волнуйтесь, теперь мы предскажем правильное количество кластеров.

Метод локтя

Одним из наиболее фундаментальных методов определения количества кластеров является использование метода локтя. Почему же мы называем это методом локтя? Вы узнаете это очень скоро.

При создании кластеров мы учитываем, что между точками внутри кластера должно быть меньше разрыва, а между двумя кластерами больше.
Но знаете ли вы, что при использовании KMeans это происходит одновременно, т.е. кластер действительно заставит кластеры разделиться на приличное расстояние. Следовательно, чтобы заставить алгоритм работать эффективно, очень важно знать правильное количество кластеров.

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

Давайте применим концепцию WCSS к нашему предыдущему примеру.

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

И если мы возьмем только один кластер для пакета из 6 точек данных, то, наоборот, значение WCSS будет равно 1, что снова не является идеальным случаем.

так что мы точно хотим, чтобы небольшое количество кластеров выполняло анализ данных, но каково идеальное значение WCSS?

Вы нашли что-то похожее на график и локоть? Я думаю, что да. Определенно, что график между WCSS и номером кластера будет формировать колено, а точка колена — это идеальное число кластера, которое будет соответствовать данным. Вы можете быть сбиты с толку и скажете, что есть два точка локтя, одна в 3-м кластере, а другая в 5-м кластере.

Давайте начнем писать код для метода локтя.

Мы будем действовать с тем же предыдущим примером, который мы обсуждали ранее. рассмотрим следующий код в продолжение.

Чтобы получить значение WCSS из нашего последнего примера, мы будем использовать

kmeans.inertia_

затем создайте пустой список

wcss=[]

Теперь сформируем все возможные кластеры с петлей

for i in range(1,7):
kmeans = KMeans(i)
kmeans.fit(x)
wcss_iter = kmeans.inertia_
wcss.append(wcss_iter)

Это знаменует собой конец процесса изгиба, все, что нам нужно сделать сейчас, это построить график и предсказать, какая точка изгиба является точкой изгиба, и назначить количество кластеров в соответствии с ней.

number_clusters = range(1,7)
plt.plot(number_clusters,wcss)
plt.title('The Elbow Method')
plt.xlabel('Number of clusters')
plt.ylabel('Within-cluster Sum of Squares')

Мы видим четкое колено на 3, следовательно, правильное и оптимальное количество кластеров равно 3.

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

следите за новыми статьями.