【发布时间】:2021-09-22 16:59:53
【问题描述】:
我正在尝试调整二项式 glmnet 的代码以使其适用于多项式问题,但由于某种原因,我不断收到错误代码。
这是完美运行的二项式模型的原始代码:
traininglasso <- stratified(sp_lasso, group = "Cat",
select = list(Cat = c("A","B", "C")),
size = c(86), replace=FALSE)
traininglasso[,Cat:=factor(Cat, labels = c("B", "B", "C") )]
check_lasso <- anti_join(sp_lasso, traininglasso, by=c("Accepted Symbol"))
check_lasso[,Cat:=factor(Cat, labels = c("B", "B", "C") )]
use_for_lasso <- within(for_lasso, Cat <- relevel(Cat, ref="C"))
lassod <- model.matrix(Cat~., use_for_lasso)[,-1]
cv.lassod <- cv.glmnet(lassod, use_for_lasso$Cat, alpha =1, family= "binomial")
lambdad <- cv.lassod
lasso_modeld <- glmnet(lassod, use_for_lasso$Cat, alpha =1, family = "binomial",
lambda = lambdad$lambda.1se)
coefd <- coef(lasso_modeld)
check_lasso_matrix <- model.matrix(Cat~., check_lasso)[,-1]
probslasso4 <- as.data.frame(predict.glmnet(lasso_modeld, type="response", newx = check_lasso_matrix))
对不起,罗嗦了这么多,但基本上我的步骤是这样的:
- 对原始数据集进行分层随机抽样,以获得“A”、“B”和“C”三个类别(猫)中的每一个的 86 个观察值
- 将类别 A 和 B 连接在一起,这样结果就是二元的(两个类别,只有 B 和 C)
- 组装所有不在随机样本中的观察结果,用于最后检查模型的准确性,并对它们进行重新分类。
- 按照建议运行 LASSO glm 的步骤
- 然后,在最后一行中,使用非训练数据生成预测以检查模型的准确性。
同样,所有这些都可以正常工作。 但是,当我将数据保留为三个类别并将族更改为多项式时(从字面上看,这些是我在下面的代码中所做的唯一更改,包括数据在内的所有其他内容都是相同的)我收到此错误消息:
Error in h(simpleError(msg, call)) :
error in evaluating the argument 'x' in selecting a method for function 'as.matrix': requires numeric/complex matrix/vector arguments
我读过其他人遇到此错误并且只需要重新格式化他们的矩阵,但我怀疑这不是我的问题,因为二项式代码适用于我用于此的矩阵。
这是我尝试过的多项式版本的代码,但它不起作用。我再次运行了上面的整个代码块,但我在这里只包括我编辑的从二项式到多项式的 4 行:
traininglasso[,Cat:=factor(Cat, labels = c("A", "B", "C") )]
check_lasso[,Cat:=factor(Cat, labels = c("A", "B", "C") )]
cv.lassod<- cv.glmnet(lassod, use_for_lasso$Cat, alpha =1, family= "multinomial")
lasso_modeld <- glmnet(lassod, use_for_lasso$Cat, alpha =1, family = "multinomial",
lambda = lambdad$lambda.1se)
【问题讨论】:
-
我还应该注意,错误消息专门附加到代码的最后一行(以
probslasso4 <-开头的代码 - 它上面的所有行都运行没有问题 -
一个更短的可重现示例会有所帮助。很可能,您正在尝试传递字符向量或不能直接转换为矩阵的东西。
-
对不起!我已经清理了一点,并删除了不必要的东西。感谢您的帮助 - 但如果不编辑二项式和多项式版本之间的数据(除了重新分类响应变量),为什么矩阵格式会改变/现在有问题?
标签: r glmnet multinomial