glmnet lasso ROC排行榜

时间:2012-07-06 13:18:33

标签: r roc glmnet lasso

我在glmnet(实现套索回归)中使用k-fold交叉验证,但我不能从中制作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对象的性质。你有什么想法。

2 个答案:

答案 0 :(得分:3)

require("glmnet")

只需改变措施即可获得AUC。它不是ROC曲线,而是提供相同的信息。

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

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

enter image description here

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

答案 1 :(得分: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曲线上的不同点。