首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >glmnet套索ROC图表

glmnet套索ROC图表
EN

Stack Overflow用户
提问于 2012-07-06 21:18:33
回答 2查看 5.1K关注 0票数 0

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

代码语言:javascript
复制
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。你有什么想法吗。

EN

回答 2

Stack Overflow用户

发布于 2014-04-03 12:58:45

代码语言:javascript
复制
require("glmnet")

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

代码语言:javascript
复制
glm_net <- cv.glmnet(x, y, family="binomial", type.measure="auc")
plot(glm_net)

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

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

票数 3
EN

Stack Overflow用户

发布于 2012-07-13 07:26:38

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

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

代码语言:javascript
复制
phat_new = exp(phat)/(1+exp(phat))

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

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

代码语言:javascript
复制
# 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曲线上的不同点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11362974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档