Добавить в корзинуПозвонить
Найти в Дзене
Властелин машин

Унификация формата вызова функций в Python

При автоматизации некоторого алгоритма зачастую сталкиваешься с трудностью передачи функций со схожим инструментарием, но разным набором аргументов. Например, вам хочется использовать единый интерфейс вызова метрики ошибки для модели регрессии с передачей в качестве параметров вектора целей и прогноза. В то же время для подсчета корня из среднеквадратичной ошибки потребуется в функцию mean_squared_error из модуля sklearn передать параметр squared=False, а для средней абсолютной ошибки дополнительных аргументов не требуется. Соответственно, чтобы некоторый функционал принимал абстрактный метод ошибки и единообразно обрабатывал оба кейса, потребуется предпринять дополнительные усилия. Отличным решением ситуации является частичное определение дополнительных аргументов функции. Например, это можно сделать с помощью функции partial из модуля functools. Ниже трансформируем mean_squared_error в функцию rmse для подсчета корня из среднеквадратической ошибки: Такое частичное определение можно с

При автоматизации некоторого алгоритма зачастую сталкиваешься с трудностью передачи функций со схожим инструментарием, но разным набором аргументов. Например, вам хочется использовать единый интерфейс вызова метрики ошибки для модели регрессии с передачей в качестве параметров вектора целей и прогноза. В то же время для подсчета корня из среднеквадратичной ошибки потребуется в функцию mean_squared_error из модуля sklearn передать параметр squared=False, а для средней абсолютной ошибки дополнительных аргументов не требуется.

Соответственно, чтобы некоторый функционал принимал абстрактный метод ошибки и единообразно обрабатывал оба кейса, потребуется предпринять дополнительные усилия. Отличным решением ситуации является частичное определение дополнительных аргументов функции. Например, это можно сделать с помощью функции partial из модуля functools. Ниже трансформируем mean_squared_error в функцию rmse для подсчета корня из среднеквадратической ошибки:

Такое частичное определение можно сделать и с помощью лямбда функций, например так:

-2

Аналогично без дополнительных аргументов можно вычислять среднюю абсолютную ошибку:

-3

А теперь после преобразований, вызов метрики ошибки для rmse и mae будет происходить одинаково. Пусть у нас имеется функция, выполняющая некую большую задачу и вычисляющая функцию ошибки регрессии, которую принимает в качестве аргумента. Схема ее определения может выглядеть так:

-4

А так можно вызвать функцию с разными аргументами:

-5

При передаче в f ссылки на mean_squared_error вызов не завершается ошибкой, но параметр squared будет установлен в True и подсчитана среднеквадратическая ошибка, а не ее корень:

-6

-7