KMeans — это популярный алгоритм кластеризации, используемый для группировки точек данных на основе их сходства. В этом руководстве мы будем использовать KMeans для кластеризации демографических данных клиентов с использованием соответствующего набора данных.

Скачать набор данных

Вы можете загрузить набор данных Mall_Customers.csv из различных онлайн-источников. Один из вариантов — перейти по этой ссылке и нажать кнопку Загрузить, чтобы загрузить набор данных.

Шаг 1: Импорт библиотек и данных

Во-первых, нам нужно импортировать необходимые библиотеки и загрузить наш набор данных. Мы будем использовать библиотеку pandas для чтения наших данных и библиотеку sklearn для кластеризации. В этом уроке мы будем использовать набор данных Mall_Customers.csv, который содержит информацию о покупателях торгового центра.

import pandas as pd
from sklearn.cluster import KMeans
# Load data
data = pd.read_csv('Mall_Customers.csv')

Шаг 2: Предварительная обработка данных

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

# Select columns for clustering
X = data[['Age', 'Annual Income (k$)', 'Spending Score (1-100)']].values

Мы также нормализуем наши данные, используя функцию StandardScaler из sklearn.

# Normalize data
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X = scaler.fit_transform(X)

Шаг 3: Выбор количества кластеров

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

import matplotlib.pyplot as plt
# Elbow method to find optimal number of clusters
ssd = []
for k in range(1, 11):
    kmeans = KMeans(n_clusters=k, init='k-means++')
    kmeans.fit(X)
    ssd.append(kmeans.inertia_)
plt.plot(range(1, 11), ssd)
plt.title('Elbow Method')
plt.xlabel('Number of clusters')
plt.ylabel('SSD')
plt.show()

Шаг 4: Выполните кластеризацию

Теперь, когда мы выбрали количество кластеров, мы можем выполнить кластеризацию, используя функцию KMeans из sklearn.

# Perform clustering
kmeans = KMeans(n_clusters=5, init='k-means++')
y_kmeans = kmeans.fit_predict(X)

Шаг 5: Визуализируйте кластеры

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

# Visualize clusters
plt.scatter(X[y_kmeans == 0, 0], X[y_kmeans == 0, 1], s=100, c='red', label='Cluster 1')
plt.scatter(X[y_kmeans == 1, 0], X[y_kmeans == 1, 1], s=100, c='blue', label='Cluster 2')
plt.scatter(X[y_kmeans == 2, 0], X[y_kmeans == 2, 1], s=100, c='green', label='Cluster 3')
plt.scatter(X[y_kmeans == 3, 0], X[y_kmeans == 3, 1], s=100, c='cyan', label='Cluster 4')
plt.scatter(X[y_kmeans == 4, 0], X[y_kmeans == 4, 1], s=100, c='magenta', label='Cluster 5')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=300, c='yellow', label='Centroids')
plt.title('Clusters of Customers')
plt.xlabel('Age')
plt.ylabel('Spending Score (1-100)')
plt.legend()
plt.show()

Вот и все! Мы успешно использовали KMeans для кластеризации демографических данных клиентов с помощью Python.