[英]How to find the fitted value in cv.glmnet or glmnet function in R?
[英]Change coefficient of cv.glmnet fitted regression in R
我知道如何从 cv.glmnet 中“提取”系数。 但是有没有办法改变安装的 object 的系数? 我知道这是一种 hack,但我想手动调整适合的 object 的系数,只是为了我自己的实验。
glmnet 的系数存储在$glmnet.fit$beta
下:
library(glmnet)
library(Matrix)
fit = cv.glmnet(x=as.matrix(mtcars[,-1]),y=mtcars[,1])
head(fit$glmnet.fit$beta)
6 x 79 sparse Matrix of class "dgCMatrix"
[[ suppressing 79 column names ‘s0’, ‘s1’, ‘s2’ ... ]]
cyl . -0.01192151 -0.1447790 -0.2658654 -0.376195 -0.4770942 -0.5686616
disp . . . . . . .
hp . . . . . . .
drat . . . . . . .
wt . -0.45776130 -0.7006176 -0.9218541 -1.123436 -1.3065806 -1.4739808
qsec . . . . . . .
它是每个 lambda 测试的一列,当您调用coefficients()
时,默认情况下您拉出对应于fit$lambda.1se
的列。 假设我们要更改该列:
coefficients(fit,s=fit$lambda.1se)
11 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept) 33.940487806
cyl -0.843038418
disp .
hp -0.006965929
drat .
wt -2.365917424
qsec .
vs .
am .
gear .
carb .
wh = which(fit$lambda==fit$lambda.1se)
fit$glmnet.fit$beta[,wh] = runif(nrow(fit$glmnet.fit$beta))
coefficients(fit,s=fit$lambda.1se)
11 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept) 33.94048781
cyl 0.45636267
disp 0.28286532
hp 0.04186184
drat 0.55084730
wt 0.35273817
qsec 0.96165338
vs 0.79227125
am 0.01036681
gear 0.47738589
carb 0.17170791
其他列和截距保持不变:
11 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept) 36.38102033
cyl -0.87610600
disp .
hp -0.01377978
drat .
wt -2.75934250
qsec .
vs .
am 0.16806977
gear .
carb -0.01384960
这样做真的很奇怪。 如果您想更改系数以进行预测,您可以随时拉出系数,更改它们并再次将它们与您的数据矩阵相乘。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.