使用 cv.glmnet 获得预测值

机器算法验证 r 预言 网络
2022-03-12 14:15:27

我对带有 cv.glmnet 对象的 predict 函数有点困惑。

我正在运行这两行:

cvFit <- cv.glmnet(x = as.matrix(imputedTrainingData[,2:33]), y = imputedTrainingData[,1], family = "binomial", type.measure = "class" )

response<-predict(cvFit, as.matrix(imputedTestData[,2:33]), s= "lambda.min")

y 变量是一个 2 水平因子

为什么预测语句给出一个数字向量而不是预测的类变量结果?我想了一会儿,也许它给出了概率或属于一类或另一类,但结果的最大值在我的数据中略高于 0.35,最小值为 -.42。

谢谢!

1个回答

请注意,您predict.cv.glmnet在调用时使用的是该方法。此函数的帮助有点违反直觉,但您可以通过参数将参数传递给predict.glmnet执行预测的方法...

因此你可能想要

response <- predict(cvFit, as.matrix(imputedTestData[,2:33]),
                    s = "lambda.min",
                    type = "class")

哪里type = "class"有含义:

  Type ‘"class"’ applies only to
  ‘"binomial"’ or ‘"multinomial"’ models, and produces the
  class label corresponding to the maximum probability.

(来自?predict.glmnet

您所看到的是线性预测器(链接函数)尺度上的预测值,即在将 logit 函数的倒数应用于产生类 == 1 的概率之前。这在 R 中是相当典型的,就像通常这种行为可以通过type参数来控制。