xgboost에 대한 사용자 정의 손실 함수를 작성하는 예를 찾았 습니다 .
loglossobj <- function(preds, dtrain) {
# dtrain is the internal format of the training data
# We extract the labels from the training data
labels <- getinfo(dtrain, "label")
# We compute the 1st and 2nd gradient, as grad and hess
preds <- 1/(1 + exp(-preds))
grad <- preds - labels
hess <- preds * (1 - preds)
# Return the result as a list
return(list(grad = grad, hess = hess))
}
물류 손실 기능은
여기서 는 로그 홀수이고 는 레이블 (0 또는 1)입니다.
내 질문은 : 어떻게 실제 값과 예측 확률 (log-odds로 계산)의 차이와 단순히 그라디언트 (일차 미분)를 얻을 수 preds <- 1/(1 + exp(-preds))
있습니까?
이를 달성하려면 제곱 오류 손실을 사용해야합니다. 귀하의 표기법은 혼란스럽고 게시물에 정의되어 있어야합니다. 경우 다음 예측 위험하다 ( Y - p가 ) 2 손실은 당신이 원하는 것입니다. 우리 는 p 를 사용 하여 로그 홀수를 의미 하지 않기 때문에 혼란 스럽습니다 .
—
AdamO
는 대문자 P 로 고정되었습니다. 로그 홀수이며 질문에 명확하게 표시되어 있습니다. I 손실 함수 것을 알 구배 ( Y - F ( X ) ) 2 인 F ( X ) - (Y)를 , 그러나 squred 손실 물류 아니다.
—
Ogurtsov 2016 년
"그라데이션 (gradient)"이라고 말할 때, 어떤 그라디언트를 의미합니까? 손실의 구배? 식의 미분이 선형 차이 인 경우식이 2 차 차이 또는 제곱 오차 손실이라는 단순한 수학적 관계입니다.
—
AdamO
그렇습니다. 손실의 구배에 관한 것입니다. 손실 함수가 제곱 오차 일 때 간단합니다. 이 경우 손실 함수는 물류 손실 ( en.wikipedia.org/wiki/LogitBoost ) 이며이 함수의 그라디언트와 주어진 코드 예제 사이의 대응 관계를 찾을 수 없습니다.
—
Ogurtsov 2016 년