我在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。你有什么想法吗。
发布于 2014-04-03 12:58:45
require("glmnet")只需更改度量,您将获得AUC。它不是ROC曲线,但提供了等效的信息。
glm_net <- cv.glmnet(x, y, family="binomial", type.measure="auc")
plot(glm_net)这是我正在训练的模型中的一个示例,只是为了展示它的外观。顺便说一句。这个算法非常快!

有关更多模型可视化技术,请查看ROCr package
发布于 2012-07-13 07:26:38
我假设您在集合{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曲线上的不同点。
https://stackoverflow.com/questions/11362974
复制相似问题