Ответ 1
Ну, похоже, что нет встроенного интерфейса формул, поэтому я пошел вперед и сделал свой собственный. Вы можете скачать его из Github: https://github.com/Hong-Revo/glmnetUtils
Или в R, используя devtools::install_github
:
install.packages("devtools")
library(devtools)
install_github("hong-revo/glmnetUtils")
library(glmnetUtils)
Из файла readme:
Некоторые функции качества жизни для оптимизации процесса подгонки эластичные сетевые модели с
glmnet
, в частности:
glmnet.formula
предоставляет интерфейс структуры данных/данных дляglmnet
.cv.glmnet.formula
делает аналогичную вещь дляcv.glmnet
.- Методы для
predict
иcoef
для обоих вышеперечисленных.- Функция
cvAlpha.glmnet
для выбора параметров альфа и лямбда посредством кросс-валидации, следуя подходу, описанному в страницу справки дляcv.glmnet
. Опционально перекрестная проверка в параллельны друг другу.- Методы для
plot
,predict
иcoef
для вышеуказанного.
Кстати, при написании вышеизложенного, я думаю, я понял, почему никто не делал этого раньше. Центральная обработка R кадров модели и модельных матриц - это объект terms
, который включает в себя матрицу с одной строкой на переменную и один столбец на главный эффект и взаимодействие. По сути, это (как минимум) примерно p x p матрица, где p - количество переменных в модели. Когда p - 16000, что является общим в наши дни с широкими данными, результирующая матрица имеет размер около гигабайта.
Тем не менее, у меня не было никаких проблем (пока), работающих с этими объектами. Если это станет серьезной проблемой, я увижу, могу ли я найти обходной путь.
Обновление Oct-2016
Я поставил обновление для репо, чтобы решить вышеупомянутую проблему, а также связанную с факторами. Из документации:
Существует два способа, с помощью которых glmnetUtils может генерировать модельную матрицу из формулы и кадра данных. Первый заключается в использовании стандартной машины R, содержащей
model.frame
иmodel.matrix
; а вторая - построить матрицу по одной переменной за раз. Эти варианты обсуждаются и сравниваются ниже.Использование model.frame
Это более простой вариант и тот, который наиболее совместим с другими функциями моделирования R. Функция
model.frame
принимает формулу и фрейм данных и возвращает модельный кадр: кадр данных со специальной информацией, которая позволяет R понимать термины в формуле. Например, если формула включает в себя термин взаимодействия, модельный кадр будет определять, какие столбцы в данных относятся к взаимодействию, и как их следует обрабатывать. Аналогично, если формула включает выражения типаexp(x)
илиI(x^2)
в RHS,model.frame
будет оценивать эти выражения и включать их в вывод.Основным недостатком использования
model.frame
является то, что он генерирует объект терминов, который кодирует, как организованы переменные и взаимодействия. Одним из атрибутов этого объекта является матрица с одной строкой на переменную и один столбец на главный эффект и взаимодействие. Как минимум, это (приблизительно) квадратная матрица p x p, где p - количество основных эффектов в модели. Для широких наборов данных с p > 10000 эта матрица может достигать или превышать размер гигабайта. Даже если для хранения такого объекта достаточно памяти, генерация матрицы модели может занять значительное количество времени.Другой проблемой стандартного подхода R является обработка факторов. Обычно
model.matrix
превратит фактор N-уровня в матрицу индикаторов с столбцами N-1, при этом один столбец будет отброшен. Это необходимо для нерегулируемых моделей в соответствии с lm и glm, так как полный набор из N столбцов является линейно зависимым. При обычных контрастах обработки интерпретация заключается в том, что столбец с отбрасыванием представляет собой базовый уровень, тогда как коэффициенты для других столбцов представляют собой разницу в ответе относительно базовой линии.Это может быть неприемлемо для регуляризованной модели в соответствии с glmnet. Процедура регуляризации сжимает коэффициенты до нуля, что приводит к уменьшению расчетных различий от базовой линии. Но это имеет смысл только в том случае, если базовый уровень был выбран заранее или в противном случае имеет смысл по умолчанию; в противном случае это эффективно делает уровни более похожими на произвольно выбранный уровень.
Вручную построение матрицы модели
Чтобы справиться с вышеперечисленными проблемами, glmnetUtils по умолчанию будет избегать использования
model.frame
, вместо этого построив модельную матрицу в терминах. Это позволяет избежать затрат памяти на создание объектаterms
и может быть заметно быстрее, чем стандартный подход. Он также будет включать один столбец в матрице моделей для всех уровней в коэффициенте; то есть базовый уровень не предполагается. В этой ситуации коэффициенты представляют собой различия от общего среднего отклика, а их сокращение до нуля имеет смысл (обычно).Основной недостаток использования
model.frame
заключается в том, что формула может быть только относительно простой. В настоящий момент только простые формулы, такие какy ~ x1 + x2 + ... + x_p
, обрабатываются кодом, где x - это столбцы, уже присутствующие в данных. Термины взаимодействия и вычисленные выражения не поддерживаются. По возможности, вы должны заранее вычислить такие выражения.
Обновление Apr-2017
После нескольких икота это, наконец, в CRAN.