Яка функція витрат у cv.glm у завантажувальному пакеті R?


14

Я роблю перехресну перевірку за допомогою методу "випуск один". У мене є бінарний відповідь і я використовую завантажувальний пакет для 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=|ripii|

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
|ripi|0,5
|ri-pi|=112

@ feng-mai pi == 0 або pi <0,5? (і pi == 1 або pi> 0,5?), якщо в якості межі рішення використовується 0,5. Хіба не пі прогнозовані ймовірності ?
ПМ.

1
pi

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

По-перше, ви встановили обмеження як 0,5. Ваш r дорівнює 0/1, але pi - ймовірність. Так індивідуальна вартість дорівнює 1, якщо абсолютна похибка більше 0,5, інакше 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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.