假设我在稀疏矩阵上有一个经过训练的glmnet模型,其中多个预测变量包含不同级别的因子(以及因此不同数量的虚拟预测变量)。
df <- data.frame(y=runif(10), catVar=as.factor(sample(0:5,10,TRUE)))
A <- model.matrix(y ~ catVar,df)
train <- cv.glmnet(A[,c('catVar3', 'catVar4')], df$y)
coef(train, s="lambda.min")
转换虚拟系数/值或整体公式的最佳(最有效)方法是什么,好像虚拟列不是稀疏格式(只有一列不同因素)?
编辑:我需要将虚拟系数及其斜率/值转换回每个级别具有不同斜率的各个系数。
答案 0 :(得分:0)
使用max.col
获取索引向量,然后转换回因子,将级别设置为列名。
编辑示例:
X <- model.matrix(~group-1, sleep)
factor(max.col(X), labels=colnames(X))
答案 1 :(得分:0)
根据mailing list,
调整一个灵活的示例n <- length(levels(df$catVar))
factor(A%*%1:n, labels = levels(df$catVar))
答案 2 :(得分:0)
稀疏矩阵的单独答案。您可以转换为三元组并直接读取索引:
require(Matrix)
X <- Diagonal(10)[sample(10,20,T), ]
factor(as(X, "TsparseMatrix")@j, labels=LETTERS[1:10])
如果您的矩阵是转置存储的,那么您应该可以使用@i
。