2012-07-06 48 views
0

我在glmnet(它實現了套索迴歸)中使用k-fold交叉驗證,但是我無法根據此做出ROC圖表。glmnet 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對象的性質。你有什麼想法。

+0

不'ROCR'包工作?如果不是,具體問題是什麼? – smci 2014-03-08 19:41:50

回答

0

我假設你在集合{0,1}中有二元觀察值。

可以在柏變量的預測值轉換爲[0,1]採用分對數函數範圍:

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

現在,你知道的預測值,phat_new,觀測的真正價值,val_y_matrix,並且驗證數據集p中的1的百分比是。繪製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曲線上的不同點。

3
require("glmnet") 

只是改變措施,你會得到AUC。這不是ROC曲線,但提供了相同的信息。

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

下面是我正在訓練的模型中的一個示例,只是爲了展示它的外觀。 順便說一句。該算法非常快!

enter image description here

更多的模型可視化技術,檢查出ROCr package