λжурнал( λ )Σя| βя|
С этой целью я создал некоторые коррелированные и некоррелированные данные для демонстрации:
x_uncorr <- matrix(runif(30000), nrow=10000)
y_uncorr <- 1 + 2*x_uncorr[,1] - x_uncorr[,2] + .5*x_uncorr[,3]
sigma <- matrix(c( 1, -.5, 0,
-.5, 1, -.5,
0, -.5, 1), nrow=3, byrow=TRUE
)
x_corr <- x_uncorr %*% sqrtm(sigma)
y_corr <- y_uncorr <- 1 + 2*x_corr[,1] - x_corr[,2] + .5*x_corr[,3]
Данные x_uncorr
имеют некоррелированные столбцы
> round(cor(x_uncorr), 2)
[,1] [,2] [,3]
[1,] 1.00 0.01 0.00
[2,] 0.01 1.00 -0.01
[3,] 0.00 -0.01 1.00
в то время как x_corr
имеет предварительно установленную корреляцию между столбцами
> round(cor(x_corr), 2)
[,1] [,2] [,3]
[1,] 1.00 -0.49 0.00
[2,] -0.49 1.00 -0.51
[3,] 0.00 -0.51 1.00
Теперь давайте посмотрим на графики лассо для обоих этих случаев. Сначала некоррелированные данные
gnet_uncorr <- glmnet(x_uncorr, y_uncorr)
plot(gnet_uncorr)
Пара особенностей выделяются
- Предикторы входят в модель в порядке их величины истинного коэффициента линейной регрессии.
- Σя| βя|Σя| βя|
- Когда новый предиктор входит в модель, он детерминистически влияет на наклон пути коэффициента всех предикторов, уже находящихся в модели. Например, когда второй предиктор входит в модель, наклон пути первого коэффициента уменьшается вдвое. Когда третий предиктор входит в модель, наклон пути коэффициента составляет одну треть от его первоначального значения.
Все это общие факты, которые относятся к регрессии лассо с некоррелированными данными, и все они могут быть либо доказаны вручную (хорошее упражнение!), Либо найдены в литературе.
Теперь давайте сделаем коррелированные данные
gnet_corr <- glmnet(x_corr, y_corr)
plot(gnet_corr)
Вы можете прочитать некоторые вещи из этого сюжета, сравнив его с некоррелированным случаем
- Первый и второй пути предикторов имеют ту же структуру, что и некоррелированный случай, пока третий предиктор не войдет в модель, даже если они коррелированы. Это особенность случая с двумя предикторами, который я могу объяснить в другом ответе, если есть интерес, он уведет меня немного далеко от текущего обсуждения.
- ∑ | βя|
Итак, теперь давайте посмотрим на ваш сюжет из набора данных автомобилей и прочитаем некоторые интересные вещи (я воспроизвел ваш сюжет здесь, чтобы это обсуждение было легче читать):
Предупреждение : я написал следующий анализ, основанный на предположении, что кривые показывают стандартизированные коэффициенты, в этом примере они не показывают . Нестандартизированные коэффициенты не являются безразмерными и несопоставимыми, поэтому из них нельзя сделать никаких выводов с точки зрения прогнозирующей важности. Чтобы следующий анализ был действительным, сделайте вид, что график имеет стандартизированные коэффициенты, и, пожалуйста, проведите собственный анализ по стандартным путям коэффициентов.
- Как вы говорите,
wt
предиктор кажется очень важным. Сначала он входит в модель и имеет медленный и устойчивый спуск к окончательному значению. У него есть несколько корреляций, которые делают его слегка ухабистым, am
в частности, кажется, что он имеет радикальный эффект, когда вступает.
am
тоже важно. Это приходит позже и соотносится с тем wt
, как оно сильно влияет на уклон wt
. Это также связанно с carb
и qsec
, так как мы не видим предсказуемое размягчения склона , когда те войти. После того, как эти четыре переменных вошел , хотя мы действительно видим хороший некоррелированный шаблон, так что , кажется, коррелированны со всеми предсказателями в конце.
- Что входит около 2,25 по оси х, а сам его путь незаметный, вы можете обнаружить это только его влияние на
cyl
и wt
параметры.
cyl
довольно навязчиво. Входит вторым, поэтому важно для маленьких моделей. После других переменных, и особенно am
входа, это уже не так важно, и его тренд меняется на противоположный, в конце концов практически исчезая. Кажется, что эффект cyl
может быть полностью уловлен переменными, которые вводятся в конце процесса. Является ли более подходящим использование cyl
или дополнительная группа переменных, действительно зависит от компромисса смещения. Наличие группы в вашей окончательной модели значительно увеличит ее дисперсию, но это может быть тот случай, когда более низкий уклон компенсирует это!
Это небольшое введение в то, как я научился считывать информацию с этих графиков. Я думаю, что они тонны веселья!
Спасибо за отличный анализ. Проще говоря, не могли бы вы сказать, что wt, am и cyl являются 3 наиболее важными предикторами mpg. Кроме того, если вы хотите создать модель для прогнозирования, какие из них вы будете включать на основе этого показателя: wt, am и cyl? Или какая-то другая комбинация. Кроме того, вам, кажется, не нужна лучшая лямбда для анализа. Разве это не важно, как в регрессии гребня?
Я бы сказал, что аргументы за wt
и am
четкие, они важны. cyl
гораздо тоньше, это важно в маленькой модели, но совсем не актуально в большой.
Я не смог бы определить, что включать, основываясь только на рисунке, который действительно должен отвечать контексту того, что вы делаете. Можно сказать , что если вы хотите модель три предсказателя, а затем wt
, am
и cyl
это хороший выбор, так как они актуальны в великой схеме вещей, и должны в конечном итоге, разумных размерах эффекта в небольшой модели. Это основано на предположении, что у вас есть какая-то внешняя причина желать иметь маленькую модель с тремя предикторами.
Это правда, что этот тип анализа просматривает весь спектр лямбд и позволяет отбирать отношения по ряду модельных сложностей. Тем не менее, для окончательной модели, я думаю, настройка оптимальной лямбды очень важна. В отсутствие других ограничений я бы определенно использовал перекрестную проверку, чтобы найти, где вдоль этого спектра находится наиболее прогнозирующая лямбда, а затем использовал бы эту лямбду для окончательной модели и окончательного анализа.
λ
С другой стороны, иногда существуют внешние ограничения на то, насколько сложной может быть модель (затраты на внедрение, устаревшие системы, объяснительный минимализм, интерпретация бизнеса, эстетическое наследие), и этот вид проверки действительно может помочь вам понять форму ваших данных, и компромиссы, которые вы делаете, выбирая модель меньше оптимальной.
-1
вglmnet(as.matrix(mtcars[-1]), mtcars[,1])
.