从 R glmnet 对象中获取预测类别

3

我正在尝试使用R中的glmnet构建简单的多类逻辑回归模型。但是,当我尝试预测测试数据并获取列联表时,出现错误。下面是一个示例会话:

> mat = matrix(1:100,nrow=10)
> test = matrix(1:50,nrow=5)

> classes <- as.factor(11:20)

> model <- glmnet(mat, classes, family="multinomial", alpha=1)
> pred <- predict(model, test)
> table(pred, as.factor(11:15))
  Error in table(pred, as.factor(11:15)) : 
  all arguments must have the same length

任何帮助都将不胜感激。我是R语言的初学者。
谢谢。

你应该花更多时间阅读文档。仔细阅读?predict.glmnet,特别注意参数types - joran
@joran:我已经尝试了type=class、response和link,但仍然没有起作用 :-( - user721975
5
再次强调,你需要认真阅读。type参数需要一个字符作为输入,例如 type = "class". 其次,s 参数已经有明确的文档说明,并且对于你所尝试的操作是必需的。甚至还有一个例子来说明它的用法。 - joran
是的,我正确使用了“type”参数,但没有提供“s”。感谢您指出这一点。如果您想将您的评论发布为答案,我可以接受它。 - user721975
我很高兴你解决了它! :) - joran
@joran:glmnet::glmnetstats::glm至少有三个不同之处(相当无意义):x必须是矩阵(在数据框上会出错),类型必须是字符串(不像glm),并且predict.glmnet返回一个数组,除非您给它一个特定的s值。要给出的s值根本不明显。我刚刚独立迁移了一些glm代码,并遇到了这些相同的烦恼。 - smci
1个回答

6
glmnet对象的predict方法需要您为参数s指定一个值,该值表示您想要进行预测的正则化参数的哪些值。
(glmnet同时为多个正则化参数的值拟合模型。)
因此,如果您没有为s指定值,predict.glmnet将返回所有值的预测结果。如果您只想获得单一设置的预测结果,您需要在调用predict时设置s的值,或者事后提取相关列。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接