Bootstrap и бэггинг на NumPy: выборки и прогноз
В bootstrap один объект может попасть в выборку несколько раз. Посчитайте кратности, найдите пропущенные объекты и усредните прогнозы ансамбля, не потеряв повторяющиеся индексы.
Программа курса «Классическое машинное обучение: алгоритмы и практика на Python».
Аудит кратности bootstrap-выборок и агрегация ансамбля
Что уже дано
Проверяющая система выполняет решение в среде Python 3.12 с доступной библиотекой numpy. Никаких предопределённых глобальных переменных, файлов или классов в окружении перед запуском решения не создаётся. Проверяющие тесты напрямую импортируют и вызывают функцию audit_bootstrap_ensemble.
Что нужно сделать
Реализуйте функцию audit_bootstrap_ensemble(row_ids, bootstrap_positions, member_predictions).
Функция принимает:
row_ids: одномерный массив или список уникальных строковых/числовых идентификаторов исходной обучающей выборки длины ;bootstrap_positions: целочисленный двумерный массив NumPy или список списков формы , где каждая строка задаёт позиции объектов, выбранных с возвращением (значения должны лежать в диапазоне от до включительно);member_predictions: числовой двумерный массив NumPy или список списков формы , где строка содержит точечные регрессионные прогнозы -го члена ансамбля на объектах запроса.
Требования к валидации входных данных:
- Если длина
row_idsне совпадает с числом столбцов матрицыbootstrap_positions, функция должна возбуждать исключениеValueError. - Если число строк
bootstrap_positionsне совпадает с числом строкmember_predictions(разное количество членов ансамбля ), функция должна возбуждать исключениеValueError. - Если любой индекс в
bootstrap_positionsвыходит за границы допустимого диапазона , функция должна возбуждать исключениеValueError.
Требования к возвращаемому результату:
Функция должна возвращать словарь dict со следующими ключами:
"counts_matrix": двумерный массив NumPynp.ndarrayцелочисленного типа (int64или аналогичный) формы . Элемент[m, i]равен кратности (количеству вхождений) исходного объекта с индексом (соответствующегоrow_ids[i]) в bootstrap-выборке -го члена ансамбля. Повторные индексы не должны отбрасываться до подсчёта."n_unique_per_member": одномерный массив NumPy целых чисел длины , где -й элемент равен числу строго уникальных исходных объектов, попавших в обучающую выборку -го оценщика (то есть количество объектов с кратностью )."missing_row_ids": список списков длины , где -й элемент — это список идентификаторов изrow_ids, которые вообще не вошли в выборку -го члена (их кратность равна ). Идентификаторы должны следовать строго в том же относительном порядке, в каком они перечислены в исходномrow_ids."ensemble_predictions": одномерный массив NumPy вещественного типаnp.float64длины , содержащий итоговый усреднённый прогноз ансамбля для каждого из объектов запроса (среднее арифметическое прогнозов всех оценщиков по первой оси).
Ввод и вывод
stdin не используется. Печатать через print в stdout ничего не нужно.
Проверяющая система напрямую вызывает функцию audit_bootstrap_ensemble(row_ids, bootstrap_positions, member_predictions) с различными наборами аргументов и проверяет возвращённые структуры данных, их размерности, типы и соответствие контракту.
Пример использования
import numpy as np
row_ids = ["id_0", "id_1", "id_2", "id_3"]
boot_pos = np.array([
[0, 2, 0, 3],
[1, 1, 1, 1]
])
member_preds = np.array([
[10.0, 20.0],
[12.0, 24.0]
])
res = audit_bootstrap_ensemble(row_ids, boot_pos, member_preds)
print("counts:", res["counts_matrix"].tolist())
print("unique:", res["n_unique_per_member"].tolist())
print("missing:", res["missing_row_ids"])
print("ensemble:", np.round(res["ensemble_predictions"], 1).tolist())
Результат:
counts: [[2, 0, 1, 1], [0, 4, 0, 0]]
unique: [3, 1]
missing: [['id_1'], ['id_0', 'id_2', 'id_3']]
ensemble: [11.0, 22.0]
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
