【问题标题】:Query about ridge regression - optimum value of lambda关于岭回归的查询——lambda的最优值
【发布时间】:2018-02-21 16:50:32
【问题描述】:

我有一个关于 R 中的 cv.glmnet() 函数的查询,它应该为岭回归找到参数 lambda 的“最佳”值。

在下面的示例代码中,如果您尝试使用小于 cv.glmnet() 给出的值的 lambda 值,您会发现误差平方和实际上远小于 cv.fit $lambda.min 给出。

我在很多数据集上都注意到了这一点。即使是 Gareth James 等人着名的“统计学习简介”(ISLR)一书中的例子也有这个问题。 (第 6.6.1 节使用 Hitters 数据集)。最小化 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))

【问题讨论】:

    标签: r regression


    【解决方案1】:

    cv.glmnet 搜索 lambda 最小化交叉验证分数,而不是 MSE。

    来自?cv.glmnet

    函数运行glmnetnfolds+1次;第一个获得lambda 序列,然后用余数计算与每个 折叠省略。误差累加,平均误差和 计算折叠的标准差。

    【讨论】:

    • 交叉验证分数究竟是如何计算的?你能给我一个参考吗?
    • 抱歉 - 又是:cv.glm(fit, K=10)$delta[1]。这就是我们得到交叉验证错误的方式吗?
    • 好的,终于明白了。如果 cv.glmnet() 返回 cv.fit,则不同 lambda 值的交叉验证误差值在 cv.fit$cvm 中。该值是 cv.fit$lambda.min 值的最小值。谢谢...
    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 2019-10-11
    • 2019-06-03
    • 2018-09-29
    • 2016-10-21
    • 2020-09-21
    • 2012-10-07
    • 2014-12-30
    相关资源
    最近更新 更多