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)

이것은. 자체 비용 함수를 정의 할 수 있습니다. 이진 분류의 경우 다음과 같이 할 수 있습니다영형에스=|아르 자형나는나는나는|

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))
  }

cv.glm 함수에서 mycost를 인수로 사용하십시오.


안 과 같을 (제외, 때 , 다음 용어는 ,하지 )? 영형에스
|아르 자형나는나는|0.5
|아르 자형나는나는|=112
Mooncrater

@ feng-mai pi == 0 또는 pi <0.5? (및 pi == 1 또는 pi> 0.5?) 0.5를 결정 경계로 사용하는 경우. 파이가 예상 확률이 아닙니까?
오후.

1
@PM 네 맞습니다. 는 glm 모델의 응답입니다. 수정 해 주셔서 감사합니다. 나는
Feng Mai

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.