Как получить перехват от линейной модели с помощью лассо (пакет lars R)
Я испытываю трудности с получением модели, оцененной пакетом R lars
для моих данных.
Например, я создаю ложный набор данных x и соответствующие значения y, например:
x = cbind(runif(100),rnorm(100))
colnames(x) = c("a","b")
y = 0.5 + 3 * x[,1,drop = FALSE]
Затем я обучаю модель, которая использует регуляризацию лассо, используя функцию lars:
m = lars(x,y,type = "lasso", normalize = FALSE, intercept = TRUE)
Теперь хотелось бы узнать, что такое примерная модель (that I know to be: y = 0.5 + 3 * x[,1] + 0 * x[,2]
)
Меня интересуют только коэффициенты, полученные на последнем шаге:
cf = predict(m, x, s=1, mode = "fraction", type = "coef")$coef
cf
a b
3 0
Это ожидаемые коэффициенты, но я не могу найти способ получить перехват (0.5
) от m
,
Я пытался проверить код predict.lars
где подгонка делается так:
fit = drop(scale(newx,
object$meanx, FALSE) %*% t(newbetas)) + object$mu)
Я вижу, что переменные масштабируются, а среднее y
(объект $ mu), но я не могу найти простой способ получить значение перехвата, который я ищу. Как я могу получить это?
1 ответ
intercept=T
в lars
имеет эффект центрирования переменных x и y. Он не включает в себя явный член перехвата с коэффициентом.
Как говорится, вы могли бы сделать predict(m,data.frame(a=0,b=0),s=2)$fit
чтобы получить прогнозируемое значение y, когда ковариаты равны 0 (определение традиционного перехвата)