虚拟系数回到因子
Dummy coefficients back to factor
假设我在一个稀疏矩阵上有一个经过训练的 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")
转换虚拟 coefficients/values 或整个公式的最佳(最有效)方法是什么,就好像虚拟列不是稀疏格式(只有一列不同的因素)?
编辑:我需要将虚拟系数及其 slopes/values 转换回每个级别具有不同斜率的单独系数。
使用 max.col
获取索引向量,然后转换回因子,将级别设置为列名。
编辑示例:
X <- model.matrix(~group-1, sleep)
factor(max.col(X), labels=colnames(X))
改编 mailing list、
中的巧妙示例
n <- length(levels(df$catVar))
factor(A%*%1:n, labels = levels(df$catVar))
稀疏矩阵的单独答案。可以转化为三元组,直接读取索引:
require(Matrix)
X <- Diagonal(10)[sample(10,20,T), ]
factor(as(X, "TsparseMatrix")@j, labels=LETTERS[1:10])
如果你的矩阵是转置存储的,那么你应该可以使用@i
。
假设我在一个稀疏矩阵上有一个经过训练的 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")
转换虚拟 coefficients/values 或整个公式的最佳(最有效)方法是什么,就好像虚拟列不是稀疏格式(只有一列不同的因素)?
编辑:我需要将虚拟系数及其 slopes/values 转换回每个级别具有不同斜率的单独系数。
使用 max.col
获取索引向量,然后转换回因子,将级别设置为列名。
编辑示例:
X <- model.matrix(~group-1, sleep)
factor(max.col(X), labels=colnames(X))
改编 mailing list、
中的巧妙示例n <- length(levels(df$catVar))
factor(A%*%1:n, labels = levels(df$catVar))
稀疏矩阵的单独答案。可以转化为三元组,直接读取索引:
require(Matrix)
X <- Diagonal(10)[sample(10,20,T), ]
factor(as(X, "TsparseMatrix")@j, labels=LETTERS[1:10])
如果你的矩阵是转置存储的,那么你应该可以使用@i
。