Пользовательские функции-трансформеры в конвейерах
Вам сообщили, что датчики могут плохо работать для людей с ожирением. Ранее вы учитывали это с помощью весовых коэффициентов, но теперь решили, что эта информация может быть полезна и для конструирования признаков. Поэтому вы хотите заменить зафиксированный вес человека индикатором того, страдает ли он ожирением, и реализовать это с помощью конвейеров. В вашем распоряжении есть numpy под именем np, а также RandomForestClassifier(), FunctionTransformer() и GridSearchCV().
Это упражнение является частью курса
Проектирование рабочих процессов машинного обучения на Python
Инструкции к упражнению
- Определите пользовательскую функцию извлечения признаков. Эта функция должна возвращать изменённую копию входных данных.
- Замените каждое значение первого столбца индикатором того, превышает ли оно порог, равный произведению среднего значения столбца на заданный множитель.
- Преобразуйте функцию извлечения признаков в трансформер и включите его в конвейер вместе с классификатором на основе случайного леса.
- С помощью решётчатого поиска с кросс-валидацией проверьте значения 1, 2 и 3 для константы умножения
multiplierв вашей функции извлечения признаков.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# Define a feature extractor to flag very large values
def more_than_average(X, multiplier=1.0):
Z = ____
Z[:,1] = ____ > multiplier*np.mean(Z[:,1])
return Z
# Convert your function so that it can be used in a pipeline
pipe = Pipeline([
('ft', ____(____)),
('clf', RandomForestClassifier(random_state=2))])
# Optimize the parameter multiplier using GridSearchCV
params = ____
grid_search = GridSearchCV(pipe, param_grid=params)