我试图使用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-我需要将二进制变量编码为因子吗?我问这个问题的原因是我的数据集很大。它节省了大量的时间,只是这样做,而不是编码作为因素。
发布于 2014-06-17 03:09:33
我不认为你需要一个sparse.model.matrix,因为它真正给你的是因子项的扩展,如果你已经是二进制的话,它不会给你任何东西。您当然不需要将其编码为因子,我经常在一个只有1的规则(非模型)稀疏矩阵上使用glmnet。在一天结束时,glmnet是一种数值方法,所以因子最终会被转换成一个数字。
https://stackoverflow.com/questions/23788364
复制相似问题