Результаты обучения
После изучения урока вы сможете:
- Выбирать между K-means, иерархической кластеризацией и DBSCAN с учётом формы, плотности и масштаба данных.
- Объяснять влияние стандартизации, метрики расстояния и параметров алгоритма на результат.
- Использовать elbow method и silhouette score как диагностические, а не окончательные критерии.
- Проверять устойчивость кластеров при изменении выборки, инициализации и параметров.
- Объяснять, что сохраняет PCA и почему компоненты не являются автоматически новыми содержательными признаками.
- Различать снижение размерности для моделирования и двумерную визуализацию для исследования.
1. Почему один алгоритм не подходит всем данным
Кластеризация отвечает не на вопрос «какие классы существуют?», а на вопрос «какая структура проявляется при выбранном способе измерять сходство?». Поэтому сначала нужно описать геометрию данных. Компактные группы похожего размера могут быть удобны для K-means. Вытянутые, вложенные или сложные по форме области требуют другого подхода. Если плотность сильно различается, один глобальный порог соседства может не подойти ни одной настройке DBSCAN.
2. Подготовка признаков: расстояние начинается до алгоритма
Алгоритм сравнивает объекты в пространстве признаков. Если один признак измеряется в киловатт-часах и меняется на тысячи, а другой — в долях от нуля до единицы, евклидово расстояние может почти полностью определяться первым признаком. Стандартизация переводит признаки к сопоставимому масштабу, обычно вычитая среднее и деля на стандартное отклонение. Это не универсальная обязанность: для некоторых признаков важны исходные единицы, а выбросы могут сильно влиять на среднее и стандартное отклонение. Иногда устойчивое масштабирование по медиане и межквартильному размаху разумнее.
3. Как выбирать и настраивать алгоритм
K-means минимизирует сумму квадратов расстояний до центров. Он быстр и удобен как базовый ориентир, но предпочитает компактные выпуклые группы и требует задать k. Запускайте его с несколькими инициализациями и фиксируйте random_state для воспроизводимости. Иерархическая агломеративная кластеризация строит дерево объединений. Срез дерева на разной высоте даёт разное число групп; результат зависит от linkage — правила расстояния между кластерами. DBSCAN объединяет точки по плотностной достижимости, выделяет шум и может находить группы неправильной формы. Его eps и min_samples взаимосвязаны: увеличение eps расширяет окрестности, а min_samples задаёт требуемую локальную плотность. При неоднородной плотности DBSCAN может разделять одну структуру или объединять разные.
4. Как не выбирать число кластеров на глаз
Elbow method сравнивает внутрикластерную сумму квадратов для разных k. Ищут участок, после которого добавление кластеров даёт всё меньший выигрыш. «Локоть» часто неоднозначен и зависит от масштаба признаков. Silhouette score сравнивает расстояние объекта до своего кластера с расстоянием до ближайшего другого кластера. Значение ближе к 1 указывает на лучшее геометрическое разделение, около 0 — на границу, отрицательное — на возможное неудачное назначение. Но высокий балл не означает, что группы полезны для предметной задачи. Для DBSCAN дополнительно проверяют долю шума и чувствительность к eps; не следует считать шум автоматически плохими данными.
5. Устойчивость: повторяется ли найденная структура
Кластеризация часто не имеет единственного «правильного ответа». Повторите анализ на нескольких начальных состояниях, подвыборках или близких значениях параметров. Сопоставляйте не номера кластеров, а само разбиение: метки 0 и 1 могут поменяться местами, не изменив структуры. Adjusted Rand Index (ARI) сравнивает два разбиения с поправкой на случайное совпадение: 1 означает одинаковое разбиение, около 0 — уровень случайного соответствия, отрицательное значение — согласие хуже случайного ожидания. Устойчивость не доказывает истинность: алгоритм может стабильно находить артефакт плохих данных.
6. PCA: что именно уменьшается
PCA строит новые взаимно ортогональные оси — главные компоненты — как линейные комбинации исходных признаков. Первая компонента направлена туда, где дисперсия данных максимальна; следующая объясняет максимум оставшейся дисперсии при ортогональности предыдущим. Доля объяснённой дисперсии помогает понять, сколько вариации сохраняет выбранное число компонент. Но дисперсия не равна полезности: редкий, но важный сигнал может иметь небольшую дисперсию. Перед PCA обычно центрируют признаки; масштабирование зависит от того, сопоставимы ли единицы и важна ли их исходная вариативность.
7. Снижение размерности — не то же самое, что картинка в 2D
PCA часто используют и как преобразование признаков перед моделью, и как способ показать данные на плоскости. Эти цели различаются. Для моделирования число компонент выбирают по проверке качества downstream-задачи и допустимой потере информации. Для визуализации 2D-проекция неизбежно теряет направления. t-SNE и UMAP могут сохранять локальные соседства и показывать сложную структуру, но расстояния между далёкими группами, размер и плотность «островов» нельзя трактовать как прямую количественную меру. Визуальная изоляция групп — повод исследовать, а не доказательство естественных классов.
8. Сквозной пример: режимы работы здания
Предположим, для каждого часа есть признаки: средняя мощность, наружная температура, час суток и доля работающих агрегатов. Сначала проверяем единицы, пропуски, сезонность и коррелирующие признаки. Затем формируем набор признаков под вопрос: хотим ли мы найти похожие режимы по нагрузке или сравнить режимы независимо от времени суток? После стандартизации запускаем K-means как baseline, DBSCAN — если ожидаются группы сложной формы и шум, и иерархический метод — если важна вложенная структура. Сравниваем силуэт, долю шума, устойчивость на подвыборках и профили групп в исходных единицах. Только после этого даём группам интерпретируемые названия вместе с инженером.
9. Практикум на Python: сравнить методы и проверить PCA
Ниже — воспроизводимый эксперимент на синтетических профилях. Он не доказывает, какой алгоритм лучше для реального здания: он показывает рабочую последовательность — масштабирование, baseline-кластеризация, диагностика, сравнение разбиений и PCA. Нужны Python 3.10+, NumPy и scikit-learn: `python -m pip install numpy scikit-learn`. Запустите код целиком в виртуальном окружении или Jupyter Notebook.
Пример кода: сравнение K-means, DBSCAN и PCA
Код выводит диагностические показатели; конкретные значения зависят от версии библиотек и генератора случайных чисел.
import numpy as np
from sklearn.cluster import DBSCAN, KMeans
from sklearn.decomposition import PCA
from sklearn.metrics import adjusted_rand_score, silhouette_score
from sklearn.preprocessing import StandardScaler
rng = np.random.default_rng(7)
centres = np.array([[0.0, 0.0, 0.0], [4.0, 4.0, 1.0], [-3.0, 3.0, 4.0]])
clouds = [rng.normal(loc=centre, scale=scale, size=(90, 3))
for centre, scale in zip(centres, (0.45, 0.75, 0.55))]
X = np.vstack(clouds)
X = np.vstack([X, rng.uniform(-5, 7, size=(12, 3))])
X_scaled = StandardScaler().fit_transform(X)
kmeans_a = KMeans(n_clusters=3, n_init=20, random_state=7)
labels_a = kmeans_a.fit_predict(X_scaled)
kmeans_b = KMeans(n_clusters=3, n_init=20, random_state=21)
labels_b = kmeans_b.fit_predict(X_scaled)
dbscan = DBSCAN(eps=0.55, min_samples=6)
db_labels = dbscan.fit_predict(X_scaled)
non_noise = db_labels != -1
print("K-means clusters:", len(set(labels_a)))
print("K-means silhouette:", round(silhouette_score(X_scaled, labels_a), 3))
print("K-means stability (ARI):", round(adjusted_rand_score(labels_a, labels_b), 3))
print("DBSCAN clusters:", len(set(db_labels) - {-1}))
print("DBSCAN noise share:", round(1 - non_noise.mean(), 3))
pca = PCA(n_components=2, random_state=7)
X_2d = pca.fit_transform(X_scaled)
print("PCA explained variance:", np.round(pca.explained_variance_ratio_, 3))
print("Total retained variance:", round(pca.explained_variance_ratio_.sum(), 3))
Самостоятельное задание
Возьмите небольшой набор реальных или синтетических наблюдений (не менее 3 числовых признаков). Сформулируйте, какое сходство вы хотите обнаружить. Сравните K-means при двух значениях k и DBSCAN при двух значениях eps. Для каждого варианта запишите: число групп, долю шума (если есть), silhouette (если метрика применима), устойчивость на повторной выборке и содержательную интерпретацию профилей. Затем выполните PCA до двух компонент. Укажите, какую долю дисперсии сохранили компоненты и почему двумерный график не доказывает наличие истинных категорий. Завершите выводом, какой метод вы выбрали бы и какие ограничения остались.
10. Ограничения и типичные ошибки
- Не масштабировать признаки без анализа единиц и смысла — или масштабировать всё автоматически, не проверив выбросы.
- Считать локоть на графике однозначным ответом о числе кластеров.
- Сравнивать номера кластеров напрямую вместо сравнения разбиений.
- Считать высокий silhouette доказательством полезности или истинности групп.
- Интерпретировать PCA-компоненты как исходные признаки или причинные факторы.
- Считать 2D-визуализацию точной картой расстояний в исходном пространстве.
- Удалять точки DBSCAN как «ошибки» без предметной проверки.
11. Главное из урока
Кластеризация — это исследовательская гипотеза, зависящая от признаков, масштаба, метрики и алгоритма. Хороший анализ сравнивает несколько обоснованных вариантов, проверяет устойчивость и возвращается к исходным признакам для интерпретации. PCA сжимает вариацию в новых координатах, но не гарантирует сохранение всех важных сигналов. Ни метрика, ни красивая визуализация не заменяют предметную проверку.
Источники и дополнительное чтение
Словарь урока
Преобразование числового признака к сопоставимому масштабу, обычно с нулевым средним и единичным стандартным отклонением.
Средняя точка объектов кластера в пространстве признаков; используется, например, в K-means.
Правило вычисления расстояния между двумя группами в иерархической кластеризации.
Отношение соседства, определяемое через локальную плотность и параметры DBSCAN.
Радиус окрестности, используемый DBSCAN для поиска плотных областей.
Мера геометрической компактности объекта внутри своего кластера и отделённости от соседнего.
Сохранение сходного разбиения при небольших изменениях данных, запуска или параметров.
Новая ортогональная ось PCA, являющаяся линейной комбинацией исходных признаков.
Доля вариации данных, описываемая компонентой или набором компонент PCA.
Совокупность эффектов высокой размерности, из-за которых расстояния и плотность становятся менее информативными.
Самопроверка
Вопрос 1
Что нужно сделать до запуска K-means, если признаки измеряются в несопоставимых единицах?
Вопрос 2
Как правильно интерпретировать silhouette score?
Вопрос 3
Что является особенностью DBSCAN?
Вопрос 4
Почему номера кластеров нельзя сравнивать напрямую между двумя запусками?
Вопрос 5
Что означает высокая объяснённая дисперсия первых компонент PCA?
Вопрос 6
Как корректно использовать двумерную карту t-SNE или UMAP?
Вопрос 7
Какие действия помогают проверить устойчивость кластеров? Выберите все подходящие варианты.
Вопрос 8
Какие утверждения о PCA верны? Выберите все подходящие варианты.