我正在使用glmnet进行多项式和交叉验证的特征选择。一切都很好,但是只有不到400个预测变量和4个级别,输出变得有点混乱
X <- matrix(rnorm(350000),nrow=1000,ncol=350)
colnames(X) <- sample(LETTERS,350,TRUE)
Y <- factor(sample(LETTERS[1:5],1000,TRUE),levels =LETTERS[1:5])
out.cvfit <- cv.glmnet(x=X ,y=Y,standardize=TRUE,family="multinomial",parallel = TRUE,type.measure = "class")
所以我得到了这样的输出:
coef.cv.glmnet(out.cvfit,"lambda.1se")
...
$D
351 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept) 0.06770556
F .
L .
B .
W .
V .
W .
G .
X .
G .
A .
G .
V .
Q .
T .
...
一个有点人为的例子,因为所有都是零,因为没有结构,但是您明白了。
好吧,要在多个级别上查看并汇总提取的预测变量非常麻烦。那么,有没有办法从稀疏矩阵中仅提取非零预测变量?
答案 0 :(得分:0)
我将相关输出另存为a
。然后,您可以使用[]
进行子集化。请注意,.
中的dgCMatrix
被识别为0
。
a <- coef.cv.glmnet(out.cvfit,"lambda.1se")$D
a[a[,1]!=0,]
使用的数据(示例的较小版本)。
set.seed(2018)
X <- matrix(rnorm(35000),nrow=1000,ncol=35)
colnames(X) <- sample(LETTERS,35,TRUE)
Y <- factor(sample(LETTERS[1:5],1000,TRUE),levels =LETTERS[1:5])
out.cvfit <- cv.glmnet(x=X ,y=Y,standardize=TRUE,family="multinomial",parallel = TRUE,type.measure = "class")
a <- coef.cv.glmnet(out.cvfit,"lambda.1se")$D
a[a[,1]!=0,]
(Intercept) R G R T Q L Z
0.017394446 -0.055170396 -0.006943011 0.006151795 0.017039835 -0.009432169 -0.047730565 0.065618965