【发布时间】:2021-01-24 02:51:53
【问题描述】:
我使用 R 的 glmnet 包训练了一个惩罚回归模型,并使用 sparse.model.matrix 构造了一个 X,其公式为“~ . * (var1)”,以从我的数据中获取每个术语并与 var1 交互:
X3 <- sparse.model.matrix(object = ~.*(var1), data = X)[,-1]
cv_lasso <- cv.glmnet(x = X3, y = Y3,
alpha = 1,
nfold = 10,
family = "binomial",
nlambda = 100,
lambda.min.ratio=0.001,
type.measure="auc",
keep = TRUE,
parallel = TRUE)
现在,我正在尝试预测几个数据点,但是当将 newX 转换为 model.matrix 以与 predict.glmnet() 一起使用时,如下所示:
X_pred <- sparse.model.matrix(object = ~.*(var1), data = X_holdout)
predict(object = cv_lasso,
newx = X_pred,
s = "lambda.min")
但我收到以下错误:
contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]]) 中的错误: 对比只能应用于具有 2 个或更多级别的因素
我相信这可能是由于 X_holdout 中的几列基本保持不变(这是正确的,因为我现在正在尝试预测,我已经成功训练了)。
如何避免这个问题?我的理解是,由于我使用交互来训练我的模型,因此我必须在我的预测中创建一个具有相同交互的模型矩阵。
【问题讨论】:
标签: r sparse-matrix glmnet