web-dev-qa-db-ja.com

xgboostにおけるObjectiveとFevalの違い

Rのxgboostのobjectivefevalの違いは何ですか?これは非常に基本的なことですが、それらを正確に定義することはできません。

また、マルチクラス分類を行う際のソフトマックスの目的は何ですか?

31
user2393294

目的

Objectivexgboostは、学習アルゴリズムが最適化する function です。定義により、1次(勾配)および2次(ヘシアン)導関数w.r.tを作成できる必要があります。特定のトレーニングラウンドでの予測。

カスタムObjective関数の例: link

# user define objective function, given prediction, return gradient and second order gradient
# this is loglikelihood loss
logregobj <- function(preds, dtrain) {
  labels <- getinfo(dtrain, "label")
  preds <- 1/(1 + exp(-preds))
  grad <- preds - labels
  hess <- preds * (1 - preds)
  return(list(grad = grad, hess = hess))
}

これはトレーニングにとって重要な関数であり、xgboostモデルを定義せずにトレーニングすることはできません。 Objective関数は、各ツリーの各ノードでの分割に直接使用されます。

feval

fevalxgboostは、モデルを直接最適化またはトレーニングする上で何の役割も果たしません。訓練するために必要なものすらありません。分割には影響しません。トレーニングした後、モデルにスコアを付けるだけです。カスタムfevalの例を見る

evalerror <- function(preds, dtrain) {
  labels <- getinfo(dtrain, "label")
  err <- as.numeric(sum(labels != (preds > 0)))/length(labels)
  return(list(metric = "error", value = err))
}

名前(メトリック)とスコア(値)を返すだけです。通常、fevalobjectiveは同じにすることができますが、必要なスコアリングメカニズムが少し異なるか、派生物がない可能性があります。たとえば、人々はlogloss objectiveを使用してトレーニングしますが、AUC fevalを作成してモデルを評価します。

さらに、fevalを使用して、モデルが改善しなくなったらトレーニングを停止できます。また、複数のfeval関数を使用して、さまざまな方法でモデルにスコアを付け、すべてを観察することができます。

モデルをトレーニングするためにfeval関数は必要ありません。それを評価し、トレーニングの早期停止を支援するためだけに使用します。

概要:

Objectiveは主要な主力製品です。

fevalは、xgboostがいくつかの素晴らしいことを行えるようにするヘルパーです。

softmaxは、マルチクラス分類で一般的に使用されるobjective関数です。これにより、すべての予測の合計が1になり、指数関数を使用してスケーリングされます。 softmax

48
T. Scharf