LARS против координатного спуска для лассо

13

Каковы плюсы и минусы использования LARS [1] по сравнению с использованием координатного спуска для подбора L1-регуляризованной линейной регрессии?

Я в основном заинтересован в аспектах производительности (мои проблемы, как правило, Nисчисляются сотнями тысяч и p<20). Однако, любые другие идеи также будут оценены.

редактировать: так как я разместил вопрос, chl любезно указал на статью [2] Фридмана и др., где показано, что спуск координат значительно быстрее, чем другими методами. Если это так, должен ли я как практикующий просто забыть о LARS в пользу спуска по координатам?

[1] Эфрон, Брэдли; Асти, Тревор; Джонстон, Иэн и Тибширани, Роберт (2004). «Наименьший угол регрессии». Летопись статистики 32 (2): с. 407–499.
[2] Джером Фридман, Тревор Хасти, Роб Тибширани, «Пути регуляризации для обобщенных линейных моделей с помощью координатного спуска», Journal of Statistical Software, Vol. 33, выпуск 1, февраль 2010 г.
NPE
источник

Ответы:

13

В scikit-learn реализация Lasso с координатным спуском имеет тенденцию быть быстрее, чем наша реализация LARS, хотя для малых p (таких как в вашем случае) они примерно эквивалентны (LARS может даже быть немного быстрее с последними оптимизациями, доступными в мастер репо). Кроме того, спуск по координатам позволяет эффективно решать упорядоченные сетчатые задачи. Это не относится к LARS (который решает только проблемы Лассо, или L1).

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

Для большого N (и большого p, разреженного или нет) вы также можете попробовать стохастический градиентный спуск (с L1 или штрафом эластичной сетки) (также реализованный в scikit-learn).

Редактировать : вот несколько тестов, сравнивающих LassoLARS и реализацию спуска координат в scikit-learn

ogrisel
источник
(+1) @ogrisel Большое спасибо! Поскольку мне, вероятно, придется в конечном итоге самому кодировать это (нужно в Java, и я еще не видел никаких реализаций Java с открытым исходным кодом), какой алгоритм, по вашему мнению, проще реализовать?
NPE
1
и спуск по координатам, и SGD просты в реализации (см. веб-страницу Леона Ботту для хорошего введения в SGD). LARS, наверное, сложнее получить права.
Огрисель
Отлично, спасибо! Я проверю сайт Леона Ботту.
NPE
@ogrisel (+1) Рад тебя видеть там.
chl
2
@aix Я отредактировал свой ответ, чтобы добавить некоторые тесты текущих реализаций в scikit-learn. Также ознакомьтесь с java-версией liblinear, прежде чем реализовывать свой собственный спуск по координатам, так как это может быть достаточно для вас (хотя вы не можете одновременно использовать регистры L1 и L2).
Огрисел