PCA на Python: сжатие и восстановление данных

После сжатия данных важно понимать, что сохранили главные компоненты. Обучите PCA на train, восстановите новые точки и верните долю объяснённой дисперсии. Все входные массивы описаны в условии.

Программа курса «Классическое машинное обучение: алгоритмы и практика на Python».

Сжатие и инспекция ортогональной проекции PCA

Что уже дано

Проверяющая система выполняет код в среде Python 3.12 с библиотеками numpy и scikit-learn. Никаких предопределённых глобальных переменных, файлов или экземпляров моделей заранее не создаётся. Проверяющий код напрямую вызывает требуемую функцию с подготовленными массивами данных.

Что нужно сделать

Реализуйте функцию reduce_and_reconstruct_pca(X_train, X_query, n_components).

Функция принимает:

  • X_train: обучающая числовая матрица (двумерный массив np.ndarray или вложенный список) формы (N_train, p), где , ;
  • X_query: числовая матрица запроса (двумерный массив np.ndarray или вложенный список) формы (N_query, p) с тем же числом признаков ;
  • n_components: целое число .

Требования к поведению и контракту:

  1. Обучающая выборка должна обладать положительной суммарной выборочной дисперсией. Если сумма выборочных дисперсий признаков с поправкой Бесселя (ddof=1) по всем столбцам X_train строго равна , функция обязана возбудить исключение ValueError с непустым текстовым сообщением.
  2. Модель должна настраиваться исключительно по обучающим данным X_train без использования целевых переменных и без подмешивания данных запроса X_query.
  3. Для точек запроса X_query необходимо получить координаты в подпространстве главных компонент и восстановить их обратно в исходное признаковое пространство размерности .
  4. Функция возвращает словарь с тремя обязательными ключами:
  • "mean": одномерный np.ndarray формы (p,) типа float64 — вектор выборочных средних обучающей выборки;
  • "explained_variance_ratio": одномерный np.ndarray формы (n_components,) типа float64 — массив долей дисперсии, объяснённых каждой из компонент;
  • "reconstruction": двумерный np.ndarray формы (N_query, p) типа float64 — матрица ортогональной реконструкции точек запроса.

Ввод и вывод

stdin не используется. Печатать через print в stdout ничего не нужно. Проверяющая система вызывает функцию reduce_and_reconstruct_pca и проверяет возвращённый словарь, типы данных, формы массивов, обработку граничных параметров и инвариантность ортогональной реконструкции.

Пример использования

import numpy as np

X_train = np.array([
    [1.0, 1.0],
    [2.0, 3.0],
    [3.0, 2.0],
    [4.0, 4.0]
], dtype=np.float64)

X_query = np.array([
    [2.5, 2.5]
], dtype=np.float64)

result = reduce_and_reconstruct_pca(X_train, X_query, n_components=1)
print("mean:", np.round(result["mean"], 2).tolist())
print("explained_variance_ratio:", np.round(result["explained_variance_ratio"], 1).tolist())
print("reconstruction:", np.round(result["reconstruction"], 2).tolist())

Результат:

mean: [2.5, 2.5]
explained_variance_ratio: [0.9]
reconstruction: [[2.5, 2.5]]
РешениеPython

Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.

Отправьте решение, чтобы увидеть результаты тестов.

Связанные задачи