В чем разница между моделями GMM (Gaussian Mixture Model) и K-Means?

«В чем разница между моделями GMM (Gaussian Mixture Model) и K-Means?» — вопрос из категории Классическое ML, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

K-Means

  • Принцип: Жесткая (hard) кластеризация. Каждая точка данных принадлежит ровно одному кластеру (тому, чей центроид ближе).
  • Геометрия: Минимизирует сумму квадратов расстояний до центроидов. Эффективно находит сферические кластеры примерно одинакового размера.
  • Алгоритм: Итеративный (Expectation-Maximization в упрощенной форме). Быстрый и масштабируемый.

Gaussian Mixture Model (GMM)

  • Принцип: Мягкая (soft) или вероятностная кластеризация. Каждая точка может принадлежать всем кластерам с разной вероятностью (responsibility).
  • Геометрия: Предполагает, что данные порождены смесью нескольких гауссовых (нормальных) распределений. Может моделировать эллиптические кластеры разного размера и ориентации.
  • Алгоритм: Полноценный EM-алгоритм. Медленнее K-Means, но более гибкий.

Сравнение на практике:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.mixture import GaussianMixture

# Создаем вытянутые (не сферические) кластеры
X = np.vstack([np.random.randn(100, 2) * [0.5, 3],
               np.random.randn(100, 2) * [3, 0.5] + [5, 5]])

# K-Means
kmeans = KMeans(n_clusters=2, random_state=42).fit(X)
kmeans_labels = kmeans.predict(X) # Жесткие метки: 0 или 1

# GMM
gmm = GaussianMixture(n_components=2, random_state=42).fit(X)
gmm_probs = gmm.predict_proba(X) # Матрица вероятностей [N x 2]
gmm_labels = gmm.predict(X)      # Жесткие метки (по максимальной вероятности)

Когда что выбрать:

  • K-Means: Когда кластеры сферические и хорошо разделены, нужна скорость и интерпретируемость.
  • GMM: Когда кластеры имеют сложную форму (вытянутые, эллиптические), нужна оценка неопределенности (вероятность принадлежности) или модель используется как плотностная оценка.