glmnetロジスティック回帰は、ダミー変数を必要とせずに因子(カテゴリ)変数を直接処理できますか?[閉まっている]


15

私は関数でLASSO法を使用してRにロジスティック回帰を構築していますcv.glmnet選択するlambdaglmnet、最終的なモデルのため。

私はすでに自動モデル選択に関するすべての欠点を知っていますが、とにかくそれをする必要があります。

私の問題は、ファクター(カテゴリ)変数をモデルに含める必要があることです。ダミー変数を大量に作成せずにそれを行う方法はありますか?この変数はほとんどすべて文字列であり、数値ではありません。


2
これについても最善の方法について興味があります。
森林生態学者

回答:


26

glmnetは直接ファクターを取ることができないため、ファクター変数をダミーに変換する必要があります。たとえば、model.matrixを使用する1つの簡単な手順です。

x_train <- model.matrix( ~ .-1, train[,features])
lm = cv.glmnet(x=x_train,y = as.factor(train$y), intercept=FALSE ,family =   "binomial", alpha=1, nfolds=7)
best_lambda <- lm$lambda[which.min(lm$cvm)]

alpha = 1はLASSOを構築します。


1
+1すばらしい回答です!なぜあなたはインターセプト= FALSEを使用するのですか?
エロセニン

カテゴリ変数が2つある場合、これは失敗するようです。var1にL1レベルがある場合、L1列を正しく取得していますが、var2(L2レベルがある)にはL2-1列を取得しています。
ピーター

@Peter Straka:sum(var1のL1ダミー以上)=すべてのレコードで1、sum(V2のL2ダミー以上)= 1であるため、var1のL1ダミーとvar2のL2ダミーは線形に依存します。var2のダミーL2ダミーの少なくとも1つは冗長です(線形モデルを構築するため)。
VictorZurkowski
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.