假设我在稀疏矩阵上有一个经过训练的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")转换虚拟系数/值或整体公式的最佳(最有效)方法是什么,就好像虚拟列不是稀疏格式(只是一列不同的因素)?
编辑:我需要将虚拟系数和它们的斜率/值转换回每个级别的不同斜率的单个系数。
发布于 2015-09-10 03:11:32
从邮寄名单中改编一个巧妙的例子,
n <- length(levels(df$catVar))
factor(A%*%1:n, labels = levels(df$catVar))发布于 2015-09-10 03:02:34
使用max.col获取索引向量,然后转换回一个因子,将级别设置为列名。
编辑示例:
X <- model.matrix(~group-1, sleep)
factor(max.col(X), labels=colnames(X)) 发布于 2015-09-10 03:27:23
稀疏矩阵的独立答案。您可以转换为三元组并直接读取索引:
require(Matrix)
X <- Diagonal(10)[sample(10,20,T), ]
factor(as(X, "TsparseMatrix")@j, labels=LETTERS[1:10]) 如果您的矩阵存储转置,那么您应该能够使用@i。
https://stackoverflow.com/questions/32492264
复制相似问题