#r #glmnet
#r #glmnet
Вопрос:
(ПРИМЕЧАНИЕ: Это слегка измененная версия сообщения, которое я сделал на другом форуме. Я не получил там ответов, отсюда и сообщение здесь. Если это не разрешено, пожалуйста, дайте мне знать, я удалю вопрос).
Я новичок в glmnet, поэтому я еще не до конца понимаю, что делают различные параметры. Я пытаюсь создать мультиномиальный классификатор, который ограничивает количество функций, используемых в модели. Прочитав документы и некоторые ответы на этом форуме, я понимаю, dfmax
что это способ сделать. Я немного поиграл с этим; у меня есть пара вопросов, и я был бы признателен за некоторую помощь:
Настройка
Для конкретного набора данных я хочу ограничить количество объектов 3; исходные данные содержат 126 объектов. Вот что я запускаю:
fit<-glmnet(data.matrix(X), data.matrix(y), family='multinomial', dfmax=3)
d<-data.frame(tidy(fit))
Это значение d
:
Мои вопросы о результатах:
- Я вижу там несколько значений
lambda
; похоже, glmnet пытается подогнатьlambda
s, в которых число терминов близко кdfmax=3
. Таким образом, это меньше похоже на алгоритм LARs (где мы движемся поэтапно, добавляя переменные и можем остановиться на точном количестве переменных) и больше касается получения правильныхlambda
s для регуляризации, которые приводят к намеченномуdfmax
. Правильно ли это? - Я предполагаю, что
alpha
играет роль в том, насколько близко мы можем подобраться кdfmax
. Вalpha=1
, где мы делаем lasso, и поэтому к нему легче подобратьсяdfmax
, по сравнению с тем, когдаalpha=0
мы делаем ridge. Правильно ли это понимание? - Казалось бы, «соседство» с
dfmax
— это лучшее, что мы можем сделать. Или мне не хватает параметра, который возвращает меня к модели с точнымdfmax
(К вашему сведению:alpha=1
похоже, что он также не приводит меня к точному количеству ненулевых терминов, по крайней мере, в этом наборе данных). - В первом решении —
step=1
переменные не используются. Означает ли это, что относительные шансы равны константе? - Что
pmax
делает?
Заранее спасибо!
Комментарии:
1. Я тоже только начинаю с
glmnet
, но по поводу вашего последнего вопроса я нашел это . Кроме того, вы прочитали некоторые документы, но эта ссылка , если вы ее пропустили, может быть полезной (речь идет о версии R, но это не составит для вас большой проблемы, если вы используете версию Python).2. Кроме того, прокрутите это примерно наполовину вниз и найдите
elnet
вызов.3. Кроме того, прокрутите это примерно наполовину вниз и найдите
elnet
вызов.ne
Соответствуетdfmax
иnx
естьpmax
. Очевидно, что «модель» означает конкретный выборlambda
иparam
являетсяalpha
. Иn_features
— количество независимых переменных. И «наибольшая модель (критерий остановки)», очевидно, относится к минимальной среднеквадратичной ошибкеlambda
(или около того) — количество ненулевых бета-версий увеличивается по мереlambda
уменьшения.4. @Mikeo’Connor Я вижу это спустя века, но спасибо тебе! Очень полезные комментарии! Короче говоря: если я хочу зафиксировать количество ненулевых терминов для классификации, мне нужно использовать только
pmax
(вglmnet
пакете). Я обнаружил, что иногда алгоритм останавливается, прежде чем достигнет предписанногоpmax
значения — из-за размера шага по умолчаниюlambda
(предполагается, что алгоритм останавливается до того, как он превысит предоставленныйpmax
). В этих случаях уменьшение размера шага часто помогает достичь точногоpmax
значения: используя большее число дляnlambda
(по умолчанию —100
).5. Действительно, прошло некоторое время. Я все еще очень активно использую
glmnet
, но я отказался от попыток полагаться наpmax
. Я просто просматриваю все результаты для всех гиперпараметров и выполняю «проверку» только с комбинациями, которые дают ряд функций, которые находятся в пределах моего целевого диапазона.