Оценка Лассо, описанная в этом вопросе, является множителем Лагранжа, эквивалентным следующей задаче оптимизации:
минимизировать f( β) с учетом г( β) ≤ т
е( β)грамм( β)= 12 н| | Y- Хβ| |22= | | β| |1
Эта оптимизация имеет геометрическое представление о нахождении точки контакта между многомерной сферой и многогранником (натянутым на векторы X). Поверхность многогранника представляет собой . Квадрат радиуса сферы представляет функцию и минимизируется при контакте поверхностей.грамм( β)е( β)
Изображения ниже дают графическое объяснение. Изображения использовали следующую простую задачу с векторами длины 3 (для простоты, чтобы иметь возможность сделать рисунок):
⎡⎣⎢Y1Y2Y3⎤⎦⎥= ⎡⎣⎢1.41,840,32⎤⎦⎥= β1⎡⎣⎢0.80.60⎤⎦⎥+ β2⎡⎣⎢00.60.8⎤⎦⎥+ β3⎡⎣⎢0.60,64−0.48⎤⎦⎥+⎡⎣⎢ϵ1ϵ2ϵ3⎤⎦⎥
ϵ 2 1 + ε 2 2 + ε 2 3
и мы минимизируем с ограничениемϵ21+ϵ22+ϵ23abs(β1)+abs(β2)+abs(β3)≤t
Изображения показывают:
- Красная поверхность изображает ограничение, многогранник, натянутый на X.
- А зеленая поверхность изображает минимизированную поверхность, сферу.
- Синяя линия показывает путь лассо, решения, которые мы находим при изменении или .tλ
- Зеленый вектор показывает решение OLS (которое было выбрано как или .y^β1=β2=β3=1 у =х1+х2+х3Y^= х1+ х2+ х3
- Три черных вектора: , и .Икс1= ( 0,8 , 0,6 , 0 )Икс2= ( 0 , 0,6 , 0,8 )x3=(0.6,0.64,−0.48)
Мы показываем три изображения:
- На первом изображении только точка многогранника касается сферы . Это изображение очень хорошо демонстрирует, почему решение lasso не просто кратно решению OLS. Направление решения OLS добавляет больше к сумме . В этом случае только один отличен от нуля.|β|1βi
- На втором изображении гребень многогранника касается сферы (в более высоких измерениях мы получаем более масштабные аналоги). В этом случае несколько отличны от нуля.βi
- На третьем изображении грань многогранника касается сферы . В этом случае все отличны от нуляβi .
Диапазон или для которого мы имеем первый и третий случаи, может быть легко вычислен благодаря их простому геометрическому представлению.tλ
Случай 1: только один ненулевойβi
Ненулевым является тот, для которого связанный вектор имеет наибольшее абсолютное значение ковариации с (это точка параллелотопа, ближайшая к решению OLS). Мы можем вычислить множитель Лагранжа ниже которого у нас есть по крайней мере ненулевое значение , взяв производную с (знак в зависимости от того, увеличиваем ли мы в отрицательном или положительном направлении):βixiу λ м х & beta ; & plusmn ; & beta ; я & beta ; яy^λmaxβ±βiβi
∂(12n||y−Xβ||22−λ||β||1)±∂βi=0
что приводит к
λmax=(12n∂(||y−Xβ||22±∂βi)(||β||1)±∂βi)=±∂(12n||y−Xβ||22∂βi=±1nxi⋅y
что равно упомянутых в комментариях.||XTy||∞
где мы должны заметить, что это верно только для особого случая, когда верхушка многогранника касается сферы ( поэтому это не общее решение , хотя обобщение является простым).
Случай 3: все отличны от нуля.βi
В этом случае грань многогранника касается сферы. Тогда направление изменения пути лассо перпендикулярно поверхности конкретной грани.
Многогранник имеет много аспектов, с положительным и отрицательным вкладом . В случае последнего шага лассо, когда решение лассо близко к решению ols, вклады должны быть определены знаком решения OLS. Нормаль фасета можно определить, взяв градиент функции , значение суммы беты в точке , которое равно:xixi||β(r)||1r
n=−∇r(||β(r)||1)=−∇r(sign(β^)⋅(XTX)−1XTr)=−sign(β^)⋅(XTX)−1XT
и эквивалентное изменение бета для этого направления:
β⃗ last=(XTX)−1Xn=−(XTX)−1XT[sign(β^)⋅(XTX)−1XT]
который после некоторых алгебраических трюков со смещением транспонирует ( ) и распределение скобок становитсяATBT=[BA]T
β⃗ last=−(XTX)−1sign(β^)
мы нормализуем это направление:
β⃗ last,normalized=β⃗ last∑β⃗ last⋅sign(β^)
Найти ниже которого все коэффициенты ненулевые. Нам нужно только рассчитать обратно из решения OLS обратно в точку, где один из коэффициентов равен нулю,λmin
d=min(β^β⃗ last,normalized)with the condition that β^β⃗ last,normalized>0
и в этот момент мы оцениваем производную (как и раньше, когда вычисляем ). Мы используем это для квадратичной функции, мы имеем :λmaxq′(x)=2q(1)x
λmin=dn||Xβ⃗ last,normalized||22
Картинки
точка многогранника касается сферы, одиночный не равен нулю:βi
гребень (или разный во многих измерениях) многогранника касается сферы, многие отличны от нуля:βi
грань многогранника касается сферы, все отличны от нуля:βi
Пример кода:
library(lars)
data(diabetes)
y <- diabetes$y - mean(diabetes$y)
x <- diabetes$x
# models
lmc <- coef(lm(y~0+x))
modl <- lars(diabetes$x, diabetes$y, type="lasso")
# matrix equation
d_x <- matrix(rep(x[,1],9),length(x[,1])) %*% diag(sign(lmc[-c(1)]/lmc[1]))
x_c = x[,-1]-d_x
y_c = -x[,1]
# solving equation
cof <- coefficients(lm(y_c~0+x_c))
cof <- c(1-sum(cof*sign(lmc[-c(1)]/lmc[1])),cof)
# alternatively the last direction of change in coefficients is found by:
solve(t(x) %*% x) %*% sign(lmc)
# solution by lars package
cof_m <-(coefficients(modl)[13,]-coefficients(modl)[12,])
# last step
dist <- x %*% (cof/sum(cof*sign(lmc[])))
#dist_m <- x %*% (cof_m/sum(cof_m*sign(lmc[]))) #for comparison
# calculate back to zero
shrinking_set <- which(-lmc[]/cof>0) #only the positive values
step_last <- min((-lmc/cof)[shrinking_set])
d_err_d_beta <- step_last*sum(dist^2)
# compare
modl[4] #all computed lambda
d_err_d_beta # lambda last change
max(t(x) %*% y) # lambda first change
enter code here
примечание: эти последние три строки являются наиболее важными
> modl[4] # all computed lambda by algorithm
$lambda
[1] 949.435260 889.315991 452.900969 316.074053 130.130851 88.782430 68.965221 19.981255 5.477473 5.089179
[11] 2.182250 1.310435
> d_err_d_beta # lambda last change by calculating only last step
xhdl
1.310435
> max(t(x) %*% y) # lambda first change by max(x^T y)
[1] 949.4353
Автор StackExchangeStrike