Кластеризация K-Means – это популярный алгоритм машинного обучения без учителя, используемый для разделения данных на отдельные группы. В этой статье мы рассмотрим, как применить кластеризацию K-Means с помощью библиотеки scikit-learn (sklearn) к набору данных MNIST, который состоит из рукописных изображений цифр. Мы рассмотрим различные методы и предоставим примеры кода, которые помогут вам понять и эффективно реализовать кластеризацию K-Means.
Понимание набора данных MNIST:
Прежде чем углубляться в кластеризацию K-средних, давайте кратко обсудим набор данных MNIST. Он содержит большую коллекцию изображений рукописных цифр от 0 до 9 размером 28×28 пикселей в оттенках серого. Цель состоит в том, чтобы сгруппировать похожие цифры вместе с помощью кластеризации K-средних.
Метод 1: предварительная обработка данных
Для начала нам необходимо предварительно обработать набор данных MNIST, чтобы подготовить его к кластеризации K-средних. Это включает в себя преобразование изображений в плоский формат, масштабирование значений пикселей и уменьшение размерности, если это необходимо. Вот пример фрагмента кода:
from sklearn.datasets import load_digits
from sklearn.preprocessing import StandardScaler
# Load the MNIST dataset
digits = load_digits()
# Flatten the images
data = digits.data
# Scale the pixel values
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)
Метод 2: обучение модели K-средних
Далее мы обучим модель K-средних на предварительно обработанных данных. Количество кластеров (k) представляет собой количество отдельных групп, которые мы хотим идентифицировать. Вот пример фрагмента кода:
from sklearn.cluster import KMeans
# Set the number of clusters
k = 10
# Initialize the K-Means model
kmeans = KMeans(n_clusters=k)
# Fit the model to the scaled data
kmeans.fit(scaled_data)
Метод 3: Визуализация кластеров
Визуализация кластеров может помочь нам понять, насколько хорошо алгоритм K-Means сгруппировал цифры. Мы можем использовать методы уменьшения размерности, такие как анализ главных компонентов (PCA), чтобы проецировать данные в пространство меньшей размерности и отображать их на графике. Вот пример фрагмента кода:
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
# Reduce dimensionality
pca = PCA(n_components=2)
reduced_data = pca.fit_transform(scaled_data)
# Visualize the clusters
plt.scatter(reduced_data[:, 0], reduced_data[:, 1], c=kmeans.labels_, cmap='viridis')
plt.title("K-Means Clustering on MNIST Dataset")
plt.xlabel("Principal Component 1")
plt.ylabel("Principal Component 2")
plt.show()
Метод 4: оценка результатов кластеризации
Очень важно оценить качество результатов кластеризации. Одним из часто используемых показателей является показатель силуэта, который измеряет, насколько хорошо каждый образец вписывается в назначенный ему кластер. Вот пример фрагмента кода:
from sklearn.metrics import silhouette_score
# Compute the silhouette score
silhouette_avg = silhouette_score(scaled_data, kmeans.labels_)
print(f"The average silhouette score is: {silhouette_avg}")
В этой статье мы рассмотрели применение кластеризации K-Means к набору данных MNIST с помощью scikit-learn. Мы рассмотрели методы предварительной обработки данных, обучения модели, визуализации кластеров и оценки результатов. Используя возможности кластеризации K-Means, мы можем выявить скрытые закономерности и получить ценную информацию на основе сложных наборов данных, таких как MNIST.