ЛР2
Кластеры и снижение размерности

Раздел 4 · 1 балл

Кластеры и снижение размерности

Готовый kMeans из sklearn делит клиентов на группы по тратам. Мы выбираем число групп, рисуем их на плоскости тремя способами и объясняем, кто в какой группе. Писать тут почти ничего не нужно, балл дают за объяснение.

Кластер
Группа похожих объектов.
Кластеризация
Деление объектов на группы, когда правильных ответов никто не дал.
Обучение без учителя
У данных нет «правильных меток», алгоритм ищет структуру сам. kNN выше был «с учителем»: доходы соседей известны.
Центроид
Центр кластера: среднее всех его точек.
На пальцах: kMeans. На поле стоят люди. Ставим k флажков наугад. Каждый человек идёт к ближайшему флажку. Потом каждый флажок переносим в середину своей толпы. Люди снова выбирают ближайший флажок. Повторяем, пока флажки не перестанут двигаться.

Сколько групп брать

Ноутбук запускает kMeans для k от 2 до 14 и смотрит на две оценки.

Инерция (SSE)
Сумма квадратов расстояний от каждого клиента до центра его группы. Меньше = группы плотнее.
Метод локтя
Ищем k, после которого инерция перестаёт сильно падать: график сгибается, как рука в локте.
Силуэт
Оценка от −1 до 1: насколько клиент ближе к своей группе, чем к соседней. Ближе к 1 = группы чётче.

Формула силуэта для одного клиента: a = среднее расстояние до своих, b = среднее расстояние до ближайшей чужой группы.

s = (b − a) / max(a, b) пример: a = 1, b = 3 → s = (3 − 1) / 3 ≈ 0.67 (хорошо сидит в своей группе)
Слева SSE падает с ростом k, справа силуэт по k
Слева инерция плавно падает с ~7600 (k=2) до ~3200 (k=14), явного локтя нет. Справа силуэт: 0.51 при k=2, 0.456 при k=3, 0.471 при k=4, потом пик около 0.46 при k=7-8 и падение.
k-means++
Умный старт: начальные флажки ставятся подальше друг от друга.
n_init=10
10 запусков с разных стартов, берётся лучший (с наименьшей инерцией).
random_state=42
Фиксирует случайность, чтобы при повторном запуске получился тот же результат.

Снижение размерности: как нарисовать 6 признаков

У каждого клиента 6 чисел трат, а экран плоский. Методы снижения размерности сжимают 6 чисел до 2-3 так, чтобы картинка как можно меньше врала.

На пальцах. Тень от предмета на стене. По тени можно понять форму, но что-то обязательно теряется. Разные методы светят под разными углами.
МетодКак работаетЧто сохраняет
PCAЛинейный: поворачивает облако и смотрит вдоль направлений самого большого разбросаОбщую форму, расстояния вдоль главных осей
t-SNEНелинейный: старается, чтобы соседи остались соседямиЛокальную структуру (кто рядом с кем)
UMAPНелинейный, похож на t-SNE, но опирается на топологиюИ соседей, и лучше общую картину
Линейный
Только поворачивает и сплющивает, не гнёт. Нелинейный может «разгибать» облако.
PCA, t-SNE и UMAP в 2D и 3D, цвет = кластер
Верхний ряд 2D, нижний 3D. Цвет = номер кластера. Зелёный (2) это самая большая группа.

Кто в каких группах

Средние траты в каждой группе (номера из запуска в Colab):

Кл.ЛюдейВиноФруктыМясоРыбаСладкоеЗолото
21297966359617
039271736367533540
1206476261713226144
3345512914321309690
все224030426167382744
ГруппаПортрет
2 · экономныеБольше половины клиентов, тратят мало на всё
0 · вино + мясоВино 717 (в 2.4 раза выше среднего), мясо тоже высокое, остального мало
1 · любители золотаЗолото 144, втрое выше среднего
3 · гурманыМного тратят на всё: фрукты, рыбу, сладости в 3 с лишним раза выше среднего

«Есть ли кластер любителей вина?» (вопрос из ноутбука). Да, с оговоркой: в группе 0 траты на вино самые высокие среди всех групп, а на фрукты, рыбу и сладости низкие. Но мясо там тоже выше среднего, поэтому честнее «вино + мясо».

Ловушка. Номера кластеров случайны. При другом запуске (например, у меня локально) экономные получились кластером 0. Группы и их размеры при этом те же, поэтому называй группы по содержанию, а не по номеру.

Вопросы на защите

Почему k = 4?

Явного локтя у инерции нет. Силуэт при k=4 даёт локальный пик (0.471), а группы хорошо описываются словами. k=2 даёт только «мало / много».

Почему инерция всегда падает с ростом k?

Больше центров → каждая точка ближе к своему центру. В пределе, когда центр у каждой точки свой, инерция 0. Поэтому по ней ищут излом, а не минимум.

Чем PCA отличается от t-SNE и UMAP?

PCA линейный, только поворачивает и сплющивает. t-SNE и UMAP нелинейные, сохраняют соседей и лучше показывают группы, но расстояния между группами на их картинках не настоящие.

Зачем StandardScaler перед kMeans?

kMeans тоже считает расстояния. Без масштаба вино (до 1493) и мясо (до 1725) задавили бы фрукты (до 199) и сладости.

Зачем n_init=10?

kMeans может застрять в плохом решении в зависимости от старта. 10 запусков и выбор лучшего это страховка.

Одна фразаПо силуэту выбрал 4 группы: экономные (больше половины), вино + мясо, любители золота и гурманы; UMAP разделяет их на картинке лучше всего, PCA хуже, потому что он линейный.