Rのブートパッケージのcv.glmのコスト関数とは何ですか?


14

leave-one-outメソッドを使用して相互検証を行っています。バイナリ応答があり、Rのブートパッケージとcv.glm関数を使用しています。私の問題は、この機能の「コスト」の部分を完全に理解していないことです。私が理解できることから、これは推定値を1または0に分類するかどうか、つまり分類のしきい値を決定する関数です。これは正しいです?

また、Rのヘルプでは、二項モデルにこの関数を使用していますcost <- function(r, pi = 0) mean(abs(r-pi) > 0.5)。この関数をどのように解釈しますか?そのため、分析のために正しく変更できます。

助けていただければ幸いです。理解できない機能を使いたくないのです。

回答:


9

rは実際の結果を含むベクトル、piは近似値を含むベクトルです。

cost <- function(r, pi = 0) mean(abs(r-pi) > 0.5)

cost=|rp|

mycost <- function(r, pi){
    weight1 = 1 #cost for getting 1 wrong
    weight0 = 1 #cost for getting 0 wrong
    c1 = (r==1)&(pi<0.5) #logical vector - true if actual 1 but predict 0
    c0 = (r==0)&(pi>=0.5) #logical vector - true if actual 0 but predict 1
    return(mean(weight1*c1+weight0*c0))
  }

そして、mycostをcv.glm関数の引数として配置します。


cost
|rp|0.5
|rp|=112

@ feng-mai pi == 0またはpi <0.5?(およびpi == 1またはpi> 0.5?)0.5を決定境界として使用する場合。piは予測される確率ではありませんか?
PM。

1
p

1
cost <- function(r, pi = 0) mean(abs(r-pi) > 0.5)

最初に、カットオフを0.5に設定しました。rは0/1ですが、piは確率です。したがって、絶対誤差が0.5を超える場合、個々のコストは1、それ以外の場合は0です。次に、この関数は平均エラー率を計算します。ただし、コスト関数を定義する前にカットオフが設定されていることを忘れないでください。

実際、カットオフの選択がコスト関数によって決定される場合、より理にかなっていると思います。


0

@SLiによる答えは、あなたが定義したコスト関数が何をするのかをすでに十分に説明しています。ただし、コスト関数を使用してdeltaから値を計算することを追加すると考えcv.glmました。これは、相互検証エラーの測定です。ただし、厳密にdeltaは、コストによって与えられる各フォールドのエラーの加重平均です。これは、コードの関連ビットを調べることで確認できます。

for (i in seq_len(ms)) {
    j.out <- seq_len(n)[(s == i)]
    j.in <- seq_len(n)[(s != i)]
    Call$data <- data[j.in, , drop = FALSE]
    d.glm <- eval.parent(Call)
    p.alpha <- n.s[i]/n # create weighting for averaging later
    cost.i <- cost(glm.y[j.out], predict(d.glm, data[j.out, 
        , drop = FALSE], type = "response"))
    CV <- CV + p.alpha * cost.i # add previous error to running total
    cost.0 <- cost.0 - p.alpha * cost(glm.y, predict(d.glm, 
        data, type = "response"))
}

そして、関数によって返される値は次のとおりです。

  list(call = call, K = K, delta = as.numeric(c(CV, CV + cost.0)), 
    seed = seed)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.