1

glmnet パッケージを使用して、バイナリ結果 (ロジット) を持つモデルになげなわ (L1 ペナルティ) を当てはめようとしています。私の予測子は、1 つの連続変数を除いて、すべてバイナリです (1/0 は順序付けられておらず、~4000 です)。予測変数をスパース行列に変換する必要があります。そうしないと永遠に、1 日かかるからです。私の質問は、行列を疎行列に変換するだけでなく、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. 

私の 2 つの質問を要約すると、次のとおりです。[はいの場合、行列を疎行列に変換するのと実際には何が違うのですか] 2-バイナリ変数を因子としてコード化する必要がありますか? 私が尋ねる理由は、私のデータセットが巨大であることです。因子としてコーディングせずにそれを行うだけで、多くの時間を節約できます。

4

1 に答える 1

2

sparse.model.matrix は必要ないと思います。通常の行列の上で実際に得られるのは因子項の展開だけであり、既にバイナリである場合は何も得られません。確かに因子としてコーディングする必要はありません。私は頻繁に、1 のみの通常の (非モデル) スパース行列で glmnet を使用します。結局のところ、glmnet は数値メソッドであるため、最終的に係数は数値に変換されます。

于 2014-06-17T03:09:33.987 に答える