Новый модуль Python, который всегда будет под рукой

Существует несколько модулей Python для регрессии, и каждый из них имеет свою специфику и ограничения. Использование существующих модулей Python сильно зависит от типа регрессии, которую хочет выполнить пользователь, и от ее целей. Если регрессия проста, а переменные непрерывны, во многих случаях в библиотеке NumPy есть специальные методы для решения этой проблемы. С другой стороны, если кто-то заинтересован в более сложных задачах регрессии как с количественными, так и с качественными переменными, то модуль Scikit-learn предлагает пользователю множество вариантов в зависимости от конкретных обстоятельств и проблем.

Недавно для общественности стал доступен новый модуль Python, цель которого состоит в том, чтобы улучшить некоторые ограничения текущих модулей Python в отношении штрафной регрессии и улучшить операционную производительность. Название модуля asgl (адаптивное разреженное групповое лассо). В этой статье я расскажу, что представляет собой этот модуль, что он должен делать и стоит ли вам использовать его в своих задачах регрессии.

Текущее положение дел

Многие программы дают пользователю возможность выполнять регрессию в различных масштабах в зависимости от конкретных проблем. Можно выполнить регрессию в Python, Mathematica, R и Matlab, и это лишь некоторые из них.

Регрессию можно разделить на несколько категорий, и одной из наиболее важных является категория штрафной регрессии. Этот тип регрессии обычно очень важен для данных высокой размерности, когда количество предикторов (p) намного превышает количество наблюдаемых данных (n).

Процесс наложения штрафа состоит в добавлении регуляризатора к функции стоимости наименьших квадратов C(x; D). LASSO — это один из наиболее важных методов регуляризации, который добавляет L_1 штраф за регуляризацию к функции стоимости наименьших квадратов. Цель LASSO состоит в том, чтобы обеспечить разреженную оценку коэффициентов линейной модели. Другие важные разновидности LASSO включают группу LASSO и разреженную группу LASSO.

Разреженная группа LASSO является обобщением LASSO и группы LASSO, и ее целью является получение регрессионных решений, которые находятся между разреженной группой и внутри нее.

Общая проблема всех упомянутых выше методов на основе LASSO заключается в том, что все они используют постоянные коэффициенты штрафа 𝛌, что может серьезно повлиять на качество выбора переменных и точность. Для решения этой проблемы некоторые исследователи предложили метод так называемого адаптивного группового лассо (asgl) для вычисления функции стоимости C(x; D). Читатель может найти математическое описание этого метода в этой статье. Цель этого метода — обеспечить очень хорошие оценки ошибок как в наборах данных высокой, так и низкой размерности.

Как я упоминал выше, в Python можно выполнять различные уровни (LASSO и т. д.) регрессии с помощью Scikit-learn, а также Statsmodel. Однако, поскольку оценщик ошибок asgl является относительно новой концепцией, этот оценщик не включен в упомянутые выше модули Python. Модуль asgl Python расширяет стандартный LASSO и групповой LASSO до адаптивного случая как для линейной, так и для квантильной регрессии, которые я описываю ниже.

asgl для линейной и квантильной регрессии

Я предполагаю, что читатель знает, что такое линейная регрессия и как это делается формально. Однако читатель может быть менее знаком с квантильной регрессией. Этот тип регрессии был сформулирован в 1978 году Кенкером и Бассетом и адаптирован для тех ситуаций, когда присутствуют гетероскедастичность и выбросы. Цель этого метода состоит в том, чтобы обеспечить оценку условного квантиля независимой переменной как функции ковариат.

Оценщик ошибок asgl обеспечивает основу, когда можно использовать адаптивный метод только в случае линейной и квантильной регрессии. Как я упоминал выше, адаптивный метод отсутствует в Statsmodel и Scikit-learn в случае линейной и квантильной регрессии. Например, модуль Scikit-learn Python вообще не дает пользователю возможности выполнить квантильную регрессию, не говоря уже об адаптивном случае.

В методе asgl решение для вектора параметров 𝜷, найденное с помощью штрафного адаптивного метода, задается:

где R(𝜷) — функция риска только для линейной и квантильной регрессии. Эта функция в случае линейной регрессии определяется как:

С другой стороны, в случае квантильной регрессии это определяется как:

где функция 𝜌_𝜏 является так называемой функцией контроля потерь. В приведенном выше уравнении вектора параметров 𝛌 – это коэффициент штрафа, управляющий весом штрафа, K – количество групп, 𝜷^l – векторы компонентов 𝜷 из l-я группа, в группе LASSO, p_l — размер каждой l-й группы, 𝛼 — параметр, управляющий балансом между ЛАССО и группой ЛАССО. Векторы тильды v и w — это векторы весов, определенные в модели asgl. Подробнее можно узнать в оригинальной исследовательской статье.

