Среди алгоритмов обучения без учителя наиболее популярным является алгоритм K Means, и в этой статье я попытаюсь объяснить его работу, используя набор данных торгового центра.

K-means_clustering, вероятно, является первым алгоритмом, о котором узнаёт энтузиаст данных, когда имеет дело с неконтролируемым обучением. Это алгоритм, который в заданном наборе данных распределяет точки данных по k кластерам или группам.

Как работает K-Means?

Сначала выбирается k количество так называемых центроидов. Центроид – это точка данных (реальная или воображаемая), которая находится в центре кластера. Каждый центроид — это существующая точка данных в заданном наборе входных данных (или он может быть сгенерирован случайным образом), который выбирается случайным образом, так что все центроиды уникальны (т. е. , для всех центроидовci и cj ci ≠ cj).

Для первой итерации каждая точка данных назначается ближайшему кластеру путем вычисления евклидова расстояния между точкой данных и кластерами.

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

Выбор значения «

Для алгоритма K-средних требуется очень важный параметр , то есть значение k. Значение « позволяет указать количество кластеров, в которые вы хотите распределить набор данных. Мы углубимся в эту деталь при фактическом внедрении K-средних с набором данных.

Мы будем использовать набор данных торгового центра, который хранит данные на уровне клиента с его годовым доходом и оценкой расходов (по шкале от 1 до 100). Теперь перейдем к части кодирования.

# Importing the Libraries
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

Давайте импортируем набор данных.

# Importing our Mall Dataset
dataset = pd.read_csv(r"D:\self learning\Mall_Customers.csv")

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

Давайте посмотрим на некоторые примеры данных.

# head command shows the sample dataset from the top
dataset.head()

В приведенном выше образце набора данных мы видим 5 столбцов, но нас интересует группировка нашего набора данных на основе годового дохода и оценки расходов. Итак, давайте проверим наличие отсутствующих значений в наборе данных.

dataset.count()

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

X = dataset.iloc[:,[3,4]]
X.head()

Давайте применим алгоритм K-средних, но подождите, для выполнения алгоритма K-средних требуется бессмертный параметр, то есть значение ‘k’. Итак, давайте сначала узнаем, как рассчитать значение K.

Одной из метрик, которая обычно используется для сравнения результатов при различных значениях K, является среднее расстояние между точками данных и их кластером центроид. Поскольку увеличение количества кластеров всегда будет уменьшать расстояние до точек данных, увеличение K будет всегда уменьшать этот показатель вплоть до достижения нуля при K. em> совпадает с количеством точек данных. Поэтому строится среднее расстояние до центроида в зависимости от K и «локтевой точки» , где скорость уменьшения резко меняется, можно использовать для приблизительного определения K.

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

from sklearn.cluster import KMeans
wcss = []
for i in range(1,10):
    kmeans = KMeans(n_clusters = i)
    kmeans.fit(X)
    iner = kmeans.inertia_
    wcss.append(iner)

После того, как петля закончена, давайте построим график колена.

# Plotting the Elbow graph
plt.plot(range(1,10) , wcss)
plt.xlabel("Number of Cluster")
plt.ylabel("Interia/WCSS")
plt.show()

Мы можем ясно видеть, что для нашего набора данных, когда значение 'k' равно 5, происходит резкий поворот (например, локоть), указывающий, что это точка, после которой увеличение числа кластеров не будет иметь существенного значения для значения суммы квадратов внутри кластера, поэтому мы выбираем значение 'k' равным 5 и обучаем нашу модель.

# Training our Model
kmeans = KMeans(n_clusters = 5)
dataset['Cluster'] = kmeans.fit_predict(X)
dataset.head()

Давайте переименуем имена столбцов для удобства визуализации нашего кода.

#Renaming the column names for our ease
dataset.columns
dataset = dataset.rename(columns = {"Annual Income (k$)" : "Annual_Income",
                           "Spending Score (1-100)" : "Spending_Score"} )
dataset.head()

Давайте теперь визуализируем точки данных и центроид кластера.

# Lets visualize the clusters for some information
plt.scatter(x = dataset.loc[dataset.Cluster == 0 , 'Annual_Income'].values , y = dataset.loc[dataset.Cluster == 0 , 'Spending_Score'].values , s = 100 , c = 'red' , label = "Cluster1" )
plt.scatter(x = dataset.loc[dataset.Cluster == 1 , 'Annual_Income'].values , y = dataset.loc[dataset.Cluster == 1 , 'Spending_Score'].values , s = 100 , c = 'blue' , label = "Cluster2" )
plt.scatter(x = dataset.loc[dataset.Cluster == 2 , 'Annual_Income'].values , y = dataset.loc[dataset.Cluster == 2 , 'Spending_Score'].values , s = 100 , c = 'green' , label = "Cluster3" )
plt.scatter(x = dataset.loc[dataset.Cluster == 3 , 'Annual_Income'].values , y = dataset.loc[dataset.Cluster == 3 , 'Spending_Score'].values , s = 100 , c = 'brown' , label = "Cluster4" )
plt.scatter(x = dataset.loc[dataset.Cluster == 4 , 'Annual_Income'].values , y = dataset.loc[dataset.Cluster == 4 , 'Spending_Score'].values , s = 100 , c = 'magenta' , label = "Cluster5")
plt.scatter(x = kmeans.cluster_centers_[:,0] , y = kmeans.cluster_centers_[:,1] , s = 400 , c = 'yellow')
plt.xlabel('Annual Income in K$')
plt.ylabel('Spending Score in 1-100')
plt.title("Clustering the customers on basis of their Income and Spending Score")
plt.legend()
plt.show()

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

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

Сначала опишем кластеры:
1) Кластер-1 (красный): Среднийгодовой доход и Среднийпоказатель расходов.
2) Кластер 2 (синий):Низкийгодовой доход, но высокийпоказатель расходов.
3) Кластер-3 (зеленый): Высокийгодовой доход, но низкийпоказатель расходов.
4) Кластер-4 (в Коричневый): Высокийгодовой доход и Высокийпоказатель расходов.
5) Кластер 5 (пурпурный): Низкийгодовой доход и низкийпоказатель расходов.

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

Итак, подводя итог, давайте кратко рассмотрим преимущества и недостатки алгоритма кластеризации K-средних.

Преимущества кластеризации K-средних:

1. Простота реализации и быстродействие.
2. Измеримый и эффективный при сборе больших данных.
3. Легко интерпретировать результаты кластеризации.
4. Быстрый и эффективный с точки зрения вычислительных затрат.

Недостатки кластеризации K-средних:

1. Когда количество данных не так много, первоначальная группировка значительно определит кластер.
2. Номер кластера, K, должен быть определен заранее. Его недостатком является то, что он не дает одинаковый результат при каждом запуске, поскольку результирующие кластеры зависят от начальных случайных назначений.
3. Мы никогда не узнаем реальный кластер, используя одни и те же данные, потому что, если он вводится в другом порядке, он может создать другой кластер, если количество данных мало.
4. Чувствителен к начальному состоянию. Различные начальные условия могут привести к другому результату кластера.

Спасибо за чтение!!