Введение в ML: Снижение размерности (PCA и t-SNE)
Цель: Научиться бороться с проклятием размерности. Мы сожмем изображения рукописных цифр из 64 измерений в 2 измерения для визуализации, определим оптимальное количество компонент для сохранения информации и сравним эффективность линейного (PCA) и нелинейного (t-SNE) подходов.
Инструменты:
sklearn.decomposition: PCA.sklearn.manifold: t-SNE.sklearn.preprocessing: StandardScaler.time: для замера скорости обучения моделей.
Данные: Digits Dataset (из sklearn). Картинки 8x8 пикселей.
- Исходная размерность: 64 признака (пикселя).
- Количество классов: 10 (цифры 0-9).
Часть 1: Подготовка и Стандартизация
Важность масштабирования
PCA работает, вращая оси координат. Если данные не отмасштабированы, ось с самым большим разбросом значений (например, центральный пиксель) перетянет всё внимание на себя.
Задание 1.1: Загрузка и Scaling
- Загрузите
load_digits. - Примените
StandardScalerк матрице признаковX.
Часть 2: PCA для визуализации (2D)
Мы не можем представить 64-мерное пространство. Но мы можем сжать его до 2D и нарисовать.
Задание 2.1:
- Инициализируйте
PCAсn_components=2. - Примените метод
fit_transformкX_scaled. - Постройте Scatter plot полученных данных, раскрасив точки по классам (
y).
Анализ результата
Хорошо ли разделились классы? Видите ли вы смешивание цифр (например, 3, 5 и 8)? PCA — линейный метод, он часто не может распутать сложные узлы.
Часть 3: Выбор оптимального числа компонент
Сколько измерений нужно оставить, чтобы сохранить 90% информации о цифре?
Задание 3.1: График кумулятивной дисперсии
- Обучите PCA на всех компонентах (по умолчанию
n_components=Noneилиmin(n_samples, n_features)). - Постройте график кумулятивной суммы (
np.cumsum) объясненной дисперсии. - Найдите количество компонент, необходимое для 90% дисперсии.
Часть 4: PCA как ускоритель ML
Инженеры используют PCA не только для картинок, но и для ускорения тяжелых моделей. Если у вас 10 000 признаков, модель будет учиться вечность. Если сжать их до 500, качество почти не упадет, а скорость вырастет в разы.
Задание 4.1: Сравнение скорости
- Обучите
LogisticRegressionна исходных данных (X_scaled). Замерьте время. - Обучите ту же модель на сжатых данных (количество компонент возьмите из задания 3.1, например 20-30). Замерьте время.
- Сравните Accuracy.
Вывод по производительности
На маленьком датасете Digits выигрыш во времени может быть небольшим, но на реальной Big Data разница колоссальная.
Часть 5: t-SNE (Визуализация многообразий)
PCA сжимает "блинчиком". t-SNE пытается распутать "клубок ниток". Это гораздо более мощный инструмент для визуализации кластеров.
Задание 5.1: t-SNE проекция
Долгие вычисления
Внимание: t-SNE работает долго. На этом датасете займет 10-30 секунд.
- Импортируйте
TSNE. - Примените его к
X_scaled. - Постройте Scatter plot.
Сравнение: Посмотрите, насколько лучше t-SNE разделил классы по сравнению с PCA из Части 2. Группы цифр должны быть отчетливо видны и отделены друг от друга.