gpt4 book ai didi

r - 在 R 中将 LASSO 与分类变量结合使用

转载 作者:行者123 更新时间:2023-12-02 02:29:43 24 4
gpt4 key购买 nike

我有一个包含 1000 个观察值和 76 个变量的数据集,其中大约 20 个是分类变量。我想对整个数据集使用 LASSO。我知道通过 lars 或 glmnet 在 LASSO 中使用因子变量并不能真正起作用,但是变量太多,并且它们可以采用太多不同的无序值来合理地对它们进行数字重新编码。

这种情况可以使用LASSO吗?我该怎么做呢?创建预测变量矩阵会产生以下响应:

hdy<-as.numeric(housingData2[,75])
hdx<-as.matrix(housingData2[,-75])
model.lasso <- lars(hdx, hdy)
Error in one %*% x : requires numeric/complex matrix/vector arguments

我意识到其他方法可能更简单或更合适,但挑战实际上是使用 lars 或 glmnet 来做到这一点,所以如果可能的话,我将不胜感激任何想法或反馈。

谢谢,

最佳答案

这里的其他答案指出了将您的分类因素重新编码为虚拟因素的方法。根据您的应用程序,这可能不是一个很好的解决方案。如果您关心的只是预测,那么这可能没问题,并且 Flo.P 提供的方法应该没问题。 LASSO 将为您找到一组有用的变量,并且您可能不会过度拟合。

但是,如果您有兴趣解释您的模型或事后讨论哪些因素很重要,那么您就处于一个奇怪的境地。 model.matrix 的默认编码在单独使用时有非常具体的解释。 model.matrix 使用所谓的“虚拟编码”。 (我记得将其学习为“引用编码”;有关摘要,请参阅 here。)这意味着,如果包含其中一个虚拟变量,则您的模型现在有一个参数,其解释是“该因子的一个级别与该因素的任意选择的其他水平”。也许没有选择该因素的其他虚拟人。您可能还会发现,如果因子水平的排序发生变化,您最终会得到不同的模型。

有很多方法可以解决这个问题,但我不会尝试将某些东西混在一起,而是尝试使用组套索。基于上面 Flo.P 的代码构建:

install.packages("gglasso")
library(gglasso)


create_factor <- function(nb_lvl, n= 100 ){
factor(sample(letters[1:nb_lvl],n, replace = TRUE))}

df <- data.frame(var1 = create_factor(5),
var2 = create_factor(5),
var3 = create_factor(5),
var4 = create_factor(5),
var5 = rnorm(100),
y = rnorm(100))

y <- df$y
x <- model.matrix( ~ ., dplyr::select(df, -y))[, -1]
groups <- c(rep(1:4, each = 4), 5)
fit <- gglasso(x = x, y = y, group = groups, lambda = 1)
fit$beta

因此,由于我们没有指定因子(var1、var2 等)和 y 之间的关系,因此 LASSO 做得很好,并将所有系数设置为 0,除非应用最小量的正则化。您可以尝试使用 lambda(调整参数)的值,或者将该选项留空,该函数将为您选择一个范围。

关于r - 在 R 中将 LASSO 与分类变量结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46865838/

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