Какова функция стоимости в 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)

соsTзнак равноΣ|ря-пяя|, Вы можете определить свои собственные функции стоимости. В вашем случае для бинарной классификации вы можете сделать что-то вроде этого

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.

Фэн май
источник
соsT
Σ|ря-пя|0,5
|ря-пя|знак равно112
@ фэн-маи пи == 0 или пи <0,5? (и pi == 1 или pi> 0,5?), если использовать 0,5 в качестве границы решения. Разве пи не предсказанные вероятности ?
ПМ.
1
@ ПМ Да, вы правы. пяответы от модели GLM. Спасибо за исправление.
Фенг Май
1
cost <- function(r, pi = 0) mean(abs(r-pi) > 0.5)

Во-первых, вы установили порог 0,5. Ваш r равен 0/1, но пи - это вероятность. Таким образом, индивидуальная стоимость равна 1, если абсолютная ошибка больше 0,5, в противном случае - 0. Затем эта функция вычисляет средний коэффициент ошибок. Но помните, отсечение было установлено до того, как вы определите свою функцию стоимости.

На самом деле, я думаю, что имеет больше смысла, если выбор порога определяется функцией стоимости.

SLi
источник
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)
Alex
источник