SimpleImputer: медиана и индикаторы пропусков

Заполните пропуски в новых данных медианами обучающей выборки и добавьте индикаторы. Отдельно проверьте случай, когда пропуск впервые появляется только в query.

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

Импутация пропусков с индикатором через SimpleImputer

Что уже дано

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

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

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

Требования к обработке:

  1. Обучение статистик и определение списка индикаторов должно производиться строго по выборке train. В каждом столбце train гарантированно есть хотя бы одно числовое наблюдение.
  2. При обработке query используются константы, обученные на train. Пространство признаков после трансформации фиксируется обучающей выборкой: если пропуск в query встретился в столбце, где на train пропусков не было, значение заполняется медианой этого столбца, но новый столбец-индикатор не порождается.
  3. В поток вывода необходимо напечатать обученные медианы признаков, индексы столбцов с индикаторами и преобразованную матрицу query.

Ввод и вывод

Программа считывает данные из stdin и пишет результат в stdout.

Формат ввода

  • В первой строке заданы три целых числа через пробел: , , — количество строк выборки train, количество строк выборки query и число числовых признаков ().
  • В следующих строках заданы строки обучающей матрицы. Элементы разделены пробелом. Числовое значение задаётся вещественным числом, пропуск обозначается строкой nan или NaN.
  • В следующих строках заданы строки проверочной матрицы query в том же формате.

Формат вывода

  • Первая строка: statistics: и через пробел медианы всех признаков обучающей выборки, округлённые до 4 знаков после запятой.
  • Вторая строка: indicator_features: и через пробел целочисленные индексы колонок (от до ), в которых на train присутствовали пропуски. Если пропусков на train не было, выведите indicator_features: none.
  • Последующие строк: строки преобразованной матрицы query, элементы разделены пробелом и округлены до 4 знаков после запятой.

Пример

Ввод
4 3 3
1.0 2.0 5.0
nan 4.0 1.0
3.0 nan 9.0
5.0 6.0 7.0
2.0 3.0 nan
nan nan 2.0
4.0 8.0 3.0
Вывод
statistics: 3.0000 4.0000 6.0000
indicator_features: 0 1
2.0000 3.0000 6.0000 0.0000 0.0000
3.0000 4.0000 2.0000 1.0000 1.0000
4.0000 8.0000 3.0000 0.0000 0.0000
РешениеPython

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

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

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