Lasso,glmnet,数据的预处理

时间:2014-05-21 16:01:47

标签: r sparse-matrix dummy-data glmnet lasso

我试图使用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-我是否需要将二进制变量编码为因子? 我问的原因是我的数据集是巨大的。它可以节省大量时间,而无需编码作为因素。

1 个答案:

答案 0 :(得分:2)

我认为你不需要一个稀疏模式矩阵,因为它真正给你提供了一个常规矩阵,就是扩展因子项,如果你已经二进制已经赢得了给你什么。您当然不需要来编码作为因素,我经常在仅具有1&#39的常规(非模型)稀疏矩阵上使用glmnet。在一天结束时,glmnet是一种数值方法,因此无论如何,一个因子将最终转换为数字。