【问题标题】:Specifying type of measure with lasso regression使用套索回归指定测量类型
【发布时间】:2020-03-15 00:16:08
【问题描述】:

我正在尝试使用 glmnet 和 lasso poisson 回归进行变量选择。

如果我使用它就会运行:

model.lasso <- glmnet(X,ED.visits, family="poisson", alpha=1, nlambda=1000)

但有人要求我使用“偏差”作为衡量标准。运行时出现错误:

model.lasso <- glmnet(X,ED.visits, type.measure=c("deviance"), family="poisson", alpha=1, nlambda=1000)

type.measure 是正确的规范,根据:the documentation

【问题讨论】:

  • c(…) 放在单个值周围是没有意义的,这与在您的情况下仅写"deviance" 相同。除此之外,请发布您收到的错误消息。
  • 是的,我使用 ="deviance" 和 = c("deviance") 可以互换,因为我的教授也是这样做的。有时我们会快速添加另一个度量。不过谢谢。
  • 嗯。老实说,这不是一个好主意,我建议不要这样做:避免代码混乱,它会降低可读性并且会随着时间的推移而增加。应该对不必要的、非功能性代码片段采取零容忍政策。

标签: r measure poisson glmnet lasso-regression


【解决方案1】:

参数:type.measure,不是 glmnet 函数的一部分,而是 cv.glmnet 函数的一部分。您正在调用的参数不是上述函数的一部分。

【讨论】:

  • 是的!就是这样。我对我的 model.lassoCV 和我的 model.lasso 都使用了 type.measure="deviance"。它应该只与我的 model.lassoCV 一起使用。 (cv.glmnet) 调用而不是另一个。谢谢。在我的辩护中,它在昨天的第一个电话中肯定显示为红色。
【解决方案2】:

对于泊松族回归,默认情况下它使用偏差进行拟合(最小化它)。 cv.glmnet 的目的是使用交叉验证找到最佳的 lambda,但是由于您已经指定了它,因此使用 cv.glmnet 和 glmnet 的结果是相同的:

library(glmnet)
x = matrix(rnorm(10000),1000,10)
y = rpois(1000,10)
cv.lasso <- cv.glmnet(x,y, 
type.measure="deviance", family="poisson", 
alpha=1, nlambda=1000)

model.lasso <- glmnet(x,y, family="poisson", 
alpha=1, nlambda=1000)

> identical(cv.lasso$glmnet.fit$beta,model.lasso$beta)
[1] TRUE

您需要找到最佳 lambda 吗?如果不只是使用不带 type="measure" 参数的 glmnet。

【讨论】:

  • 是的,我在 cv.glmnet 函数中使用了 nfolds=10。然后使用 coef(model.lasso, s=model.lassoCV$lambda.min) 来获得最佳模型的系数。我会在上面评论我的错误。我对两个调用都使用了 type.measure="deviance",它应该是第一个(cv.lasso)。
  • 这条语句也很有帮助:“默认情况下,它使用偏差进行拟合(最小化它)。”谢谢。
猜你喜欢
  • 2019-08-08
  • 2018-06-16
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
  • 2016-06-02
  • 2022-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多