$\lambda$ を選択するクロス検証を使用して、R のバイナリ応答変数を予測するためのトレーニング データの LASSO モデルを開発しました。
x = model.matrix(y ~ x1 + x2 + ... + x23, data=train)[, -1]
library(glmnet)
glm.train = glmnet(x, y = as.factor(train$y), alpha = 1, family = 'binomial')
plot(glm.train, xvar = "lambda")
grid()
glm.train.cv = cv.glmnet(x, y = train$dem, alpha = 1, family = 'binomial')
opt.lambd = glm.train.cv$lambda.min
train.fit.lasso = glmnet(x, y = train$dem, alpha = 1, family = 'binomial')
predict(train.fit.lasso, s = opt.lambd, type = "coefficients")[1:23, ]
次に、テスト データでモデルをテストしたところ、確かな結果が得られました (以下では、テスト データにモデルの ROC 曲線を挿入しました)。
上記で使用したトレーニング データとテスト データの両方で、応答変数の実際の値があり、model.matrix()
関数を使用して予測値を計算することができました。ただし、応答変数のすべての値が NA であるテスト データの 2 番目のセクションがあります。このデータにを適用するmodel.matrix()
と、マトリックスの次元は 0x22 になります。
> dim(x.predict)
[1] 0 22
に代わるいくつかの方法を試しましたがmodel.matrix()
、エラーが発生するだけです。たとえば、 を使用しようとするdata.matrix()
と、行列の次元は正しくなります。
> x.predict = data.matrix(predict.data[c(-1,-2,-3, -5,-6, -10, -14, -18,-19, -21, -26,-27, -34,-35,-36,-37)])
> dim(x.predict)
[1] 5010 23
ただし、モデルを使用して確率または分類を推定しようとすると、次のエラーが表示されます。
> test$test.probs = predict(train.fit.lasso, newx = x.predict, s =opt.lambd, type = "response")
Error in as.matrix(cbind2(1, newx) %*% nbeta) :
error in evaluating the argument 'x' in selecting a method for function 'as.matrix': Error in cbind2(1, newx) %*% nbeta :
Cholmod error 'X and/or Y have wrong dimensions' at file ../MatrixOps/cholmod_sdmult.c, line 90
> test$test.predicts = predict(train.fit.lasso, newx = x.predict[1:5010,], s = opt.lambd, type = "class")
Error in as.matrix(cbind2(1, newx) %*% nbeta) :
error in evaluating the argument 'x' in selecting a method for function 'as.matrix': Error in cbind2(1, newx) %*% nbeta :
Cholmod error 'X and/or Y have wrong dimensions' at file ../MatrixOps/cholmod_sdmult.c, line 90
LASSO で以前にこの問題に遭遇した人はいますか? または、誰かが LASSO でさまざまな関数がどのように使用されているかを理解し.matrix()
、応答値が NA の場合に予測を計算するための回避策を教えてもらえますか?