glmnet 中具有多项 Logit 的惩罚因子

问题描述 投票:0回答:1

我正在尝试使用 glmnet 来拟合自适应套索以进行多项 Logit 回归。我的问题如下:当我尝试在 cv.glmnet 中使用惩罚矩阵(2x3 矩阵)penalty.factor 时,出现以下错误:

`glmnet 中的错误(x,y,权重 = 权重,偏移量 = 偏移量,lambda = lambda,: penalty.factor 的长度与变量的数量不匹配``

然而,问题在于列(类别)而不是行(变量),因为如果我只使用惩罚矩阵的一列(

penalty[,1]
),它就可以工作。

代表代码在这里:

y <- matrix(round(runif(100,1,3),0))
x <- matrix(rnorm(200),,2)

# Generate Penalties based on ridge regression
 
set.seed(4342)
 
ridge.cv <- cv.glmnet(x,y,alpha=0, family= "multinomial", type.measure = "deviance", nfolds = 10)

best_ridge <- do.call(cbind, coef(ridge.cv, s = ridge.cv$lambda.min))
penalty  <- 1 / abs(as.matrix(best_ridge)[-1,])



# Cross-validation of Lambda

lasso.cv <- cv.glmnet(x,y,alpha=, family= "multinomial", type.measure = "deviance", 
    penalty.factor = penalty, nfolds = 10)

我如何使用完整的处罚矩阵?谢谢!

r glmnet lasso-regression mlogit
1个回答
0
投票

best_ridge
有三列,因此您将给出一个 6 元素矩阵作为惩罚:

> str(penalty)
 num [1:2, 1:3] 2.15e+37 1.12e+38 2.03e+38 9.76e+37 2.41e+37 ...
 - attr(*, "dimnames")=List of 2
  ..$ : chr [1:2] "V1" "V2"
  ..$ : chr [1:3] "1" "1" "1"

错误消息表明惩罚的长度与变量的数量 (2) 不匹配。所以我尝试只提供该矩阵的一列并且......没有错误。

> lasso.cv <- cv.glmnet(x,y,alpha=, family= "multinomial", type.measure = "deviance", 
+     penalty.factor = penalty[,1], nfolds = 10)
> lasso.cv

Call:  cv.glmnet(x = x, y = y, type.measure = "deviance", nfolds = 10,      alpha = , family = "multinomial", penalty.factor = penalty[,          1]) 

Measure: Multinomial Deviance 

    Lambda Index Measure      SE Nonzero
min 0.1584     1   2.228 0.05557       0
1se 0.1584     1   2.228 0.05557       0

© www.soinside.com 2019 - 2024. All rights reserved.