【问题标题】:glmnet lasso ROC chartsglmnet 套索 ROC 图表
【发布时间】:2012-07-06 22:59:35
【问题描述】:

我在glmnet 中使用了 k 折交叉验证(它实现了 lasso 回归),但我无法从中制作 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 图表,但它没有工作。我认为这是因为进入glmnet 的 x 和 y 对象的性质。你有什么想法。

【问题讨论】:

  • ROCR 包不工作吗?如果不是,具体问题是什么?

标签: r roc glmnet lasso-regression


【解决方案1】:

我假设您在集合 {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 曲线上的不同点。

【讨论】:

    【解决方案2】:
    require("glmnet")
    

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-08-10
      • 2016-05-30
      • 2014-07-10
      • 2018-11-25
      • 2017-05-03
      • 2023-03-05
      • 2016-11-27
      • 2020-11-05
      • 1970-01-01
      相关资源
      最近更新 更多