gpt4 book ai didi

r - glmnet 变量重要性 | `vip` 与 `varImp`

转载 作者:行者123 更新时间:2023-12-04 08:39:36 25 4
gpt4 key购买 nike

关闭。这个问题需要details or clarity .它目前不接受答案。












想改进这个问题?通过 editing this post 添加详细信息并澄清问题.

1年前关闭。




Improve this question




我使用 glmnet 拟合了 Lasso Logistic 回归模型

X = data.matrix(mtcars %>% dplyr::select(-vs))
y = mtcars$vs
CV_lasso = cv.glmnet(X, y, alpha = 1, family = "binomial", type.measure = "class")
我试图确定变量的重要性,并遇到了两种产生截然不同结果的方法
vip(CV_lasso$glmnet.fit)
varImp(CV_lasso$glmnet.fit, lambda = CV_lasso$lambda.min) 
有人能告诉我这些方法有什么区别,哪一种更好吗?从逻辑套索模型中确定变量重要性的最佳方法是什么?

最佳答案

似乎是因为他们对 lambda 使用了不同的值。 .在 varImp ,您指定哪个 lambda使用。但是,当您调用 vip ,然后在源代码中,执行以下代码:

imp <- if (inherits(object, what = "vi")) {
object
} else {
vi(object = object, ...) # compute variable importance scores
}
在哪里 vi(object = object, ...)被调用。在 vi 的源代码中函数,在某些时候这个小标题被定义:
tib <- switch(method,
"model" = vi_model(object, ...),
"firm" = vi_firm(object, feature_names = feature_names, var_fun = var_fun,
ice = ice, ...),
"permute" = vi_permute(object, feature_names = feature_names, ...),
vi_shap(object, feature_names = feature_names, ...)
)
问题出现在 "model" 的定义中。 .尝试运行时 vi_model .在此函数中,此代码用于确定要使用的 lambda:
 # Extract coefficients
s <- list(...)$s
if (is.null(s)) {
s <- min(object$lambda)
}
由于您还没有定义 s , 然后它被设置为你的 lambdas 中的最小值。这是 lambda 的最后一个值,即 0.0001119218。这不等于 varImp 中使用的 lambda。 ,您指定使用最佳 lambda,在本例中为 0.1586463。
您可以通过运行获得相同的系数:
c1 = vip::vi_model(CV_lasso$glmnet.fit, s = CV_lasso$lambda.min)
c2 = caret::varImp(CV_lasso$glmnet.fit, lambda = CV_lasso$lambda.min)
然后如果你坚持使用 vip::vip要获得绘图,您可以在 c1 上调用此函数:
vip::vip(c1)

关于r - glmnet 变量重要性 | `vip` 与 `varImp`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64628970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com