0

(ラッソ回帰を実装する)でk分割交差検定を使用してglmnetいましたが、これから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。あなたはなにか考えはありますか。

4

2 に答える 2

0

セット {0,1} にバイナリ観測があると仮定します。

ロジット関数を使用して、 phat 変数の予測値を [0, 1] 範囲に変換できます。

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

これで、予測値 phat_new、観測値の真の値 val_y_matrix、および検証データセット内の 1 の割合 p が何であるかがわかります。ROC をプロットする 1 つの方法は次のとおりです。

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 曲線上の異なるポイントになることを意味します。

于 2012-07-12T23:26:38.390 に答える