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.