ColumnTransformer: числа и категории в одном Pipeline
Подготовьте смешанную таблицу для модели: заполните числовые пропуски, масштабируйте признаки и закодируйте категории. Проверьте новые категории и другой порядок столбцов на отложенных данных.
Программа курса «Классическое машинное обучение: алгоритмы и практика на Python».
Сборка ColumnTransformer для смешанных признаков
Что уже дано
Проверяющая система выполняет решение в среде Python 3.12 с предустановленными библиотеками numpy, pandas и scikit-learn. Никаких глобальных переменных или файлов в окружении заранее не создаётся. Проверяющие тесты напрямую вызывают функцию transform_mixed_features с аргументами.
Что нужно сделать
Реализуйте функцию transform_mixed_features(train_df, query_df, num_cols, cat_cols).
Функция принимает:
train_df:pd.DataFrame— обучающая выборка со смешанными признаками;query_df:pd.DataFrame— отложенная выборка (порядок столбцов в ней может отличаться отtrain_df, в числовых столбцах могут присутствовать пропуски, а в категориальных — ранее не встречавшиеся значения);num_cols: список строковых названий числовых столбцов (могут содержатьNaN);cat_cols: список строковых названий категориальных столбцов (строковые значения без пропусков).
Требования к обработке:
- Предобработка числовых колонок должна заполнять пропущенные значения медианой из
train_dfи приводить признаки к нулевому среднему и единичной дисперсии. - Предобработка категориальных колонок должна формировать one-hot представление с игнорированием неизвестных на обучении значений (новые категории заполняются нулями) в виде плотного массива.
- Объедините ветки через составной трансформер: ветка для числовых признаков
num_colsполучает имя"num", ветка для категориальныхcat_cols— имя"cat". Все остальные столбцы (идентификаторы, целевые переменные) должны исключаться (remainder="drop"). - Обучение всех параметров и вычисление статистик должно производиться строго на
train_df. Применение трансформера кquery_dfдолжно опираться исключительно на зафиксированные на обучении статистики и категории. - Функция должна возвращать словарь со следующими ключами:
"query_transformed": двумерный массивnp.ndarrayтипаfloat64— результат преобразованияquery_df;"feature_names": одномерный массив строкnp.ndarrayс названиями итоговых признаков;"categories": список массивов категорий, зафиксированных энкодером при обучении.
Ввод и вывод
stdin не используется. Печатать через print в stdout ничего не нужно.
Аргументы передаются проверяющей системой при вызове функции transform_mixed_features:
train_df:pd.DataFrame;query_df:pd.DataFrame;num_cols:list[str];cat_cols:list[str].
Функция возвращает dict с тремя ключами: "query_transformed" (np.ndarray), "feature_names" (np.ndarray) и "categories" (list[np.ndarray]).
Пример использования
import pandas as pd
train = pd.DataFrame({
"distance_km": [10.0, float("nan"), 30.0],
"stops_count": [1.0, 2.0, 3.0],
"zone": ["north", "south", "north"],
"service": ["standard", "express", "standard"]
})
query = pd.DataFrame({
"service": ["standard", "express"],
"zone": ["island", "south"],
"stops_count": [float("nan"), 1.0],
"distance_km": [float("nan"), 10.0]
})
res = transform_mixed_features(
train,
query,
["distance_km", "stops_count"],
["zone", "service"]
)
print(res["feature_names"].tolist())
print(res["query_transformed"].shape)
Результат:
['num__distance_km', 'num__stops_count', 'cat__zone_north', 'cat__zone_south', 'cat__service_express', 'cat__service_standard']
(2, 6)
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
