1

我试图使用 glmnet 包在具有二进制结果(logit)的模型上拟合套索(L1 惩罚)。我的预测变量都是二进制的(它们是 1/0 未排序的,~4000),除了一个连续变量。我需要将预测变量转换为稀疏矩阵,因为它需要永远和一天。我的问题是:似乎人们正在使用 sparse.model.matrix 而不仅仅是将他们的矩阵转换为稀疏矩阵。这是为什么?我需要在这里做吗?两种方法的结果略有不同。

另外,我的因子是否需要编码为因子(当涉及到结果和预测变量时)或者使用稀疏矩阵并在 glmnet 模型中指定结果是二项式就足够了?

这是我到目前为止所做的

#Create a random dataset, y is outcome, x_d is all the dummies (10 here for simplicity) and x_c  is the  cont variable 
y<- sample(c(1:0), 200, replace = TRUE)
x_d<- matrix(data= sample(c(1:0), 2000, replace = TRUE), nrow=200, ncol=10)
x_c<- sample(60:90, 200, replace = TRUE) 

#FIRST: scale that one cont variable. 
scaled<-scale(x_c,center=TRUE, scale=TRUE)

#then predictors together
x<- cbind(x_d, scaled) 

#HERE'S MY MAIN QUESTION: What i currently do is: 
xt<-Matrix(x ,  sparse = TRUE) 

#then run the cross validation...
cv_lasso_1<-cv.glmnet(xt, y, family="binomial", standardize=FALSE)

#which gives slightly different results from (here the outcome variable is in the x matrix too) 
xt<-sparse.model.matrix(data=x, y~.)

#then run CV. 

所以总结我的两个问题是:1-即使我的因子只是二进制而不是有序的,我是否需要使用 sparse.model.matrix?[如果是的话,它实际上与仅将矩阵转换为稀疏矩阵有什么不同] 2-我需要将二进制变量编码为因子吗?我问的原因是我的数据集很大。无需编码即可节省大量时间。

4

1 回答 1

2

我认为您不需要 sparse.model.matrix,因为它在常规矩阵之上真正为您提供的只是因子项的扩展,如果您已经是二进制,那将不会给您任何东西。您当然不需要编码为因子,我经常在只有 1 的常规(非模型)稀疏矩阵上使用 glmnet。归根结底,glmnet 是一种数值方法,因此无论如何,因子最终都会转换为数字。

于 2014-06-17T03:09:33.987 回答