Ключевая концепция метода asgl, включенная в v и w,, состоит в том, что важные переменные должны иметь небольшой вес и, таким образом, подвергаться незначительному штрафу, в то время как менее важные переменные должны иметь большой вес и подвергаться сильному штрафу. Этот метод предоставит пользователю большую гибкость за счет повышения точности и выбора переменных.

Как реализовать asgl в Python?

Использовать модуль/пакет asgl довольно просто, как и другие пакеты Python. Установку можно выполнить с помощью следующей команды:

pip install asgl

Модуль aslg основан на других модулях Python, таких как NumPy (версия 1.15 или новее), Scikit-learn (версия 0.23.1 или новее), cvxpy (версия 1.1.0 или новее). Модуль также требует Python версии 3.5 или выше.

Другой вариант — использовать GitHub и вытащить следующий репозиторий:

git clone https://github.com/alvaromc317/asgl.git

Затем, после получения репозитория, вы должны запустить следующий код, чтобы выполнить файл setup.py:

cd asgl
Python setup.py

Что можно сделать с asgl?

Модуль asgl использует четыре основных объекта класса: класс ASGL, класс WEIGHT, класс CV и класс TVT. С этими классами можно использовать адаптивный метод, описанный выше, для реальных задач линейной и квантильной регрессии.

Класс ASGL является наиболее важным, и его можно использовать для выполнения LASSO, группового LASSO, разреженного LASSO и адаптивного разреженного LASSO. Параметры класса ASGL по умолчанию (подробнее см. в этой статье arXiv авторов модуля asgl):

model = asgl.ASGL(model, penalization, intercept=True, tol=1e-5,lambda1=1, alpha=0.5, tau=0.5, lasso_weights=None,gl_weights=None, parallel=False, num_cores=None, solver=None,max_iters=500)

Класс ASGL имеет три основных метода: fit, predict и retrive_parameters_values. Метод вызова функции fit:

fit(x, y, group_index)

где x — двумерный массив векторов предикторов NumPy, y — одномерный вектор независимых переменных, а group_index — одномерный массив NumPy с длиной, равной количеству переменных, присутствующих в проблема.

Метод вызова функции predict:

predict(x_new)

где x_new — это двумерный массив NumPy с количеством столбцов, равным количеству столбцов в исходной матрице X. Чтобы делать прогнозы, пользователь должен выполнить следующую команду:

predictions = model.predict(x_new)

Таким образом, можно видеть, что способ использования модулей довольно стандартный, как и другие модули Python, такие как Statsmodel или Scikit-learn.

Другим важным методом является retrive_parameter_values, область действия которого заключается в предоставлении параметров модели, найденных путем решения регрессии наименьших квадратов с помощью метода asgl. Для запуска нужно вызвать метод:

retrieve_parameters_value(param_index)

где param_index — целое число, не превышающее длину списка model.coef_. Чтобы отобразить решения для параметров, нужно запустить:

N 
model.retrieve_parameters_value(param_index = N)

где N — целое число.

Как я уже говорил выше, в пакете asgl есть еще три основных класса, каждый из которых имеет свою важность и может использоваться в зависимости от потребностей пользователя. Я не обсуждаю здесь другие классы, и читатель может обратиться за дополнительной информацией к репозиторию пакетов asgl.

Заключение

Выше я кратко рассказал о новом пакете asgl для Python, его основном назначении и характеристиках. Этот пакет дает пользователю возможность использовать адаптивные методы для линейной и квантильной регрессии.

Стоит ли использовать модуль asgl? Короткий ответ на этот вопрос: да, вы должны попробовать. Тем не менее, я рекомендую вам сначала понять теорию, лежащую в основе метода asgl, и посмотреть, сможете ли вы применить его к своим задачам в области науки о данных и машинного обучения. Как заявляют авторы, этот новый модуль дает пользователю возможность впервые выполнить квантильную регрессию в Python, а также использовать адаптивные методы, предоставляемые пакетом asgl, для улучшения выбора и прогнозирования переменных.

Если вам понравилась моя статья, поделитесь ею со своими друзьями, которым может быть интересна эта тема, и цитируйте/ссылайтесь на мою статью в своих исследованиях. Не забудьте подписаться на другие связанные темы, которые будут опубликованы в будущем.