0

我在glmnet(实现套索回归)中使用了 k 折交叉验证,但我无法从中制作 ROC 图表。

library(glmnet)
glm_net <- cv.glmnet(dev_x_matrix,dev_y_vector,family="binomial",type.measure="class")
phat <- predict(glm_net,newx=val_x_matrix,s="lambda.min")

这让我得到了一个看起来像拟合值对数的向量。在此之后我试图生成一些 ROC 图表,但它没有工作。我认为这是因为 x 和 y 对象的性质进入glmnet. 你有什么想法。

4

2 回答 2

3
require("glmnet")

只需更改度量,您将获得 AUC。它不是 ROC 曲线,但提供等效信息。

glm_net <- cv.glmnet(x, y, family="binomial", type.measure="auc")
plot(glm_net)

这是我正在训练的模型中的一个示例,只是为了展示它的外观。顺便提一句。该算法非常快!

在此处输入图像描述

有关更多模型可视化技术,请查看ROCr 包

于 2014-04-03T04:58:44.720 回答
0

我假设您在集合 {0,1} 中有二元观察。

您可以使用 logit 函数将 phat 变量中的预测值转换为 [0, 1] 范围:

phat_new = exp(phat)/(1+exp(phat))

现在,您知道预测值 phat_new、观察值的真实值 val_y_matrix 以及验证数据集中 1 的百分比 p 是多少。绘制 ROC 的一种方法如下:

修复 t。这是模型的截止阈值(在 [0,1] 中)。计算以下内容:

# percentage of 1 observations in the validation set, 
p = length(which(val_y_matrix==1))/length(val_y_matrix)

# probability of the model predicting 1 while the true value of the observation is 0, 
p_01 = sum(1*(phat_new>=t & val_y_matrix==0))/dim(val_x_matrix)[1] 

# probability of the model predicting 1 when the true value of the observation is 1, 
p_11 = sum(1*(phat_new>=t & val_y_matrix==1))/dim(val_x_matrix)[1]

# probability of false-positive, 
p_fp = p_01/(1-p)

# probability of true-positive, 
p_tp = p_11/p

# plot the ROC, 
plot(p_fp, p_tp)

我想知道是否有更好的方法来做到这一点。例如,如果您使用分类树,您可以将损失矩阵作为模型的输入,您将获得的模型将根据损失矩阵的成本比而有所不同。这意味着通过改变成本比,你会得到不同的模型,不同的模型将是 ROC 曲线上的不同点。

于 2012-07-12T23:26:38.390 回答