我有一个关于R中的cv.glmnet()函数的查询,它应该找到"最佳"岭回归的参数lambda的值。
在下面的示例代码中,如果您尝试使用lambda的值小于cv.glmnet()给出的值,您会发现误差平方和实际上比cv.fit小得多$ lambda.min给出。
我注意到了许多数据集。甚至Gareth James等人着名的书籍#34;统计学习简介"(ISLR)中的例子也存在这个问题。 (使用Hitters数据集的第6.6.1节)。最小化MSE的lambda的实际值小于ISLR书所给出的值。在列车数据和新测试数据上都是如此。
这是什么原因?那么,cv.fit $ lambda.min究竟返回了什么?
拉维
data(mtcars)
y = mtcars$hp
X = model.matrix(hp~mpg+wt+drat, data=mtcars)[ ,-1]
X
lambdas = 10^seq(3, -2, by=-.1)
fit = glmnet(X, y, alpha=0, lambda=lambdas)
summary(fit)
cv.fit = cv.glmnet(X, y, alpha=0, lambda=lambdas)
# what is the optimum value of lambda?
(opt.lambda = cv.fit$lambda.min) # 1.995262
y.pred = predict(fit, s=0.01, newx=X, exact=T) # gives lower SSE
# Sum of Squares Error
(sse = sum((y.pred - y)^2))
答案 0 :(得分:1)
cv.glmnet
搜索lambda
最小化交叉验证得分,而不是MSE。
来自?cv.glmnet
:
该函数运行
glmnet
nfolds
+ 1次;第一个得到lambda
序列,然后余数来计算与每个的拟合 折叠省略。累积误差,平均误差和 计算折叠的标准偏差。