Извините, если этот вопрос встречается немного базовым.
Я хочу использовать выбор переменных LASSO для модели множественной линейной регрессии в R. У меня есть 15 предикторов, один из которых является категориальным (вызовет ли это проблему?). После установки моих и я использую следующие команды:
model = lars(x, y)
coef(model)
Моя проблема, когда я использую coef(model)
. Это возвращает матрицу с 15 строками, каждый раз добавляется один дополнительный предиктор. Однако нет никаких предложений относительно того, какую модель выбрать. Я что-то пропустил? Есть ли способ получить пакет lars для возврата только одной « лучшей » модели?
Есть другие посты, предлагающие использовать glmnet
вместо этого, но это кажется более сложным. Попытка заключается в следующем, используя те же и . Я что-то здесь пропустил?
cv = cv.glmnet(x, y)
model = glmnet(x, y, type.gaussian="covariance", lambda=cv$lambda.min)
predict(model, type="coefficients")
Последняя команда возвращает список моих переменных, большинство с коэффициентом, хотя некоторые из них = 0. Это правильный выбор « лучшей » модели, выбранной LASSO? Если я затем подгоняю линейную модель ко всем моим переменным с коэффициентами, not=0
я получаю очень похожие, но немного отличающиеся оценки коэффициентов. Есть ли причина для такой разницы? Было бы приемлемо перефразировать линейную модель с этими переменными, выбранными LASSO, и принять это как мою окончательную модель? В противном случае я не вижу никаких значений p для значимости. Я что-то пропустил?
Имеет ли
type.gaussian="covariance"
убедиться, что glmnet
используется множественная линейная регрессия?
Влияет ли автоматическая нормализация переменных на коэффициенты вообще? Есть ли способ включить условия взаимодействия в процедуру LASSO?
Я собираюсь использовать эту процедуру в большей степени как демонстрацию того, как LASSO может использоваться, чем для любой модели, которая будет фактически использоваться для любого важного вывода / прогноза, если это что-то изменит.
Спасибо, что нашли время, чтобы прочитать это. Любые общие комментарии по LASSO / lars / glmnet также будут высоко оценены.
источник
Ответы:
Пользоваться им
glmnet
действительно легко, как только вы его освоите, благодаря превосходной виньетке на http://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html (вы также можете проверить страницу пакета CRAN). Что касается лучшей лямбдыglmnet
, эмпирическое правило заключается в использованиивместо
lambda.min
.Чтобы сделать то же самое,
lars
вы должны сделать это вручную. Вот мое решениеИмейте в виду, что это не совсем то же самое, потому что это останавливается на узле лассо (когда входит переменная), а не в любой точке.
Обратите внимание, что
glmnet
сейчас это предпочтительный пакет, он активно поддерживается, более тогоlars
, и что ранее были вопросы поglmnet
сравнению сlars
ответами (используемые алгоритмы отличаются).Что касается вашего вопроса об использовании лассо для выбора переменных, а затем для подбора OLS, это постоянные дебаты. Google для OLS опубликовать сообщение Лассо, и есть несколько статей, обсуждающих эту тему. Даже авторы «Элемента статистического обучения» признают, что это возможно.
Изменить : вот код для более точного воспроизведения, что
glmnet
делает вlars
источник
Я возвращаюсь к этому вопросу некоторое время назад, так как думаю, что решил правильное решение.
Вот реплика, использующая набор данных mtcars:
«Переменные» дает вам список переменных, которые решают лучшее решение.
источник
nfolds=5
иalpha=0.5
параметры?Возможно, поможет сравнение с поэтапной регрессией прямого выбора (см. Следующую ссылку на сайт одного из авторов http://www-stat.stanford.edu/~tibs/lasso/simple.html). Этот подход используется в главе 3.4.4 «Элементы статистического обучения» (доступен онлайн бесплатно). Я думал, что глава 3.6 в этой книге помогла понять связь между наименьшими квадратами, лучшим подмножеством и лассо (плюс несколько других процедур). Я также считаю полезным взять транспонирование коэффициента t (coef (модель)) и write.csv, чтобы я мог открыть его в Excel вместе с копией графика (модели) на стороне. Возможно, вы захотите отсортировать по последнему столбцу, который содержит оценку наименьших квадратов. Затем вы можете ясно видеть, как каждая переменная добавляется на каждом кусочном шаге и как коэффициенты изменяются в результате. Конечно, это не вся история, но, надеюсь, это будет начало.
источник
lars
иglmnet
оперировать необработанными матрицами. Чтобы включить условия взаимодействия, вы должны будете сами построить матрицы. Это означает, что один столбец на взаимодействие (то есть на уровень на фактор, если у вас есть факторы). Посмотрите,lm()
чтобы увидеть, как он это делает (предупреждение: там будут драконы).Чтобы сделать это прямо сейчас, сделайте что-то вроде: Чтобы создать термин взаимодействия вручную, вы можете (но, возможно, не должны , потому что он медленный) сделать:
Затем, чтобы использовать это в lars (при условии, что вы
y
разбираетесь):Я хотел бы помочь вам больше с другими вопросами. Я нашел это, потому что Ларс приносит мне горе, и документация в нем и в Интернете очень тонкая.
источник
model.matrix()
.LARS решает ВСЁ путь решения. Путь решения является кусочно-линейным - существует конечное число «надрезов» точек (т. Е. Значений параметра регуляризации), в которых изменяется решение.
Таким образом, матрица решений, которые вы получаете, - это все возможные решения. В списке, который он возвращает, он также должен дать вам значения параметра регуляризации.
источник