2

假设我在一个稀疏矩阵上有一个训练有素的 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")

转换虚拟系数/值或整体公式的最佳(最有效)方法是什么,就好像虚拟列不是稀疏格式(只有一列不同因素)?

编辑:我需要将虚拟系数及其斜率/值转换回每个级别具有不同斜率的单个系数。

4

3 回答 3

0

稀疏矩阵的单独答案。您可以转换为三元组并直接读取索引:

require(Matrix)                                                                  
X <- Diagonal(10)[sample(10,20,T), ]                                             
factor(as(X, "TsparseMatrix")@j, labels=LETTERS[1:10])                                    

如果您的矩阵是转置存储的,那么您应该可以使用@i.

于 2015-09-10T03:27:23.303 回答
0

用于max.col获取索引向量,然后转换回因子,将级别设置为列名。

编辑示例:

X <- model.matrix(~group-1, sleep)                                               

factor(max.col(X), labels=colnames(X))                                           
于 2015-09-10T03:02:34.867 回答
0

邮件列表中改编一个漂亮的例子,

n <- length(levels(df$catVar))
factor(A%*%1:n, labels = levels(df$catVar))
于 2015-09-10T03:11:32.610 回答