уменьшение веса одной из переменных x в glmnet - PullRequest
1 голос
/ 18 февраля 2020

Я могу создать модель, используя glmnet. Однако, если я заранее знаю, что вклад одной переменной мал (например, x [, 1]), как я могу уменьшить ее вклад в функцию glmnet?

library(glmnet)
x <- matrix(rnorm(100*20),100,20)
y <- rnorm(100)
fit1 <- glmnet(x,y)
print(fit1)
coef(fit1,s=0.01) # extract coefficients at a single value of lambda
predict(fit1,newx=x[1:10,],s=c(0.01,0.005)) # make predictions

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Это что-то вроде хака, но поскольку подходы на основе регрессионного наказания предполагают, что все переменные масштабируются одинаково, сокращение шкала переменной-предиктора должна требовать большего значения параметра для характеристики того же самого величина эффекта и, следовательно, больший штраф, например

x2 <- scale(x)
x2[,1] <- x2[,1]/100
fit2 <- glmnet(x2,y,standardize=FALSE)
coef(fit2,s=0.01)

, показывают, что первая переменная была исключена. (Вы должны заставить glmnet , а не для повторной стандартизации внутренних переменных; вы должны убедиться, что вы сами масштабировали предикторы ...)

1 голос
/ 18 февраля 2020

Почему бы просто не удалить его? Я не думаю, что вы можете уменьшить «вклад» одной переменной. Эта переменная создает помехи вашему прогнозу. Когда в модель добавляется независимая переменная, увеличивается, несмотря ни на что. Если эта переменная не имеет никакого отношения к зависимой переменной (какова ваша ситуация), в R² добавляется меньшее количество «вклада». Если зависимый (x) и независимый (y) имеет отношение, то достигается большее значение R², что означает, что вы можете лучше объяснить y с помощью x.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...